Programing

Windows 일괄 처리에서 null 변수 확인

lottogame 2020. 11. 13. 07:44
반응형

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

IFSS64 페이지 가 도움이 될 것입니다. "% 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

반응형