Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Loops 为什么循环中的参数未更新_Loops_For Loop_Batch File - Fatal编程技术网

Loops 为什么循环中的参数未更新

Loops 为什么循环中的参数未更新,loops,for-loop,batch-file,Loops,For Loop,Batch File,我尝试循环到文件夹中的所有文件,并拆分文件名,以将它们用作批处理文件中的输入参数 有人能解释一下为什么当我第二次进入循环(等等)时,循环中的变量似乎不再更新/识别了 当我试图显示FILENAME变量时,我有“echo FILENAME:!FILENAME!”但我希望是“echo FILENAME:myfile.txt” 同样的问题当我用两个参数调用打印批处理时,我希望用“D:\App\Test\PRINT.bat”testfolder myfile.txt执行批处理,但我看到了“D:\App\T

我尝试循环到文件夹中的所有文件,并拆分文件名,以将它们用作批处理文件中的输入参数

有人能解释一下为什么当我第二次进入循环(等等)时,循环中的变量似乎不再更新/识别了

当我试图显示FILENAME变量时,我有“echo FILENAME:!FILENAME!”但我希望是“echo FILENAME:myfile.txt”

同样的问题当我用两个参数调用打印批处理时,我希望用“D:\App\Test\PRINT.bat”testfolder myfile.txt执行批处理,但我看到了“D:\App\Test\PRINT.bat”!arg1!arg2!"

我想这应该是由于ENABLEDELAYEXPANSION在第一个循环的末尾结束,但是我的endlocal ENABLEDELAYEXPANSION已经放在了批处理的末尾

所以我真的不明白发生了什么

非常感谢你的帮助

setlocal ENABLEDELAYEDEXPANSION

for %%i in ("D:\App\Result"\*.*) do (

   echo name : %%i
   set str=%%i

   for /f "tokens=1,2,3,4,5 delims=\" %%a in ("!str!") do (set DRIVELETTER=%%a&set DOMAIN=%%b&set NAME=%%c&set RESULT=%%d&set FILENAME=%%e)

   echo FILENAME: !FILENAME!

   set FOLDERNAME=!str:~0,5!
   echo FOLDERNAME : !FOLDERNAME!

   set arg1="D:\App\!FOLDERNAME!"
   set arg2="D:\App\!FILENAME!"
    
   D:\App\Test\print.bat !arg1! !arg2!

 )

 endlocal ENABLEDELAYEDEXPANSION

您是说在第二次运行脚本时失败,还是在循环找到的第二个文件上失败?您知道获取文件名非常简单:
%%~nxi
。我不理解您对变量
FOLDERNAME
ARG1
的用法。您正在执行
STR
变量的子字符串,该变量将使
FOLDERNAME
的值为
D:\Ap
,而
ARG1
的值为
“D:\App\D:\Ap“
。此外,如果需要从另一个批处理文件运行批处理文件,并希望执行返回到父批处理文件,则需要使用
调用
命令来执行子批处理文件。
ENDLOCAL
命令也没有提供任何参数。行中唯一的内容应该是
ENDLOCAL
。永远不会填充
FILENAME
变量。您的文件路径只有4个令牌。1) D:2)应用程序3)结果4)文件名。第5个令牌从未填充。