批量 "file not found"

Batch "file not found"

我正在批量制作安全文件夹应用程序,但 运行 出错了。

锁定命令:

:lock
ren "Secure Folder" "Secure Folder (Locked)"
attrib +h +s "Secure Folder (Locked)"
msg * Folder locked.
goto end

解锁命令(错误所在):

:unlock
attrib -h -s "Secure Folder (Locked)"
ren "Secure Folder (Locked)" "Secure Folder"
pause
::Pause is to see the error
goto end

错误是:

File not found - Secure Folder (Locked)

文件夹是这样创建的:

:creation
md "Secure Folder"
cd Secure Folder
md Movies
md Pictures
md Music
md Bonuses
cd Bonuses
echo .LOG>Log.txt
cd %USERPROFILE%
md userpass
cd userpass
set /p userpass=Enter the password you would like to use for this application: 
echo %userpass%>userpass.txt
msg * Folder created.
goto end

这是解锁的初始化方式:

:password
cd %USERPROFILE%\userpass
<userpass.txt set /p userpass=
set /p password=Enter password to unlock:
If /I "%password%"=="%userpass%" goto unlock
goto fail

我有一个程序可以在遇到错误时解锁文件夹。该程序的代码是:

@echo off
attrib -h -s "Secure Folder (Locked)"
ren "Secure Folder (Locked)" "Secure Folder"

我不知道为什么我的主要代码不起作用。会不会是因为之前用了"cd %USERPROFILE%"?

我已尝试将“解锁”代码移至我的代码顶部。

您正在对子文件夹执行 cd,但从未对父文件夹执行 return。您可以改为使用 pushdpopd,但这是更好的方法:

:creation
(md "Secure Folder\Movies"
md "Secure Folder\Pictures"
md "Secure Folder\Music"
md "Secure Folder\Bonuses
echo .LOG>"Secure Folder\Bonuses\Log.txt"
md "%USERPROFILE%\userpass"
)>nul 2>&1
set /p userpass=Enter the password you would like to use for this application: 
(echo %userpass%)>"%USERPROFILE%\userpass\userpass.txt"
msg * Folder created.
goto :eof

您可以创建文件夹而无需 cd 到每个文件夹。换句话说:

mkdir "folder1\folder2\folder3"

将创建整棵树,您不必先创建父项,然后再创建子项。

一个略短的版本,通过使用 for 循环创建文件夹:

:creation
(for %%i in ("Movies" "Pictures" "Music" "Bonuses") do md "Secure Folder\%%~i"
echo .LOG>"Secure Folder\Bonuses\Log.txt"
md "%USERPROFILE%\userpass"
)>nul 2>&1
set /p "userpass=Enter the password you would like to use for this application: "
(echo %userpass%)>"%USERPROFILE%\userpass\userpass.txt"
msg * Folder created.
goto :eof

上述方法可确保您保留原始工作内容 dir

注意,您应该修改剩余代码以适应此方法。

:password
<"%USERPROFILE%\userpass\userpass.txt" set /p userpass=
set /p password=Enter password to unlock:
If /I "%password%" == "%userpass%" goto unlock
goto fail