Windows 일괄 처리에서 null 변수 확인
3 개의 텍스트 파일을 SQL Server로 bcp하는 Windows 배치 파일을 작업 중입니다. 프로덕션에서 문제가 발생하면 파일 이름을 재정의 할 수 있기를 원합니다. 그래서 저는 이런 일을 할 생각입니다.
bcp.exe MyDB..MyTable1 in %1 -SMyServer -T -c -m0
bcp.exe MyDB..MyTable2 in %2 -SMyServer -T -c -m0
bcp.exe MyDB..MyTable3 in %3 -SMyServer -T -c -m0
위치 매개 변수가 제공되지 않은 경우 사용할 세 파일 모두에 대한 기본 이름을 입력 할 수 있기를 원합니다. 아이디어는 실행하는 것입니다.
myjob.bat
매개 변수없이 기본값을 사용하거나
myjob.bat "c:\myfile1" "c:\myfile2" "c:\myfile3"
해당 파일을 사용하도록합니다. % 1, % 2 및 % 3이 존재하는지 및 / 또는 null인지 확인하는 방법을 알아낼 수 없었습니다. 또한 이러한 값을 조건부로 설정하는 방법도 모릅니다. 이것이 가능한가? 모든 제안을 주시면 감사하겠습니다.
명령 줄 매개 변수가 있는지 테스트하려면 빈 대괄호를 사용합니다.
IF [%1]==[] echo Value Missing
또는
IF [%1] EQU [] echo Value Missing
IF 의 SS64 페이지 가 도움이 될 것입니다. "% 1이 (가) 있습니까?"에서.
위치 매개 변수를 설정할 수 없으므로 다음과 같은 작업을 수행해야합니다.
SET MYVAR=%1
그런 다음 내용에 따라 MYVAR을 다시 설정할 수 있습니다.
주어진 두 대답 모두 정확하지만 나는 조금 다릅니다. 몇 가지 고려할 수 있습니다 ...
다음으로 배치 시작 :
SetLocal
그리고 끝낼
EndLocal
이렇게하면 모든 'SETs'가 현재 세션 동안에 만 유효하게 유지되며 "FileName1"또는 실행 중에 설정 한 다른 변수와 같이 이름이 지정된 변수를 남겨 두지 않아 배치 파일의 다음 실행을 방해 할 수 있습니다. . 따라서 다음과 같이 할 수 있습니다.
IF "%1"=="" SET FileName1=c:\file1.txt
다른 트릭은 매개 변수를 1 개 또는 2 개만 제공하는 경우 SHIFT 명령을 사용하여 이동하므로 찾고있는 매개 변수는 항상 % 1 ...입니다.
예를 들어, 첫 번째 매개 변수를 처리하고 이동 한 다음 다시 수행하십시오. 이렇게하면 % 1, % 2, % 3 등을 하드 코딩하지 않습니다.
Windows 배치 프로세서는 사람들이 인정하는 것보다 훨씬 더 강력합니다. 저는 어제 날짜 계산을 포함하여 윤년, 지역화 등의 월과 연도 경계를 넘어서도 몇 가지 미친 짓을했습니다.
정말 창의력을 발휘하고 싶다면 배치 프로세서에서 함수를 호출 할 수 있습니다 ...하지만 그건 다른 논의를위한 것입니다 ... :)
아, 그리고 배치 파일의 이름을 .bat로 지정하지 마십시오 . .. 이제 .cmd입니다 .. heh ..
도움이 되었기를 바랍니다.
올바른 것은 변수의 존재를 테스트하는 데 사용되는 "if defined"문을 사용하는 것입니다. 예를 들면 :
IF DEFINED somevariable echo Value exists
이 특별한 경우에는 네거티브 형식을 사용해야합니다.
IF NOT DEFINED somevariable echo Value missing
추신 : 변수 이름은 "%"문자없이 사용해야합니다.
rem set defaults:
set filename1="c:\file1.txt"
set filename2="c:\file2.txt"
set filename3="c:\file3.txt"
rem set parameters:
IF NOT "a%1"=="a" (set filename1="%1")
IF NOT "a%2"=="a" (set filename2="%2")
IF NOT "a%3"=="a" (set filename1="%3")
echo %filename1%, %filename2%, %filename3%
하지만 따옴표는 변수에 필요할 수도 있고 필요하지 않을 수도 있습니다.
참고 URL : https://stackoverflow.com/questions/731332/check-for-null-variable-in-windows-batch
'Programing' 카테고리의 다른 글
TLS 1.2를 사용하도록 .NET 웹 서비스 업데이트 (0) | 2020.11.13 |
---|---|
문자열에 특수 문자가 포함되어 있는지 확인 (0) | 2020.11.13 |
UIWebview 캐시 지우기 (0) | 2020.11.13 |
연산자 new는 메모리를 0으로 초기화합니다. (0) | 2020.11.13 |
Jquery에서 인덱스로 자식 요소를 얻는 방법은 무엇입니까? (0) | 2020.11.13 |