배치 출력을 cd 명령으로 리디렉션
경로를 출력하는 배치 파일이 있습니다. Windows cmd의 배치 파일을 사용하여 현재 디렉토리를 변경하려면 어떻게해야합니까?
내가 시도한 것 :
F:\>cd my-path.bat
The system cannot find the path specified.
F:\>cd (my-path.bat)
The system cannot find the path specified.
F:\>my-path.bat | cd
F:\
The process tried to write to a nonexistent pipe.
my-path.bat 콘텐츠 :
@ECHO OFF
@ECHO F:\MyPath\
답변
for /f "delims=" %d in ('my-path.bat') do cd /d "%~d"
참고 : 배치 파일에서 %를 %%로 바꿔야합니다.
다른 드라이버의 경우이 필요 /d당신의 cd명령
폴더 / 경로 / 이름에 공백 / 특수 문자가 있으면 "큰 따옴표"도 사용하십시오.
@echo off
echo\"F:\path to your folder"
:: or add/replace echo\"F:\path to your folder" to cd /d ::
cd /d "F:\path\to\folder"
대안은 배트가 변경되지 않는 루프에서 출력을 얻는 것입니다.
for /f tokens^=* %i in ('^<con: "my-path.bat"')do cd/d "%~i"
%ibat의 루프 변수 는%%i다음 과 같습니다.
for /f tokens^=* %%i in ('^<con: "my-path.bat"')do cd/d "%%~i"
- 인수 (
%*)를 사용 하여 명령을 변수로 실행할 수 있습니다.
@echo off
<con: call %* "F:\path to your folder" 2>nul || echo\"F:\path to your folder"
2>nul마지막 명령이 0을 반환하지 않는 경우 억제가 가능한 오류 및, 간단한 에코 조치를 취할 것입니다 ...
배트에서 인수 사용 :
my-path.bat cd /d
더 읽을 거리 :
[√] 'Cd / d'
[√] 'For'
[√] '/ F'용
[√] bat 파일의 리디렉션
[√] 조건부 실행 ||및&&
[√] 배치 파일에 인수를 전달하는 방법
[√] 배치 파일의 시작, '2> nul', 'cmd'및 기타 기호 이해
단순히 배치 파일을 다음과 같이 변경하지 마십시오.
@echo off
cd F:\MyPath\
바탕 LeRouteur의 대답은 , 다음과 같은 유용한 타협 수 있습니다 :
@echo off
if "%~1" == "." cd /d F:\mypath && goto :eof
echo F:\mypath
실행 my-path은 현재와 같이 경로를 에코하지만 실행 my-path .(즉, 매개 변수로 단일 마침표 사용)은 해당 경로로 변경됩니다.
경로를 두 번 입력하는 것을 싫어하는 경우 환경 변수를 사용하여 피할 수 있지만 "깨끗하게"(기존 환경을 오염시키지 않고) 그렇게하려면 약간의 생각이 필요합니다.
@echo off
setlocal
set "MYPATH=F:\mypath"
if "%~1" == "." (
endlocal && cd /d "%MYPATH%"
goto :eof
)
echo "%MYPATH%"
를 사용 setlocal한다는 것은 환경 (예 :)에 대한 모든 변경 MYPATH이 로컬로만 endlocal수행됨을 의미합니다. 배치 파일을 실행 하거나 끝에 도달하면 원래 환경으로 되돌아갑니다 ( setlocal /?및 참조 endlocal /?).
사용 setlocal은 배치 파일에서 매우 일반적이므로 사용 / 변경하는 모든 환경 변수가 주 환경을 "오염"시키지 않습니다. 문제는 현재 디렉토리 가 현지화 된 디렉토리의 일부라는 것입니다. 이 효과가있는 cd동안 실행 setlocal하면 스크립트가 종료 될 때 시작 디렉토리로 돌아갑니다.
한 가지 해결책은 endlocal및 cd명령을 같은 줄에 배치하는 것입니다. 방식 배치 파일이 있는지 파싱 수단 평가 의이 MYPATH환경은 여전히 (여전히 적절한 값을 가지도록) "로컬"상태에서 발생하지만, 실행 의 cd명령 아무튼 (첫 번째 패스에서 획득 된 값을 이용하여) after endlocal가 실행될 때까지 발생하지 않습니다 . 즉 , 명령 줄로 돌아갈 때 디렉토리 가 변경됩니다.
내가 정의 MYPATH하고 그 값 (큰 따옴표로 묶인)을 사용하는 방식은 경로에 공백을 포함 할 수 있습니다. 아마도 여기에서는 필요하지 않지만 배치 파일을 작성할 때 들어가는 좋은 습관입니다.
마지막 옵션 cd /d으로 pushd. 후자는 새 디렉토리로 변경하기 전에 현재 디렉토리를 스택에 "푸시"합니다 (참조 pushd /?). 해야 할 일을 마치면 원래 실행했던 디렉토리로 돌아 가기 위해 MYPATH실행할 수 있습니다 .popdmy-path .