Windows cmd.exe의 동일한 명령줄 내에서 변수 설정 및 사용

Windows cmd.exe의 동일한 명령줄 내에서 변수 설정 및 사용

Bash에서는 로 설정 EDITOR=vim command하여 command실행할 수 있지만 셸 자체 의 값에는 영향을 미치지 않습니다 . 에서 이 작업이 가능합니까 ?EDITORvimEDITORcmd.exe

답변1

작동 cmd /C "set "EDITOR=vim" && echo %EDITOR%"하지 않습니다.
그렇지도 않을 것이다cmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"

다음이 필요합니다.

  • /V구분 기호로 사용하여 지연된 환경 변수 확장을 활성화하는 옵션 입니다 !.
  • 명령과 사이에 공백이 없습니다 &&(또는 따옴표 추가).

그건:

C:\> cmd /V /C "set EDITOR=vim&& echo '!EDITOR!'"
'vim'
# or
C:\> cmd /V /C "set "EDITOR=vim" && echo '!EDITOR!'"
'vim'

처럼아래에 언급됨~에 의해마오주의, 그것은 cmd /V /C,~ 아니다 cmd /C /V(이것은~ 아니다일하다)


단일 명령의 맥락에서 실제로 이것을 원하는 실제적인 이유는 생각할 수 없습니다.

일반적으로 긴 명령줄에서 여러 번 사용되는 값을 바꿔야 할 때 이 방법이 필요합니다.
예를 들어 Nexus에 파일을 배포하려면(가독성을 위해 여러 줄로):

cmd /v /c "set g=com.agroup&& set a=anArtifact&& set v=1.1.0&& \
           mvn deploy:deploy-file -Dfile=C:\path\!a!-!v!.jar \
           -Dpackaging=jar -DgroupId=!g! -DartifactId=!a! -Dversion=!v! \
           -DrepositoryId=nexus 
           -Durl=http://myserver/nexus/content/repositories/my-repo/"

길고 복잡한 명령줄에서 그룹, 아티팩트(2번 사용) 및 버전을 바꾸는 대신 다음에서 편집할 수 있습니다.시작그 명령의. 매개변수 값을 조작하고 변경하는 것이 더 명확하고 쉽습니다.

답변2

아무것도 설치할 필요 없이 이와 같은 창에서 할 수 있습니다.

cmd /C "set EDITOR=vim && set"

변수 목록과 EDITOR=vim이 표시됩니다. 이제 "set"을 다시 실행하면 목록에 표시되지 않습니다.

여러 개의 &&를 사용하여 추가 명령을 추가할 수 있습니다.

cmd /C "set EDITOR=vim && do this && do that && otherstuff"

편집: /C는 실행 후 즉시 새 cmd를 종료합니다. 새 cmd로 출력을 생성하면 상위 창에 계속 표시됩니다.

실행이 끝날 때 새 cmd 창이 계속 열려 있는 경우 /K를 사용하도록 선택할 수 있습니다.

답변3

envGnuWin32의 CoreUtils 패키지에서 이식된 유틸리티를 사용할 수 있습니다.http://gnuwin32.sourceforge.net/

  1. 설정해 보세요
  2. env.exe%PATH% 변수에 어떤 디렉터리가 있는지 확인하세요.
  3. Linux 버전과 동일한 방식으로 사용 env EDITOR=vim command

답변4

env.cmdLinux 명령과 거의 비슷하게 작동하는 배치 파일을 만들었습니다 env.

echo off
setlocal
for %%f in (%*) do (
  echo %%f|find "=" >nul:
  if errorlevel 1 goto DoCmd
  set %%f
  shift
)
:DoCmd
%1 %2 %3 %4 %5 %6 %7 %8 %9
endlocal

유일한 차이점은 cmd구문 분석 방식으로 인해 환경 할당을 인용해야 하므로 명령은 다음과 같습니다.

env "EDITOR=vim" command [up to 8 parameters]

루프 내에 명령 문자열을 구축하여 8개 매개변수 제한을 제거하도록 배치 파일을 정교하게 만들 수 있습니다 for(지연된 확장이 필요함).

관련 정보