Windows 배치 스크립트에서 절대 경로를 가져 오기위한 변수


9

.phtml확장명을 가진 디렉토리에서 모든 파일을 재귀 적으로 나열하는 다음 스크립트가 있습니다.

@echo off
setlocal
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @relpath"') do echo %%G >> listoffiles.txt
endlocal
exit

파일의 상대 경로 만 나열합니다. 위의 스크립트는 중간 위치에서 실행되므로 @relpath변수의 전체 경로를 얻지 못합니다 .

또한 결과 줄에 따옴표가 표시되어 제거하려고합니다.

내 코드에 사용할 수있는 전역 변수를 사용할 수 있다면 Windows 배치 스크립트 작성자가 많지 않으므로 가능한 한 몇 가지 코드 변경으로 해당 파일의 절대 경로를 얻고 싶습니다.

답변:


3

@relpath변수에 전체 경로가 표시되지 않습니다 .

또한 결과 줄에 따옴표가 표시되어 제거하려고합니다.

다음 배치 파일은 원하는 것을 수행합니다.

@echo off
setlocal enableDelayedExpansion
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @path"') do (
  set _name=%%G
  rem strip the quotes
  echo !_name:~1,-1! >> listoffiles.txt
  )
endlocal
exit

노트:

  • 용도 @path(파일의 전체 경로) 대신 @relpath(파일의 상대 경로).
  • 변수 substring표현식을 사용 하여 따옴표를 제거하십시오 ( :~1,-1변수 문자열에서 첫 번째 문자와 마지막 문자를 제거함).
  • 루프 setlocal EnableDelayedExpansion에서 변수가 올바르게 업데이트되도록 사용 for합니다.

추가 자료

  • Windows CMD 명령 행의 AZ 색인 -Windows cmd 행과 관련된 모든 것에 대한 훌륭한 참조 자료.
  • enabledelayedexpansion- 지연 확장으로 인해 구문 분석 시간이 아닌 실행 시간에 변수가 확장됩니다.
  • for / f- 다른 명령의 결과에 대한 루프 명령.
  • forfiles- 파일 (또는 파일 세트)을 선택하고 각 파일에서 명령을 실행하십시오. 일괄 처리.
  • 변수 - 변수의 일부를 추출합니다 (하위 문자열).
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.