我正在尝试使用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%"
答案 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!"
)