Windows 批处理文件循环列表
我在这个领域还是个新手,所以如果有不正确的措辞,我会提前道歉。我正在寻找一种方法,使批处理文件循环,并在完成一次后重复相同的过程,仅使用数字列表中%3的不同数字。%3的数字列表少于100,因此我不介意在批处理文件中写出它们。等待命令完成并写入下一个数字会变得很乏味。此外,这些数字不是按顺序排列的(即1-100),而是分散的(即2、6、21、48)。非常感谢您的任何帮助。提前感谢您抽出时间Windows 批处理文件循环列表,windows,batch-file,Windows,Batch File,我在这个领域还是个新手,所以如果有不正确的措辞,我会提前道歉。我正在寻找一种方法,使批处理文件循环,并在完成一次后重复相同的过程,仅使用数字列表中%3的不同数字。%3的数字列表少于100,因此我不介意在批处理文件中写出它们。等待命令完成并写入下一个数字会变得很乏味。此外,这些数字不是按顺序排列的(即1-100),而是分散的(即2、6、21、48)。非常感谢您的任何帮助。提前感谢您抽出时间 @ECHO OFF ECHO ==============STORE #%3===============
@ECHO OFF
ECHO ==============STORE #%3================ >>EM_Push.log
ECHO %date% >>EM_Push.log
ECHO %time% >>EM_Push.log
IF EXIST d:\micros\res\em\transport\send\0%3\*.mpz goto start
IF NOT EXIST d:\micros\res\en\transport\send\0%3\*.mpz goto nofile
:START
ECHO ---------Mapping Drive------------ >>EM_Push.log
net use s: /d
net use s: \\10.16.%3.101\d$ /user:%1 %2 >>EM_Push.log
IF NOT EXIST s:\micros ECHO POSSIBLE NETWORK ISSUE >>EM_Push.log
IF NOT EXIST s:\micros goto end
ECHO ----------Copy Package from EM to Store %3----------- >>EM_Push.log
copy d:\micros\res\em\transport\send\0%3\*.mpz s:\micros\res\em\transport\receive >>EM_Push.log
IF NOT EXIST d:\micros\res\em\transport\send\0%3\archive md d:\micros\res\em\transport\send\0%3\archive
move d:\micros\res\em\transport\send\0%3\*.mpz d:\micros\res\em\transport\send\0%3\archive >>EM_Push.log
ECHO --------Deploy Package-------------- >>EM_Push.log
psexec \\10.16.%3.101 -u %1 -p %2 d:\micros\res\em\bin\receive.exe >>EM_Push.log
psexec \\10.16.%3.101 -u %1 -p %2 d:\micros\res\em\bin\deployment.exe >>EM_Push.log
REM ECHO ---------Exit41 Update------------- >>EM_Push.log
REM IF EXIST s:\exit41\commands\pagepull.exe psexec \\10.16.%3.101 -u %1 -p %2 d:\exit41\commands\pagepull.exe >>EM_Push.log
REM IF EXIST s:\exit41\commands\pagepull.exe ECHO Done! >>EM_Push.log
REM IF NOT EXIST s:\exit41\commands\pagepull.exe ECHO Not subscribed to Exit41 >>EM_Push.log
ECHO ----------Copy Confirmation from Stor %3 to EM----------- >>EM_Push.log
IF NOT EXIST s:\micros\res\em\transport\send\*.mpz ECHO RECEIVE PACKET NOT AVAILABLE >>EM_Push.log
IF NOT EXIST s:\micros\res\em\transport\send\*.mpz goto end
copy s:\micros\res\em\transport\send\*.mpz d:\micros\res\em\transport\receive >>EM_Push.log
IF NOT EXIST s:\micros\res\em\transport\send\archive md s:\micros\res\em\transport\send\archive
move s:\micros\res\em\transport\send\*.mpz s:\micros\res\em\transport\send\archive >>EM_Push.log
goto end
:NOFILE
ECHO NO UPDATES FOR THIS STORE >>EM_Push.log
:END
net use s: /d >>EM_Push.log
ECHO==============END STORE #%3============= >>EM_Push.log
只需多次调用脚本,一个接一个地使用数字 假设您的数字位于
numbers.txt
:
for /f %%i in (numbers.txt) do (
call :process %1 %2 %%i
)
goto :eof
:process
REM here goes your script
您的numbers.txt
应该如下所示:
2
6
21
48
...
您是否在目录名
en
中的第7行键入错误,因为该目录在其他任何地方都是em
?打开命令提示符窗口,在此窗口中运行以获取/?
,并阅读此命令的所有帮助页面输出。还有数千个关于堆栈溢出的示例,它们使用命令FOR逐行从列表文件中读取类似数字的内容,并使用读取的数据处理命令。或者您是否将所有数字指定为第三个参数,即“2 6 21 48”
,在这种情况下,命令FOR也是解决方案。或者您是否使用username password 2 6 21 48
运行批处理文件,在使用两次SHIFT命令后,该批处理文件也可以使用FOR进行处理。还有一个提示:net use s:\\10.16.%3.101\d$/user:%1%2/持久性:此处建议不使用,或者Windows将所有网络共享临时(直到删除)存储在Windows注册表中(用于下次登录时自动重新连接)这没有多大意义。嗨,Stephan,在阅读了关于我的选项之后,txt文件似乎是最好的方式。现在我已经阅读了命令输出的帮助页面,但仍然不太明白这会在批处理文件中出现在哪里。循环是否会知道在最后一个数字处停止?For命令本身会在完整的开始处停止在@Echo OFF之前清除脚本?同样,在从提示符运行命令时,由于变量已取代%3,我是否在本节中使用了其他内容?原则上是的。但一些常见任务应在之前移动(如net use
-多次执行没有意义)这可以提高性能。你可以留下<代码> @回音后面,但是我会认为这是一个“共同任务”。简单地说,我的代码“对文件中的每一行( %%i))用这行的内容做一些事情。