문제

ID와 비밀번호를 파일에 하드코딩하는 대신 실행 시 배치 파일에 전달해야 합니다.

명령줄의 모양은 다음과 같습니다.

test.cmd admin P@55w0rd > test-log.txt
도움이 되었습니까?

해결책 2

방법은 다음과 같습니다. 라코 디스

명령어는 다음과 같습니다. 라코 디스

%1는 첫 번째 매개 변수에 적용되고 %2는 두 번째 매개 변수에 적용됩니다.이러한 방식으로 최대 9 개의 매개 변수를 전달할 수 있습니다.

다른 팁

또 다른 유용한 팁은 "all"을 의미하는 %*를 사용하는 것입니다.예 : 라코 디스

실행하는 경우 : 라코 디스

위의 배치 파일이 실행됩니다. 라코 디스

구문이 약간 잘못되었을 수 있지만 이것은 일반적인 생각입니다.

누락 된 매개 변수를 지능적으로 처리하려면 다음과 같이 할 수 있습니다. 라코 디스

% 1, % 2, ... % 9 또는 % *를 사용하여 배치 매개 변수에 액세스하는 것은 간단 할 수 있습니다.
그러나 내용이 단순한 경우에만.

"&"^&와 같은 복잡한 콘텐츠에 대한 간단한 방법은 없습니다. 오류없이 % 1에 액세스 할 수 없기 때문입니다. 라코 디스

줄이 다음으로 확장됩니다. 라코 디스

그리고 각 행은 실패합니다. & 중 하나가 따옴표 밖에 있기 때문입니다.

임시 파일에서 매개 변수의 설명 버전을 읽어서 해결할 수 있습니다. 라코 디스

비결은 echo on를 활성화하고 rem 문 뒤에 % 1을 확장하는 것입니다 (%2 .. %* 와도 작동).
따라서 유전자 코디스 태그 코드조차도 오류를 일으키지 않고 에코 될 수 있습니다.

하지만 "&"&의 출력을 리디렉션하려면 두 개의 for 루프가 필요합니다.

추가 문자 인 echo on* #와 같은 콘텐츠에 대해 안전을 위해 사용됩니다 (/?에 대한 도움말이 표시됨).
또는 줄 끝의 캐럿 ^은 유전자 코드 코드 이후에도 여러 줄 문자로 작동 할 수 있습니다.

그런 다음 파일에서 출력 된 rem 매개 변수 를주의 깊게 읽습니다.
FOR / F는 지연 확장이 해제 된 상태에서 작동해야하며 그렇지 않으면 "!" 파괴됩니다.
REM에서 여분의 문자를 제거한 후 얻은 것입니다.

그리고 안전한 방법으로 rem를 사용하려면 지연된 확장을 사용 설정하세요.

예, %%1if 및 갱을 사용할 때 for와 같은 변수를 사용하는 것을 잊지 마십시오.

이중 유전자 태그 코드를 잊어 버린 경우 (null 일 수있는) 명령 줄 인수로 대체되고 매우 혼란스러운 오류 메시지가 표시됩니다.

복잡 할 필요가 없습니다.단순히 명령 % 1 % 2 매개 변수입니다. 예를 들면 라코 디스

"일시 중지"는 배치 파일이 수행 한 작업을 표시하고 ANY 키를 누를 때까지 기다립니다.Windows 폴더에 xx.bat로 저장합니다.

사용하려면 다음을 입력하세요. 라코 디스

이 배치 파일은 최신 파일 만 복사하는 등 필요한 모든 매개 변수를 처리합니다. Windows 이전부터 사용했습니다.복사되는 파일의 이름을보고 싶다면 Q 매개 변수를 생략하세요.

라코 디스

참고 : IF "%1"==""%1를 따옴표로 묶으면 문제가 발생합니다.

이 경우 IF [%1]==[]를 사용하거나 NT 4 (SP6) 이상에서만 IF "%~1"==""를 대신 사용하세요.

최근에 친구가이 주제에 대해 물어 봤기 때문에 배치 파일에서 명령 줄 인수를 처리하는 방법을 게시 할 것이라고 생각했습니다.

이 기술은 보시다시피 약간의 오버 헤드가 있지만 배치 파일을 이해하기 쉽고 빠르게 구현할 수 있습니다.다음 구조를 지원합니다. 라코 디스

그것의 요점은 :init, :parse:main 기능을 가지고 있습니다. <인용구>

사용 예 라코 디스 <인용구>

template.bat 라코 디스

간단하게 유지합시다.

다음은 .cmd 파일입니다. 라코 디스

다음은 명령 줄에서 3 번의 호출입니다. 라코 디스

라코 디스

이렇게하면 인용 부호 여부에 관계없이 배치 매개 변수 (% *)를 반복 한 다음 각 매개 변수를 에코합니다.

함수 (또는 외부 유전자 태그 코드)로 호출 할 수있는 간단한 read_params 스크립트를 작성하고 모든 변수를 현재 환경에 넣습니다. 함수가 원래 매개 변수의 사본으로 생성되고 있기 때문에 원래 매개 변수를 수정하지 않습니다.

예를 들어 다음 명령이 주어지면 라코 디스

.bat는 함수를 호출 한 후 변수를 사용할 수 있습니다. 라코 디스

기능은 다음과 같습니다. 라코 디스 <시간>

제한 사항

  • call와 같이 값이없는 인수는로드 할 수 없습니다. myscript.bat를 사용할 수 있지만 값이없는 매개 변수 목록을 미리 알지 않고 빈 값을 허용하는 방법을 생각할 수 없습니다. <시간>

    변경 내역

    • 2016 년 2 월 18 일
      • 더 이상 지연된 확장이 필요하지 않습니다.
      • 이제 매개 변수 앞의 -force를 찾아 다른 명령 줄 인수와 함께 작동합니다.

명령 줄에서 set 변수를 참조하려면 %a%를 사용해야합니다. 예를 들면 다음과 같습니다. 라코 디스

참고 : Windows 7 pro에서 작동합니다.

새 배치 파일 (예 : openclass.bat)을 만들고 파일에 다음 줄을 작성합니다. 라코 디스

그런 다음 배치 파일을 system32 폴더에 배치하고 Java 클래스 파일로 이동 한 다음 마우스 오른쪽 버튼을 클릭하고 속성, 연결 프로그램 ...을 클릭 한 다음 배치 파일을 찾아 선택하면됩니다.

저에게 효과적입니다.

PS : Java 클래스를 닫을 때 cmd 창을 닫는 방법을 찾을 수 없습니다.지금은 ...

다음에서 영감을 얻었습니다. 다른 곳에서 대답해 @Jon이 명명된 매개변수, 선택적 값 및 스위치를 추출하기 위한 보다 일반적인 알고리즘을 만들었습니다.

유틸리티를 구현하고 싶다고 가정해 보겠습니다. foobar.초기 명령이 필요합니다.선택적 매개변수가 있습니다. --foo 이는 선택 과목 value(물론 다른 매개변수는 될 수 없음)값이 누락된 경우 기본값은 다음과 같습니다. default.또한 선택적 매개변수도 있습니다. --bar 이는 필수의 값.마지막으로 플래그를 사용할 수 있습니다. --baz 값이 허용되지 않습니다.아, 그리고 이러한 매개변수는 어떤 순서로든 올 수 있습니다.

즉, 다음과 같습니다.

foobar <command> [--foo [<fooval>]] [--bar <barval>] [--baz]

해결책은 다음과 같습니다.

@ECHO OFF
SETLOCAL
REM FooBar parameter demo
REM By Garret Wilson

SET CMD=%~1

IF "%CMD%" == "" (
  GOTO usage
)
SET FOO=
SET DEFAULT_FOO=default
SET BAR=
SET BAZ=

SHIFT
:args
SET PARAM=%~1
SET ARG=%~2
IF "%PARAM%" == "--foo" (
  SHIFT
  IF NOT "%ARG%" == "" (
    IF NOT "%ARG:~0,2%" == "--" (
      SET FOO=%ARG%
      SHIFT
    ) ELSE (
      SET FOO=%DEFAULT_FOO%
    )
  ) ELSE (
    SET FOO=%DEFAULT_FOO%
  )
) ELSE IF "%PARAM%" == "--bar" (
  SHIFT
  IF NOT "%ARG%" == "" (
    SET BAR=%ARG%
    SHIFT
  ) ELSE (
    ECHO Missing bar value. 1>&2
    ECHO:
    GOTO usage
  )
) ELSE IF "%PARAM%" == "--baz" (
  SHIFT
  SET BAZ=true
) ELSE IF "%PARAM%" == "" (
  GOTO endargs
) ELSE (
  ECHO Unrecognized option %1. 1>&2
  ECHO:
  GOTO usage
)
GOTO args
:endargs

ECHO Command: %CMD%
IF NOT "%FOO%" == "" (
  ECHO Foo: %FOO%
)
IF NOT "%BAR%" == "" (
  ECHO Bar: %BAR%
)
IF "%BAZ%" == "true" (
  ECHO Baz
)

REM TODO do something with FOO, BAR, and/or BAZ
GOTO :eof

:usage
ECHO FooBar
ECHO Usage: foobar ^<command^> [--foo [^<fooval^>]] [--bar ^<barval^>] [--baz]
EXIT /B 1
  • 사용 SETLOCAL 변수가 호출 환경으로 빠져나가지 않도록 합니다.
  • 변수를 초기화하는 것을 잊지 마세요 SET FOO=, 등.누군가 호출 환경에서 정의한 경우.
  • 사용 %~1 따옴표를 제거하려면.
  • 사용 IF "%ARG%" == "" 그리고는 아니다 IF [%ARG%] == [] 왜냐하면 [ 그리고 ] 공백으로 끝나는 값을 사용하여 의지를 전혀 사용하지 마십시오.
  • 당신이 SHIFT 안에 IF 블록, 다음과 같은 현재 인수 %~1 언제 결정되기 때문에 업데이트되지 마십시오. IF 파싱됩니다.당신은 사용할 수 있습니다 %~1 그리고 %~2 안에 IF 블록을 가지고 있지만 혼란스러울 것입니다. SHIFT.당신은 SHIFT 명확성을 위해 블록 끝에 표시하지만, 길을 잃거나 사람들을 혼란스럽게 할 수도 있습니다.그래서 "캡처" %~1 그리고 %~1 블록 외부가 가장 좋은 것 같습니다.
  • 다른 매개변수의 선택적 값 대신 매개변수를 사용하고 싶지 않으므로 확인해야 합니다. IF NOT "%ARG:~0,2%" == "--".
  • 만 조심하세요 SHIFT 때를 사용 매개변수 중 하나입니다.
  • 중복된 코드 SET FOO=%DEFAULT_FOO% 유감스럽지만 대안은 다음을 추가하는 것입니다. IF "%FOO%" == "" SET FOO=%DEFAULT_FOO% 외부 IF NOT "%ARG%" == "" 차단하다.그러나 이것은 여전히 ​​내부에 있기 때문에 IF "%PARAM%" == "--foo" 블록, %FOO% 값은 블록에 들어가기 전에 평가되고 설정되므로 이를 감지할 수 없습니다. 둘 다 그만큼 --foo 매개변수가 존재했습니다. 그리고 또한%FOO% 값이 누락되었습니다.
  • 참고하세요 ECHO Missing bar value. 1>&2 stderr에 오류 메시지를 보냅니다.
  • Windows 배치 파일에 빈 줄을 원하시나요?당신은 사용해야합니다 ECHO: 또는 변형 중 하나.

간단한 해결책 (질문이 오래되었지만)

Test1.bat 라코 디스

CallTest1.bat 라코 디스

출력 라코 디스

여기서 YourLocalPath는 현재 디렉토리 경로입니다.

간단하게 유지하려면 명령 매개 변수를 변수에 저장하고 변수를 사용하여 비교하십시오.

쓰기가 간단 할뿐만 아니라 유지 관리도 간단하므로 나중에 다른 사람이나 오랜 시간 후에 스크립트를 읽으면 이해하고 유지 관리하기 쉽습니다.

코드를 인라인으로 작성하려면 다른 답변을 참조하세요.

여기에 이미지 설명 입력 <인용구>

루핑을 사용하려면 모든 인수를 순수 배치로 가져옵니다. 라코 디스 <인용구>

코드는 다음과 같이 필요한 경우 인수 번호로 작업을 수행 할 준비가되었습니다. 라코 디스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top