Program Tip

배치 파일의 현재 디렉토리를 찾고 경로에 사용하려면 어떻게합니까?

programtip 2020. 11. 6. 19:08
반응형

배치 파일의 현재 디렉토리를 찾고 경로에 사용하려면 어떻게합니까?


소프트웨어 작업을 실행하기 위해 고객에게 배포 할 배치 파일이 있습니다.

우리는 그것들을 폴더로 또는 .zip파일과 함께 배포합니다 . 내부에는 배치 파일과 배치를 실행하는 데 필요한 파일이있는 다른 폴더가 있습니다.

일반적으로 배치를 만들 때 파일이있는 경로를 입력합니다. 하지만 파일이 어디에 있는지 모르겠습니다. 파일은 여전히 ​​마스터 폴더에 보관되지만 파일을 실행하려면 배치에서 해당 폴더를 찾도록해야합니다.

예를 들어, 바탕 화면에 마스터 폴더가 있고이를 실행하는 경우 실행하는 것과 같은 것이어야합니다 "C:\Users\Username\Desktop". 해당 위치에 배치 CD가 있습니다.

하지만 문서에서 실행하면 어떨까요? 사용자 이름을 모르기 때문에 어떻게 든 일괄 처리가 이것을 찾도록해야합니다. 모든 코드 및 / 또는 지침이 좋습니다.


bat 파일을 시작할 때 작업 디렉토리는 해당 파일이 시작된 디렉토리 ( "마스터 폴더")이므로 파일이 어디에 있는지 알 필요가 없습니다.

.\mydocuments\folder\mybat.bat
.\mydocuments\folder\subfolder\file.txt

그리고 사용자는 "mybat.bat"를 시작하고 작업 디렉토리는 ". \ mydocuments \ folder"이므로 스크립트에 하위 폴더 이름 만 작성하면됩니다.

@Echo OFF
REM Do anything with ".\Subfolder\File1.txt"
PUSHD ".\Subfolder"
Type "File1.txt"
Pause&Exit

어쨌든 작업 디렉토리는 "% CD %"변수에 저장되고 bat가 시작된 디렉토리는 인수 0에 저장됩니다. 그런 다음 컴퓨터의 작업 디렉토리를 알고 싶다면 다음을 수행 할 수 있습니다.

@Echo OFF
Echo Launch dir: "%~dp0"
Echo Current dir: "%CD%"
Pause&Exit

ElektroStudios 답변은 약간 오해의 소지가 있습니다.

"bat 파일을 시작할 때 작업 디렉토리는 시작된 디렉토리입니다."이것은 사용자가 탐색기에서 배치 파일을 클릭하면 참입니다.

그러나 CALL 명령을 사용하여 다른 스크립트에서 스크립트를 호출하면 현재 작업 디렉토리가 변경되지 않습니다.

따라서 스크립트 내에서 % ~ dp0subfolder \ file1.txt를 사용하는 것이 좋습니다.

또한 현재 스크립트가 현재 작업 디렉토리에 없으면 % ~ dp0이 백 슬래시로 끝납니다. 따라서 후행 백 슬래시가없는 디렉토리 이름이 필요한 경우 다음과 같이 사용할 수 있습니다.

call :GET_THIS_DIR
echo I am here: %THIS_DIR%
goto :EOF

:GET_THIS_DIR
pushd %~dp0
set THIS_DIR=%CD%
popd
goto :EOF

당신은 또한 할 수 있습니다

 Pushd "%~dp0"

또한 unc 경로에서 실행되는 것을 고려합니다.


yourbatch에서 시도

set "batchisin=%~dp0"

변수를 배치 위치로 설정해야합니다.

참고 URL : https://stackoverflow.com/questions/16255184/how-do-i-find-the-current-directory-of-a-batch-file-and-then-use-it-for-the-pat

반응형