如何在.bat文件,set命令和IF EXIST中使用括号

时间:2014-12-16 22:59:44

标签: batch-file

好的,我有批处理文件,只是一个隐藏和取消隐藏文件夹的简单文件。

我不明白为什么它似乎无法执行;

以下是扩展示例代码:

@echo off
color a
title Folder/Drive hider Service

:jiki
echo Loading...
TIMEOUT /T 2 >nul
goto inputs
:inputs
echo Enabling security...
TIMEOUT /T 2 >nul
cls
goto menu

:menu
if EXIST "%~dp0\Encryption" (set status=Folder is locked.)
if EXIST "%~dp0\Logan_Documents" (set status=Folder is unlocked, to open it, enter open as your            `action.)`
cls
echo.
echo STATUS: %status%
echo.
echo ----------------------------------------
echo  FOLDER PROTECTOR by Logan 
echo ----------------------------------------
echo.
echo  Lock      = Lock the folder(s)
echo  Unlock    = Unlock the folder(s)
echo  Credits   = For more info
echo  V         = Display your current version
echo  Exit      = Close the program
echo.
echo ----------------------------------------
echo For more info, just ask Logan!
echo ----------------------------------------
echo.
echo Select your action, %USERNAME%.
echo.
set /p "menu=>"
if /I %menu%== lock goto lock
if /I %menu%== unlock goto unlock
if /I %menu%== credits goto credits
if /I %menu%== v goto version
if /I %menu%== exit goto exit
goto invalid

还有更多,每次我去执行脚本时,它只是将状态变量留空。

这是我尝试过的。

  • 通过端口重新配置所有变量,然后根据if exist进行排序。不起作用,只留下空白状态。
  • 使用不同的变量。 (有点愚蠢,但我不想因为一个小错字而认为我有所有这些错误。)仍然留下错误空白。

感谢所有努力解决我的问题,让这个程序正常运作! -Logan

2 个答案:

答案 0 :(得分:2)

if exist应该与您使用它完全一样正常工作。您并不严格需要引号,因为名称不包含空格。此外,您不需要括号,因为它是一个命令。

但话说回来,它也应该与它们一起工作(我实际测试了这个),所以我唯一能想到的是找不到文件或文件夹,因为脚本在错误的目录中运行。毕竟你只使用没有任何路径的名称,所以当前目录应包含这些文件。

“当前目录”不一定是保存脚本的目录。如果您在'C:\ Foo'并且调用'C:\ Bar \ Script.bat',则当前目录仍为'C:\ Foo'。通过快捷方式启动脚本也是如此。

要尝试此操作,您可以在脚本中使用echo %CD%来回显当前目录。

作为一种可能的解决方案,您可以使用%~dp0来使用保存批处理脚本的实际目录,因此您始终有一个起点:

REM Check if 'Encryption' exists in the same folder as the batch file.
if EXIST "%~dp0\Encryption" (set status=Folder is locked.)

答案 1 :(得分:0)

可能两个if都不是真的,可能是因为活动目录不是你想象的那样。您可以通过在set status=none上方插入if来轻松测试。或插入dir以查看此时的抄写员实际看到的内容。