Так что спасибо @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Сценарии - ждет