Так что спасибо @FlorentB за ответ, который заключался в использовании флага расширения переменной среды. Это, включенное в окончательный ответ, дало следующее, которое вернуло имя файла последнего измененного файла из указанного каталога.

ция:

Я хочу вернуть фактическое значение строковой переменной из командной строки Windows.

Команда

cd C:\Users\User\Desktop\Testfolder && (for /f "eol=: delims=" %F in ('dir /b /od *.csv') do @set "newest=%F" ) && echo %newest%

при выполнении в окне командной строки правильно возвращает значение, например,"Test2.csv"

В приведенном ниже коде я не могу вернуть это значение в ближайшее окно в Excel; вместо этого я получаю команду, которую я выдал, которая была"%newest%"

Код:

Public Sub Test
    Debug.Print CreateObject("wscript.shell").exec("cmd /c cd C:\Users\User\Desktop\Testfolder && (for /f ""eol=: delims="" %F in ('dir /b /od *.csv') do @set ""newest=%F"" ) && echo %newest%").StdOut.ReadAll
End Sub

Результат в окне командной строки:

Результат в ближайшем окне:

Что я пробовал:

Я посмотрел на большое количество ресурсов; несколько из которых я перечислил в ссылках в конце. Различные попытки включают в себя:

1) Я попытался сбежать, чего не ожидал увидеть, с:

echo %%newest%%   '<==== give %Test2.csv%  in CLI and %%newest%% in immediate

2) Добавление ожиданий, например:

Debug.Print CreateObject("wscript.shell").exec("cmd /c cd C:\Users\User\Desktop\Testfolder && (for /f ""eol=: delims="" %F in ('dir /b /od *.csv') do @set ""newest=%F"" ) && PING localhost -n 2 >NUL && echo %newest%").StdOut.ReadAll

3) Передача в текстовый файл и чтение назад:

 CreateObject("wscript.shell").exec ("cmd /c cd C:\Users\User\Desktop\Testfolder && (for /f ""eol=: delims="" %F in ('dir /b /od *.csv') do @set ""newest=%F"" )&& echo %newest% > C:\Users\User\Desktop\Testfolder\fileInfo.txt") '.StdOut.ReadAll
 Debug.Print CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\UsersUser\Desktop\Testfolder\fileInfo.txt", ForReading).ReadAll

В последнем примере в одном случае это записывало фактическое значение в файл, но после этого продолжало записывать"%newest%"

Ясно, что я не собираю результат выполненного оператора из командной строки.

Как я могу вернуть фактическое значение, пожалуйста?

Дополнительная информация:

Это серия команд, которые переходят в указанный каталог; зацикливает CSV-файлы в этой папке; находит последний измененный файл и возвращает его имя.

Рекомендации:

Получить возвращаемое значение ShellexecuteЧтение вывода из оболочкиУстановка и использование переменной в одной командной строке в Windows CMDСценарии - ждет

Ответы на вопрос(1)

Ваш ответ на вопрос