배치 파일에서 if-else 구조를 사용하는 방법은 무엇입니까?
배치 파일의 if-else 구조에 대한 질문이 있습니다. 각 명령은 개별적으로 실행되지만 "if-else"블록을 안전하게 사용할 수 없으므로 프로그램의 이러한 부분이 작동하지 않습니다. 이 부품들을 어떻게 작동시킬 수 있습니까? 감사합니다.
IF %F%==1 IF %C%==1 (
::copying the file c to d
copy "%sourceFile%" "%destinationFile%"
)
ELSE IF %F%==1 IF %C%==0 (
::moving the file c to d
move "%sourceFile%" "%destinationFile%"
)
ELSE IF %F%==0 IF %C%==1 (
::copying a directory c from d, /s: boş olanlar hariç, /e:boş olanlar dahil
xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
)
ELSE IF %F%==0 IF %C%==0 (
::moving a directory
xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
rd /s /q "%sourceMoveDirectory%"
)
구문이 잘못되었습니다. 을 사용할 수 없습니다 ELSE IF
. 어쨌든 실제로는 필요하지 않은 것 같습니다. 여러 IF
문장을 사용하십시오 .
IF %F%==1 IF %C%==1 (
::copying the file c to d
copy "%sourceFile%" "%destinationFile%"
)
IF %F%==1 IF %C%==0 (
::moving the file c to d
move "%sourceFile%" "%destinationFile%"
)
IF %F%==0 IF %C%==1 (
::copying a directory c from d, /s: boş olanlar hariç, /e:boş olanlar dahil
xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
)
IF %F%==0 IF %C%==0 (
::moving a directory
xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
rd /s /q "%sourceMoveDirectory%"
)
훌륭한 배치 파일 참조 : http://ss64.com/nt/if.html
나는 DOS 에서이 의사 코드의 의미에 대해 약간의 혼란이 있다고 생각합니다 .IF A IF BX ELSE Y. IF (A 및 B) THEN X ELSE Y를 의미하지는 않지만 사실은 IF A (IF B THEN X ELSE Y)를 의미합니다. A 테스트에 실패하면 내부 if-else 전체가 무시됩니다.
언급 된 답변 중 하나로서,이 경우 테스트 중 하나만 성공할 수 있으므로 'else'는 필요하지 않지만 물론이 예에서만 작동하는 if-else를 수행하는 일반적인 솔루션은 아닙니다.
이 문제에는 여러 가지 방법이 있습니다. 여기 몇 가지 아이디어가 있습니다. 모두 추악하지만 이건 DOS입니다!
@echo off
set one=1
set two=2
REM Example 1
IF %one%_%two%==1_1 (
echo Example 1 fails
) ELSE IF %one%_%two%==1_2 (
echo Example 1 works correctly
) ELSE (
echo Example 1 fails
)
REM Example 2
set test1result=0
set test2result=0
if %one%==1 if %two%==1 set test1result=1
if %one%==1 if %two%==2 set test2result=1
IF %test1result%==1 (
echo Example 2 fails
) ELSE IF %test2result%==1 (
echo Example 2 works correctly
) ELSE (
echo Example 2 fails
)
REM Example 3
if %one%==1 if %two%==1 (
echo Example 3 fails
goto :endoftests
)
if %one%==1 if %two%==2 (
echo Example 3 works correctly
goto :endoftests
)
echo Example 3 fails
)
:endoftests
AFAIK if else
는 다른 언어 에서처럼 일괄 처리를 수행 할 수 없으며 중첩되어야 if
합니다.
중첩을 사용하면 if
배치가 다음과 같이 보입니다.
IF %F%==1 IF %C%==1(
::copying the file c to d
copy "%sourceFile%" "%destinationFile%"
) ELSE (
IF %F%==1 IF %C%==0(
::moving the file c to d
move "%sourceFile%" "%destinationFile%"
) ELSE (
IF %F%==0 IF %C%==1(
::copying a directory c from d, /s: boş olanlar hariç, /e:boş olanlar dahil
xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
) ELSE (
IF %F%==0 IF %C%==0(
::moving a directory
xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
rd /s /q "%sourceMoveDirectory%"
)
)
)
)
또는 James가 제안한 것처럼 체인을 연결 if
하지만 올바른 구문은
IF %F%==1 IF %C%==1(
::copying the file c to d
copy "%sourceFile%" "%destinationFile%"
)
나는 당신이 같은 것을 사용할 수 있다고 생각합니다
if ___ (
do this
) else if ___ (
do this
)
if-then-else 구조를 유지하기 위해 "완료"매개 변수를 추가하고 싶기 때문에 복잡한 if-condition에는 약간 늦었고 여전히 유용합니다.
set done=0
if %F%==1 if %C%==0 (set done=1 & echo found F=1 and C=0: %F% + %C%)
if %F%==2 if %C%==0 (set done=1 & echo found F=2 and C=0: %F% + %C%)
if %F%==3 if %C%==0 (set done=1 & echo found F=3 and C=0: %F% + %C%)
if %done%==0 (echo do something)
IF...ELSE IF
constructs work very well in batch files, in particular when you use only one conditional expression on each IF line:
IF %F%==1 (
::copying the file c to d
copy "%sourceFile%1" "%destinationFile1%"
) ELSE IF %F%==0 (
::moving the file e to f
move "%sourceFile2%" "%destinationFile2%" )
In your example you use IF...AND...IF
type construct, where 2 conditions must be met simultaneously. In this case you can still use IF...ELSE IF
construct, but with extra parentheses to avoid uncertainty for the next ELSE condition:
IF %F%==1 (IF %C%==1 (
::copying the file c to d
copy "%sourceFile1%" "%destinationFile1%" )
) ELSE IF %F%==1 (IF %C%==0 (
::moving the file e to f
move "%sourceFile2%" "%destinationFile2%"))
The above construct is equivalent to:
IF %F%==1 (
IF %C%==1 (
::copying the file c to d
copy "%sourceFile1%" "%destinationFile1%"
) ELSE IF %C%==0 (
::moving the file e to f
move "%sourceFile2%" "%destinationFile2%"))
Processing sequence of batch commands depends on CMD.exe parsing order. Just make sure your construct follows that logical order, and as a rule it will work. If your batch script is processed by Cmd.exe without errors, it means this is the correct (i.e. supported by your OS Cmd.exe version) construct, even if someone said otherwise.
Here's my code Example for if..else..if
which do the following
Prompt user for Process Name
If the process name is invalid
Then it's write to user
Error : The Processor above doesn't seem to be exist
if the process name is services
Then it's write to user
Error : You can't kill the Processor above
if the process name is valid and not services
Then it's write to user
the process has been killed via taskill
so i called it Process killer.bat
Here's my Code:
@echo off
:Start
Rem preparing the batch
cls
Title Processor Killer
Color 0B
Echo Type Processor name to kill It (Without ".exe")
set /p ProcessorTokill=%=%
:tasklist
tasklist|find /i "%ProcessorTokill%.exe">nul & if errorlevel 1 (
REM check if the process name is invalid
Cls
Title %ProcessorTokill% Not Found
Color 0A
echo %ProcessorTokill%
echo Error : The Processor above doesn't seem to be exist
) else if %ProcessorTokill%==services (
REM check if the process name is services and doesn't kill it
Cls
Color 0c
Title Permission denied
echo "%ProcessorTokill%.exe"
echo Error : You can't kill the Processor above
) else (
REM if the process name is valid and not services
Cls
Title %ProcessorTokill% Found
Color 0e
echo %ProcessorTokill% Found
ping localhost -n 2 -w 1000>nul
echo Killing %ProcessorTokill% ...
taskkill /f /im %ProcessorTokill%.exe /t>nul
echo %ProcessorTokill% Killed...
)
pause>nul
REM If else if Template
REM if thing1 (
REM Command here 2 !
REM ) else if thing2 (
REM command here 2 !
REM ) else (
REM command here 3 !
REM )
참고URL : https://stackoverflow.com/questions/11081735/how-to-use-if-else-structure-in-a-batch-file
'programing tip' 카테고리의 다른 글
C ++ 자동 키워드. (0) | 2020.07.05 |
---|---|
동일한 인터페이스를 구현하는 두 개의 bean을 자동 배선-기본 bean을 autowire로 설정하는 방법은 무엇입니까? (0) | 2020.07.05 |
로컬 Git 브랜치를 원격 저장소에 복사하는 방법 (0) | 2020.07.05 |
Git Clone : 파일 만주세요. (0) | 2020.07.05 |
UNIX에서 벽시계 시간, 사용자 CPU 시간 및 시스템 CPU 시간은 구체적으로 무엇입니까? (0) | 2020.07.05 |