首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理:for-循环中的变量不会更改。

批处理:for-循环中的变量不会更改。
EN

Stack Overflow用户
提问于 2018-01-18 15:05:15
回答 1查看 48关注 0票数 0

我正在尝试创建一个批处理文件,对目录中的所有PDF-文件执行各种操作。以下是我文件的第一行:

代码语言:javascript
复制
SETLOCAL EnableDelayedExpansion
FOR /R "C:\Daten\test" %%f IN (*.pdf) DO (
 set _currentpdf=%%f
 echo %_currentpdf%
 call %~dp0\sumatrapdf.exe %_currentpdf%
 pause
 )

我不明白的是,当运行批处理时,行"set _currentpdf=“将正确显示(即每个循环执行的正确文件显示在=之后),但值保持不变,并且始终设置为for -循环的第一次执行之一。导致Echo和sumatrapdf总是一次又一次地显示第一个文件.?!

谢谢你的开悟!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 15:46:26

您应该使用Start命令而不是Call命令。

我建议要么:

代码语言:javascript
复制
SetLocal EnableDelayedExpansion
For /R "C:\Daten\test" %%f In (*.pdf) Do (
    Set "_currentpdf=%%f"
    Echo !_currentpdf!
    Start "" "%~dp0sumatrapdf.exe" "!_currentpdf!"
    Pause
)

您规定了延迟扩展,但是在您希望延迟展开的变量中没有用%替换!

或者您可以完全忘记延迟展开,因为没有必要在循环中设置任何变量:

代码语言:javascript
复制
For /R "C:\Daten\test" %%f In (*.pdf) Do (
    Echo %%f
    Start "" "%~dp0sumatrapdf.exe" "%%f"
    Pause
)

还要考虑到,您的Pause命令将失去焦点之间的每个pdf选项卡开放。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48324337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档