@echo off
Call :YesNoBox "Press yes or no"
if "%YesNo%"=="6" (
set backupdir=D:\BackupEmail\
cd /d %backupdir%
set folder=%date:~10,4%_%date:~4,2%_%date:~7,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%
mkdir %folder%
echo %folder% created
cd /d %folder%
mkdir Thunderbird
cd Thunderbird
set backupcmd=xcopy /s/h/i/c/k/e/r/y
echo ### Backing Up ...
%backupcmd% "C:\Users\username\AppData\Roaming\Thunderbird\*" "%backupdir%\%folder%\Thunderbird\"
echo Backup Completed!
echo "Deleting Temp files".
del /s /f /q \Windows\Temp\*.*
cmd /k
)
exit
:: Design for pop up window
exit /b
:YesNoBox
REM returns 6 = Yes, 7 = No. Type=4 = Yes/No
set YesNo=
set MsgType=4
set heading=%~2
set message=%~1
echo wscript.echo msgbox(WScript.Arguments(0),%MsgType%,WScript.Arguments(1)) >"%temp%\input.vbs"
for /f "tokens=* delims=" %%a in ('cscript //nologo "%temp%\input.vbs" "%message%" "%heading%"') do set YesNo=%%a
exit /b
:MessageBox
set heading=%~2
set message=%~1
echo msgbox WScript.Arguments(0),0,WScript.Arguments(1) >"%temp%\input.vbs"
cscript //nologo "%temp%\input.vbs" "%message%" "%heading%"
exit /b
我用notepad ++来保存这段代码
在命令提示符下收到的输出:
文件名,目录名或卷标语法不正确。 该命令的语法不正确。 创建 文件名,目录名或卷标语法不正确。 一个子目录或文件Thunderbird已经存在。
答案 0 :(得分:2)
这个特性表明,在第一次执行时,有一个变量不是set
但是正在使用它的值 - 通常在if
语句中。但是,第一次执行是为变量建立一个值,所以在第二次运行时,语法是正确的。
习惯上在setlocal
之后立即包含@echo off
命令。这可确保在代码完成时,将丢弃对环境所做的任何更改。在这种情况下,由于您没有setlocal
命令,因此第二次运行时变量的值保留。
您的代码存在问题#1常见问题解答 - 请使用delayed expansion
工具搜索search
。执行folder
指令时未建立变量if "%YesNo%"=="6"
,因此第一次
%folder%
没有值但是 已分配 code block
内的值,并且它会保留第二次运行的值(因为没有{ {1}}丢弃它。)