Batch file 批处理for循环中的第二个命令
我想批量编写代码,如下所示:Batch file 批处理for循环中的第二个命令,batch-file,for-loop,Batch File,For Loop,我想批量编写代码,如下所示: for %%a in (%list%) do ( command1 command2 command3 command4 . . . ) 正确执行列表第一个元素的第一个命令。但是在command2中有错误。在cmd窗口中,我可以看到发生了什么。在命令中,%%a未更改为值。存在“%a”而不是该值。在我的代码中有一个“%%a”,与command1中的完全相同 这里出了什么错?如何在批处理for循环中执行多个命
for %%a in (%list%) do (
command1
command2
command3
command4
.
.
.
)
正确执行列表第一个元素的第一个命令。但是在command2中有错误。在cmd窗口中,我可以看到发生了什么。在命令中,%%a未更改为值。存在“%a”而不是该值。在我的代码中有一个“%%a”,与command1中的完全相同
这里出了什么错?如何在批处理for循环中执行多个命令
完整脚本:
set machines=pc1 pc2 pc3 pc4
set source1="\\%%a\c$\Data1"
set source2="\\%%a\c$\Data2"
set dest1="\\server\share\%%a\data1\%date%
set dest2="\\server\share\%%a\data2\%date%
set log1=\\server\share\log\log_%date%_data1.txt
set log2=\\server\share\log\log_%date%_data2.txt
set mail="success"
set errormail="error"
set betreff="successmail"
set errorbetreff="errormail"
set empf="dummy@test.com"
set blat="pathtoblat\blat.exe"
set error=0
for %%a in (%machines%) do (
%windir%\system32\robocopy.exe %source1% %dest1% /e /COPYALL /log:%log1%
if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto error
... different errorlevels
if %ERRORLEVEL% EQU 0 echo No Change & goto next
:error
set error=1
:next
%windir%\system32\robocopy.exe %source2% %dest2% /e /COPYALL /log:%log2%
if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto errormail
... different errorlevels
if %ERRORLEVEL% EQU 0 echo No Change
if error==1 goto errormail
goto mail
:errormail
%blat% -to %empf% -f %COMPUTERNAME%@test.com -server 172.y.y.y -s %errorbetreff% -body %errormail% -attacht %log1%,%log2%
goto loeschen
:mail
%blat% -to %empf% -f %COMPUTERNAME%@test.com -server 172.y.y.y -s %betreff% -body %mail%
:loeschen
setlocal enableextensions disabledelayedexpansion
pushd "\\server\share\backup\%COMPUTERNAME%\data1" && (
for /f "skip=2 delims=" %%a in (
'dir /b /ad /tc /o-d'
) do rmdir /s /q "%%~fa"
popd
)
setlocal enableextensions disabledelayedexpansion
pushd "\\server\share\backup\%COMPUTERNAME%\data2" && (
for /f "skip=2 delims=" %%a in (
'dir /b /ad /tc /o-d'
) do rmdir /s /q "%%~fa"
popd
)
setlocal enableextensions disabledelayedexpansion
pushd "\\server\share\log" && (
for /f "skip=4 delims=" %%a in (
'dir /b /a-d /tc /o-d'
) do del /q "%%~fa"
popd
)
)
谢谢现在已经清楚了错误的来源。
转到
中断了上下文的,并且%%a
不再存在。使用子例程和调用重写批处理,而不是在文件中使用转到%%a
,因为脚本就是这样解析的,所以文件中的%a
在命令提示符中看起来总是像%a
,而问题出在命令中。但它完全是同一个命令。这是一个从一台pc(带有两个文件夹)到服务器的robocopy作业。列表是我要备份的机器列表。第一个命令\\pc1\folder1已备份。在第二个命令中失败,窗口中写入\\%a\folder2 instad of\\pc1\folder2可能是你列表中的一个特殊符号,比如括号引号…我现在没有时间给出完整的答案。但不能在FOR循环或IF块中使用GOTO。但是你可以用电话。此外,在设置变量的同一块中展开变量时,必须使用延迟展开。但在子例程的末尾仍然有goto:eof
?!好的,我使用了exit/b,最后一个goto:eof
设置在for循环后面。所以它工作得很好。非常感谢。