cmd中if条件“and”/“or”的批处理文件问题
Posted
技术标签:
【中文标题】cmd中if条件“and”/“or”的批处理文件问题【英文标题】:Question of batch file with if condition "and" / "or" in cmd 【发布时间】:2021-09-06 23:19:44 【问题描述】:我想开发一个具有以下条件的批处理文件:
-
检查 DayOfWeek 是否等于 Mon - Fri --> (True) --> 复制所有文件 --> (False) --> 转到检查下一个条件
检查 DayOfWeek 是否等于 Sat --> (True) --> 复制某些文件 --> (False) --> 去检查下一个条件
检查 DayOfWeek 是否等于星期日或公共假期 --> 显示错误消息并退出
(备注:我的想法是把那些公共假期商店的日期放到文本文件中,并获得价值来检查它。)
@ECHO OFF
FOR /F %%a IN ('Powershell -noP -c "(Get-Date).DayOfWeek.Value__"') DO SET week=%%a
IF %week% == "1" (GOTO ALLFOLDER)
IF %week% == "2" (GOTO ALLFOLDER)
IF %week% == "3" (GOTO ALLFOLDER)
IF %week% == "4" (GOTO ALLFOLDER)
IF %week% == "5" (GOTO ALLFOLDER)
IF %week% == "6" (GOTO CERTAINFOLDER)
IF %week% == "7" (ECHO ERROR! Script Exit!) EXIT(0)
ECHO Copying Files...
TIMEOUT /T 1 /NOBREAK > NUL
ECHO.
COPY C:\A.DAT E:\A.BAT
TIMEOUT /T 1 /NOBREAK > NUL
COPY C:\B.DAT E:\B.BAT
TIMEOUT /T 1 /NOBREAK > NUL
COPY C:\C.DAT E:\C.BAT
TIMEOUT /T 1 /NOBREAK > NUL
COPY C:\D.DAT E:\D.BAT
TIMEOUT /T 1 /NOBREAK > NUL
COPY C:\E.DAT E:\E.BAT
:ALLFOLDER
ECHO Checking Folder....
ECHO.
IF EXIST %A% (
ECHO A Folder Already Exists!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
) ELSE (
MKDIR %A%
ECHO A Folder Created!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
)
IF EXIST %B% (
ECHO B Folder Already Exists!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
) ELSE (
MKDIR %B%
ECHO B Folder Created!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
)
IF EXIST %C% (
ECHO C Folder Already Exists!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
) ELSE (
MKDIR %C%
ECHO C Folder Created!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
)
IF EXIST %D% (
ECHO D Folder Already Exists!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
) ELSE (
MKDIR %D%
ECHO D Folder Created!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
)
IF EXIST %E% (
ECHO E Folder Already Exists!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
) ELSE (
MKDIR %E%
ECHO E Folder Created!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
)
Powershell -noP -c "Write-Host 'INFO: Check Completed!' -ForegroundColor GREEN"
TIMEOUT /T 2 /NOBREAK > NUL
:CERTAINFOLDER
IF EXIST %A% (
ECHO A Folder Already Exists!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
) ELSE (
MKDIR %A%
ECHO A Folder Created!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
)
IF EXIST %B% (
ECHO B Folder Already Exists!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
) ELSE (
MKDIR %B%
ECHO B Folder Created!
ECHO.
TIMEOUT /T 1 /NOBREAK > NUL
)
Powershell -noP -c "Write-Host 'INFO: Check Completed!' -ForegroundColor GREEN"
TIMEOUT /T 2 /NOBREAK > NUL
谢谢。
【问题讨论】:
您不需要这样的和/或条件,一般方法是@For /F %%G In ('%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoP "(Get-Date).DayOfWeek.Value__"') Do @If %%G Gtr 0 If %%G Equ 6 (Copy "CertainFiles") Else Copy "AllFiles"
。在星期日之上添加额外的公共假期,(0
),无论是直接还是从单独的文件中,都是一个完全不同的问题,与您的主要问题无关,所以我将把它留给您确定自己。
您正在进行字符串比较。如果引号在比较的一侧,则它们必须在比较的另一侧才能评估为 TRUE。
【参考方案1】:
这是另一种方法。 cmd 解释器可以“转到”标签。
@ECHO OFF
FOR /F %%A IN ('powershell -NoLogo -NoProfile -Command ^
"@('sun', 'workday', 'workday', 'workday', 'workday', 'workday', 'sat')[$((Get-Date).DayOfWeek.Value__)]"') DO (SET "TARGET=%%~A")
GOTO %TARGET%
:sun
ECHO This is Sunday
GOTO TheEnd
:sat
ECHO This is Saturday
GOTO TheEnd
:workday
ECHO This is a workday
GOTO TheEnd
:TheEnd
EXIT /B
【讨论】:
【参考方案2】:您的逻辑使事情变得复杂。我会这样做:
-
如果 DayOfWeek = 太阳或公共假期 --> 显示错误消息并退出
如果 DayOfWeek = Sat --> 复制某些文件并退出
复制所有其他文件
【讨论】:
以上是关于cmd中if条件“and”/“or”的批处理文件问题的主要内容,如果未能解决你的问题,请参考以下文章