我不明白为什么"IF"在我的.BAT文件中不起作用

1 cmd batch-file

当这个程序中的最后一个命令:

If %V_EOM% EQU V_Day Set V_Type = M
Run Code Online (Sandbox Code Playgroud)

执行后,.BAT文件运行就会消失,并且不会执行以下暂停.我只是没有看到问题.

Rem XCopy C: Britt* Folders to Backup
Rem *************************************

Rem Set EOM/Daily Switch
Set V_Type = D

Rem Set /d Switch
Set V_DSwitch = /d

Set V_Output_Drive = G:\
Set V_File_Name_1 = XCopy
Set V_File_Name_2 = Backup
Set V_File_Name_3 = Daily

Date /t
Time /t

set V_Date = %date:~0,20%
set V_DOW = %date:~0,3%
set V_Mo= %date:~4,2%
set V_Day = %date:~7,2%
set V_Yr= %date:~10,4%

Rem EOM Check
If %V_Mo%  EQU 04 GoTo Mo30:
If %V_Mo%  EQU 06 GoTo Mo30:
If %V_Mo%  EQU 09 GoTo Mo30:
If %V_Mo% EQU 11 GoTo Mo30:
If %V_Mo% EQU 02 GoTo Mo28:
GoTo Mo31:

:Mo28
Set V_EOM = 28
GoTo CkEOM:

:Mo30
Set V_EOM =30

:Mo31
Set V_EOM = 31
GoTo CkEOM:

Rem Check to see if today is the End of Month
:CkEOM
pause
If %V_EOM% EQU V_Day Set V_Type = M
pause
Run Code Online (Sandbox Code Playgroud)

修改后的代码从"回答"转移

set V_Date = %date:~0,20%
set V_DOW = %date:~0,3%
set V_Mo = %date:~4,2%
set V_Day = %date:~7,2%
set V_Yr = %date:~10,4%
Set V_Out_Date = %V_Yr %%V_Mo %%V_Day %
Set V_File_Name_1=XCopy.Backup
Set V_File_Name_2=Daily
Set V_File_Name_3= %V_Out_Date %
Set V_Dir=Britt Michael
Run Code Online (Sandbox Code Playgroud)

给我:XCopy.Backup Daily 2015 02 06问题:如何输出= XCopy.Backup.Daily 2015-02-06

Jas*_*ner 5

这条线:

If %V_EOM% EQU V_Day Set V_Type = M
Run Code Online (Sandbox Code Playgroud)

应该是:

If %V_EOM% EQU %V_Day% Set V_Type=M
Run Code Online (Sandbox Code Playgroud)

但是,一般情况下,您的脚本语法已关闭.例如:

Set V_File_Name_1 = XCopy
Run Code Online (Sandbox Code Playgroud)

将创建变量%V_File_Name_1 %(末尾的空格),这意味着%V_File_Name_1%将是未定义的.此外,价值将是(space)XCopy(前面的空间)而不仅仅是XCopy.

由于您使用的是语法:

Set Var = Value
Run Code Online (Sandbox Code Playgroud)

在它们之间有空格=,你的逻辑很可能在比较时失败.

更新它们以使用语法:

Set Var=Value
Run Code Online (Sandbox Code Playgroud)

要么

Set "Var=Value"
Run Code Online (Sandbox Code Playgroud)