首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以在DOS批处理文件中有一个IF块吗?

我可以在DOS批处理文件中有一个IF块吗?
EN

Stack Overflow用户
提问于 2011-02-13 17:51:45
回答 3查看 251.5K关注 0票数 106

在DOS批处理文件中,我们只能有一行if语句体?我想我在某个地方发现,我可以像在类似C的编程语言中使用的{}一样,将()用于if块,但是当我尝试这样做时,它并没有执行这些语句。也没有错误消息。这是我的代码:

代码语言:javascript
复制
if %GPMANAGER_FOUND%==true(echo GP Manager is up
goto Continue7
)
echo GP Manager is down
:Continue7

奇怪的是,当我运行批处理文件时,既没有打印"GP Manager is up“,也没有打印"GP Manager is down”。

EN

回答 3

Stack Overflow用户

发布于 2013-09-21 14:37:25

尝试使用&或双&(条件到错误级别0)作为命令分隔符,而不是这种混乱。

我用这个技巧修复了一个脚本片段,总而言之,我有三个批处理文件,其中一个在找到分配给外部备份驱动器的字母后调用另外两个。我将第一个文件留在主外部驱动器上,因此对其备份例程的调用可以正常工作,但对第二个文件的调用需要更改活动驱动器。下面的代码显示了我是如何修复它的:

代码语言:javascript
复制
for %%b in (d e f g h i j k l m n o p q r s t u v w x y z) DO (
if exist "%%b:\Backup.cmd" %%b: & CALL "%%b:\Backup.cmd"
)
票数 4
EN

Stack Overflow用户

发布于 2016-06-12 09:29:12

我在与批处理文件中的IF命令相关的搜索返回的结果中遇到了这篇文章,我忍不住要纠正这样一种误解,即IF块仅限于单个命令。以下是生产Windows NT命令脚本的一部分,该脚本每天在我撰写此回复的计算机上运行。

代码语言:javascript
复制
    if "%COPYTOOL%" equ "R" (
    WWLOGGER.exe "%APPDATA%\WizardWrx\%~n0.LOG" "Using RoboCopy to make a backup of %USERPROFILE%\My Documents\Outlook Files\*"
    %TOOLPATH% %SRCEPATH% %DESTPATH% /copyall %RCLOGSTR% /m /np /r:0 /tee
    C:\BIN\ExitCodeMapper.exe C:\BIN\ExitCodeMapper.INI[Robocopy] %TEMP%\%~n0.TMP %ERRORLEVEL%
) else (
    WWLOGGER.exe "%APPDATA%\WizardWrx\%~n0.LOG" "Using XCopy to make a backup of %USERPROFILE%\My Documents\Outlook Files\*"
    call %TOOLPATH%  "%USERPROFILE%\My Documents\Outlook Files\*" "%USERPROFILE%\My Documents\Outlook Files\_backups" /f /m /v /y
    C:\BIN\ExitCodeMapper.exe C:\BIN\ExitCodeMapper.INI[Xcopy] %TEMP%\%~n0.TMP %ERRORLEVEL%
)

也许两行或更多行的块仅适用于Windows NT命令脚本(.CMD文件),因为搜索仅限于旧式批处理(.BAT)文件的应用程序的生产脚本目录时,只显示了一个命令块。由于应用程序已经进入了扩展维护阶段(这意味着我没有积极地参与支持它),我不能说这是因为我不需要多行代码,还是因为我不能让它们工作。

无论如何,如果是后者,则有一个简单的解决方法;将多行移动到单独的批处理文件或批处理文件子例程中。我知道后者在这两种脚本中都有效。

票数 1
EN

Stack Overflow用户

发布于 2013-09-13 17:37:19

可能有点晚了,但希望它能起作用:

代码语言:javascript
复制
@echo off 

if %ERRORLEVEL% == 0 (
msg * 1st line WORKS FINE rem You can relpace msg * with any othe operation...
goto Continue1
)
:Continue1
If exist "C:\Python31" (
msg * 2nd line WORKS FINE rem You can relpace msg * with any othe operation...
    goto Continue2
)
:Continue2
If exist "C:\Python31\Lib\site-packages\PyQt4" (  
msg * 3th line WORKS FINE rem You can relpace msg * with any othe operation...
    goto Continue3
)
:Continue3
msg * 4th line WORKS FINE rem You can relpace msg * with any othe operation...
    goto Continue4
)
:Continue4
msg * "Tutto a posto" rem You can relpace msg * with any othe operation...
pause
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4983508

复制
相关文章

相似问题

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