Windows 使用;如果存在/请转到;在批处理文件中
我试图写一个简单的批处理,将检查一个文件,如果它存在去结束。如果文件不存在,则执行概述的任务。该批处理按其应该的方式工作,但是,它似乎忽略了“IF EXIST”部分的文件,并且每次都重写SIP-Dir.txt。希望它查看该文件并退出任何进一步的操作。我不是一个脚本编写者,但我已经多次使用过这样的小文件。任何帮助都将不胜感激。如果我的语法不正确,请让我知道它应该是什么Windows 使用;如果存在/请转到;在批处理文件中,windows,batch-file,Windows,Batch File,我试图写一个简单的批处理,将检查一个文件,如果它存在去结束。如果文件不存在,则执行概述的任务。该批处理按其应该的方式工作,但是,它似乎忽略了“IF EXIST”部分的文件,并且每次都重写SIP-Dir.txt。希望它查看该文件并退出任何进一步的操作。我不是一个脚本编写者,但我已经多次使用过这样的小文件。任何帮助都将不胜感激。如果我的语法不正确,请让我知道它应该是什么 @echo off IF EXIST %temp%\SIP-Dir.txt goto SKIP TASKKILL /F /IM
@echo off
IF EXIST %temp%\SIP-Dir.txt goto SKIP
TASKKILL /F /IM Communicator.exe
cd %LocalAPPData%\Microsoft\communicator
for /d %a in (sip*) do rd /s /q "%a"
Echo SIP DEL Complete > %temp%\SIP-Dir.txt
:SKIP
您可能会发现路径中的空格会影响这一点。请使用下面的引号进行尝试: 在测试期间,如果文件不存在,将触发第一次暂停。稍后将其删除
for
命令也已更改,既可以在CD
命令失败时阻止删除随机文件夹,也可以修复在批处理文件中使用变量名时的一些错误
IF EXIST "%temp%\SIP-Dir.txt" goto SKIP
pause
TASKKILL /F /IM Communicator.exe
for /d %%a in ("%LocalAPPData%\Microsoft\communicator\sip*") do rd /s /q "%%a"
Echo SIP DEL Complete > "%temp%\SIP-Dir.txt"
:skip
echo done
pause
在这种情况下,不需要使用goto
命令。与其询问文件是否存在,不如检查文件是否不存在
正如foxidrive所说,最好引用路径,尤其是在使用变量构建路径时 注释掉“@echo off”以查看正在解析和“看到”的内容。您的IF语句正在被看到,但在您的环境中该条件不是真的。如果您还没有解决问题,您可以通过将其设置为无条件来检查
goto
本身是否是问题,即,只需在没有IF exist
的情况下说goto SKIP
,然后看看会发生什么。:-)谢谢我很快会在这里试一试,并让您知道。使用括号而不是goto不会改变逻辑,因此似乎不太可能解决OPs问题。@HarryJohnston,它不会改变代码的功能,但会改变逻辑:如果没有goto
,您就不会遇到goto
的问题。无论如何,问题似乎不是goto
命令本身,而是涉及的路径。可能吧。在我看来,goto不太可能是问题所在,但仔细想想,我想这不是不可能的——例如,可能有不可见的嵌入字符,或者如果标签位于文件的最后一行,它可能没有正确终止。@HarryJohnston,一个有趣的想法。标签前面几乎可以有任何内容,它仍然有效。标签不必以CRLF结尾。不结束线路,仅以CR或LF结束线路,或以一系列CR或LF结束线路不会产生干扰。如果不涉及unicode或页面代码问题,我不知道如何使其失败。
if not exist "%temp%\SIP-Dir.txt" (
TASKKILL /F /IM Communicator.exe
for /d %%a in ("%localappdata%\Microsoft\communicator\sip*") do rd /s /q "%%~fa"
Echo SIP DEL Complete > "%temp%\SIP-Dir.txt"
)