Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理文件循环列表_Windows_Batch File - Fatal编程技术网

Windows 批处理文件循环列表

Windows 批处理文件循环列表,windows,batch-file,Windows,Batch File,我在这个领域还是个新手,所以如果有不正确的措辞,我会提前道歉。我正在寻找一种方法,使批处理文件循环,并在完成一次后重复相同的过程,仅使用数字列表中%3的不同数字。%3的数字列表少于100,因此我不介意在批处理文件中写出它们。等待命令完成并写入下一个数字会变得很乏味。此外,这些数字不是按顺序排列的(即1-100),而是分散的(即2、6、21、48)。非常感谢您的任何帮助。提前感谢您抽出时间 @ECHO OFF ECHO ==============STORE #%3===============

我在这个领域还是个新手,所以如果有不正确的措辞,我会提前道歉。我正在寻找一种方法,使批处理文件循环,并在完成一次后重复相同的过程,仅使用数字列表中%3的不同数字。%3的数字列表少于100,因此我不介意在批处理文件中写出它们。等待命令完成并写入下一个数字会变得很乏味。此外,这些数字不是按顺序排列的(即1-100),而是分散的(即2、6、21、48)。非常感谢您的任何帮助。提前感谢您抽出时间

@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))用这行的内容做一些事情。