Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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,我试图写一个简单的批处理,将检查一个文件,如果它存在去结束。如果文件不存在,则执行概述的任务。该批处理按其应该的方式工作,但是,它似乎忽略了“IF EXIST”部分的文件,并且每次都重写SIP-Dir.txt。希望它查看该文件并退出任何进一步的操作。我不是一个脚本编写者,但我已经多次使用过这样的小文件。任何帮助都将不胜感激。如果我的语法不正确,请让我知道它应该是什么 @echo off IF EXIST %temp%\SIP-Dir.txt goto SKIP TASKKILL /F /IM

我试图写一个简单的批处理,将检查一个文件,如果它存在去结束。如果文件不存在,则执行概述的任务。该批处理按其应该的方式工作,但是,它似乎忽略了“IF EXIST”部分的文件,并且每次都重写SIP-Dir.txt。希望它查看该文件并退出任何进一步的操作。我不是一个脚本编写者,但我已经多次使用过这样的小文件。任何帮助都将不胜感激。如果我的语法不正确,请让我知道它应该是什么

@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"
)