BAT在文本文件上使用for / f不起作用?

时间:2011-11-04 19:11:42

标签: batch-file windows-shell

我正在尝试使用for / F来输入3个变量并使用它们将文件移动到他们需要进入组织的文件夹中。

脚本完全正是我想要它做的...除了它只是在.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 个答案:

答案 0 :(得分:2)

你想要在每一行上完成的一切必须在for循环中完成。

正在发生的是您正在更新每行的变量。因此,当它们离开for循环时,它们位于最后设置的项目上。然后你做你的mkdir,set,&复制仅适用于最后一项。

将末端括号移到底部应该只修复一次。

然后将%更改为!以使用您已设置的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!"
)