BAT Использование for / f для текстового файла не работает? - PullRequest
0 голосов
/ 04 ноября 2011

Я пытаюсь использовать for / F для подачи трех переменных и использовать их для перемещения файлов в папки, в которых они должны находиться для организации.

Скрипт делает именно то, что я хочу ... ЗА ИСКЛЮЧЕНИЕМ, он делает это только для самой последней строки в файле .txt. Я думал, что / F будет автоматически выполнять команду для каждой строки в текстовом файле, но что-то не так, и это не так.

Может кто-нибудь сказать мне, как исправить приведенный ниже код, чтобы он работал для каждой строки в тексте, а не только для последней строки?

Спасибо!

SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2,3 delims=," %%G in (MoveFiles.txt) do (
@set "Account_ID=%%G" 
@set "PACKAGE_ID=%%H" 
@set "FILE_NAME=%%I")

mkdir -p "O:\Documents and Media\%PACKAGE_ID%\%ACCOUNT_ID%"

SET FOO="O:\MediaAttachments\%FILE_NAME%"
COPY %FOO% "O:\Documents and Media\%PACKAGE_ID%\%ACCOUNT_ID%\%FILE_NAME%"

1 Ответ

2 голосов
/ 04 ноября 2011

Все, что вы хотите сделать в каждой строке, должно выполняться в цикле for.

Что происходит, вы обновляете переменные для каждой строки. Таким образом, они находятся на последних элементах набора, когда они выходят из цикла for. Затем вы делаете свой mkdir, set & copy, который предназначен только для этого последнего элемента.

Перемещение конечной круглой скобки вниз должно исправить только одно действие.

Затем измените % на !, чтобы использовать EnableDelayedExpansion, который вы уже настроили.

SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2,3 delims=," %%G in (MoveFiles.txt) do (
    @set "Account_ID=%%G" 
    @set "PACKAGE_ID=%%H" 
    @set "FILE_NAME=%%I"

    mkdir -p "O:\Documents and Media\!PACKAGE_ID!\!ACCOUNT_ID!"

    SET FOO="O:\MediaAttachments\!FILE_NAME!"
    COPY !FOO! "O:\Documents and Media\!PACKAGE_ID!\!ACCOUNT_ID!\!FILE_NAME!"
)
...