Переменная не повторяется в цикле For - PullRequest
0 голосов
/ 13 мая 2018

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

Я следовал указаниям здесь , но по какой-то причине это не такt вообще ничего не возвращает, когда должно!

FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Desktop\UPD\*.txt') DO SET result=%%G

Я также пытался:

FOR /F "tokens=*" %%G IN (dir /b C:\Users\Desktop\UPD\*.txt') DO SET _result=%%~G

echo %_result% >> %~dp0Outputfile.txt

Что я получаю:

ECHO is on.

РЕДАКТИРОВАТЬ

Вот что я сделал до сих пор:

IF EXIST C:\Users\Nathanael\Desktop\UPD\*.txt (
    echo file found >> %~dp0Outputfile.txt
    chDIR C:\Users\Nathanael\Desktop\UPD\
    dir *.txt /b >> %~dp0Outputfile.txt

    FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Nathanael\Desktop\UPD\*.txt') DO SET result=%%G
    echo %result% >> %~dp0Outputfile.txt
)

Вывод:

file found
NewVHD.txt
random.txt
ECHO is on.

Ответы [ 2 ]

0 голосов
/ 13 мая 2018
  • Если for /f возвращает несколько файлов, последний из них будет перезаписывать предыдущий в set
  • . Способ синтаксического анализа (блоки кода) cmd.exe требует отложенного расширения при установке переменной varи используется внутри того же кодового блока, что и в случае с if exist

Так что либо избегайте блок кода с обратной логикой

IF NOT EXIST "C:\Users\Nathanael\Desktop\UPD\*.txt" Goto :Eof or other label

Или (всегда делайте отступы кодовых блоков влучше отслеживать):

Setlocal EnableDelayedExpansion
IF EXIST "C:\Users\Nathanael\Desktop\UPD\*.txt" (
    echo file found >> %~dp0Outputfile.txt
    chDIR "C:\Users\Nathanael\Desktop\UPD\"
    dir "*.txt" /b >> %~dp0Outputfile.txt
    FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Nathanael\Desktop\UPD\*.txt') DO SET result=%%G
echo(!result! >> %~dp0Outputfile.txt
)
  • Хорошая привычка всегда заключать в двойные кавычки
  • , чтобы избежать echo is off сообщений, использующих другой разделитель команд, чем пробел, еслиvar, возможно, пуст (я использовал ( здесь
0 голосов
/ 13 мая 2018
FOR /F "tokens=*" %%G IN ('dir /b C:\Users\Desktop\UPD*.txt') DO SET result=%%G

Убедитесь, что путь правильный (например, возможно, он должен быть c:\Users\YourName\Desktop\UPD*.txt, где YourName - имя пользователя)?

...