Windows 使用for循环输入多个数据
我是编程新手。这是我的困境。我必须在多台计算机的多个位置替换多个文件 我已经编写了一个bat脚本,其中定义了所有变量,并调用了一个包含适当信息的txt文件。例如-testing.txt具有以下值:Windows 使用for循环输入多个数据,windows,batch-file,Windows,Batch File,我是编程新手。这是我的困境。我必须在多台计算机的多个位置替换多个文件 我已经编写了一个bat脚本,其中定义了所有变量,并调用了一个包含适当信息的txt文件。例如-testing.txt具有以下值: Apple, Potato,Beef Apple, Potato,Pork 我应用的逻辑如下:我使用这个txt文件进行读取,然后到每个位置更改文件 set Path=%Path%;c:\Tools\UnxUtils\usr\local\wbin SET SORC=C:\tools\logosourc
Apple, Potato,Beef
Apple, Potato,Pork
我应用的逻辑如下:我使用这个txt文件进行读取,然后到每个位置更改文件
set Path=%Path%;c:\Tools\UnxUtils\usr\local\wbin
SET SORC=C:\tools\logosource\NEWImages\ApiSite\Content
for /F "usebackq delims=, tokens=1-3" %%a in (C:\tools\xxxx\testing.txt) do (
SET HOSTNAME=%%a
SET CUSTNAME=%%c
SET STYPE=%%b
SET DEST=\\%HOSTNAME%\c$\Documents and Settings\blahblah\My Documents\%CUSTNAME%\%STYPE%\goodman\
echo HOSTNAME is %HOSTNAME%
echo CUSTNAME is %CUSTNAME%
echo STYPE is %STYPE%
echo DEST is %DEST%
echo SORC is %SORC%
)
copy "%DEST%\ApiSite\Content\images\michael.gif" "%DEST%"
copy /b /y "%SORC%\images\george.gif" "%DEST%\ApiSite\Content\images\michael.gif"
goto End
:Error
ECHO Error! You must pass in a servername
goto End
:End
问题是我的循环只读取txt文件的最后一行。例如,上面写着“苹果、土豆、猪肉”,并将DEST设置为该值
我真正想要的是读取第1行(苹果、土豆、牛肉),使用这些参数设置DEST并更改文件,然后返回并读取第二行(苹果、土豆、猪肉),使用这些参数设置DEST并更改文件。实际上,您的代码正在读取文件中的每一行,但您的逻辑是错误的 您的主要问题是您希望为每一行执行COPY语句,但是在循环之外有COPY语句。当然,它们只执行一次,使用的值将是文件中最后一行设置的值。解决方案是将COPY语句移动到循环中 另一个问题是,您试图在带括号的块内设置一个变量,然后使用
%var%
访问该值。这无法工作,因为在解析语句时会发生扩展,并且在读取任何行之前会对整个块进行一次解析。您可以通过使用延迟扩展来解决该问题(从命令行提示符键入HELP SET
,以获取有关延迟扩展的更多信息)。但实际上不需要将值保存在变量中。只需直接使用FOR变量。因为DEST被多次使用,所以我使用了一个额外的FOR循环来定义一个包含DEST值的%%d
变量。~
删除FOR循环添加的引号
另外,通过使用GOTO END
并在文件末尾定义:END
标签来结束脚本。这是可行的,但在每个脚本的末尾都有一个隐式的:EOF
标签。您只需使用GOTO:EOF
,而无需定义标签。另一个选项是使用EXIT/B
您有一个未调用的:ERROR
例程-我假定您有其他未显示的代码
set Path=%Path%;c:\Tools\UnxUtils\usr\local\wbin
SET "SORC=C:\tools\logosource\NEWImages\ApiSite\Content"
for /F "usebackq delims=, tokens=1-3" %%a in (C:\tools\xxxx\testing.txt) do (
for %%d in (
"\\%%a\c$\Documents and Settings\blahblah\My Documents\%%b\%%b\goodman\"
) do (
echo HOSTNAME=%%a
echo CUSTNAME=%%c
echo STYPE=%%b
echo DEST=%%~d
echo SORC is %SORC%
copy "%%~d\ApiSite\Content\images\michael.gif" "%%~d"
copy /b /y "%SORC%\images\george.gif" "%%~d\ApiSite\Content\images\michael.gif"
)
)
exit /b
:Error
ECHO Error! You must pass in a servername
exit /b