다음과 같은 이름 패턴과 일치하는 하위 폴더 집합이 있는 디렉터리가 있습니다.
sub-123
sub-0815
sub-4711
이 폴더 안에는 폴더 이름에서 발견된 이름과 동일한 번호를 가진 파일이 몇 개 있습니다. 예를 들어 sub-123 폴더에는 파일이 포함되어 있습니다.
input-123
output-123
폴더를 반복하고, 작업 디렉터리를 현재 폴더로 변경하고, 적절한 파일 세트로 일부 처리를 수행하고 싶습니다. 폴더를 반복할 수 있는 동안
for /d %%d in (sub-*) do .
위의 예에서 "123"과 같이 별표와 일치하는 폴더 이름 부분이 필요합니다. 폴더 이름에서 123을 추출하고 다음과 같은 명령을 작성하려면 어떻게 해야 합니까?
cd sub-123
copy input-123 output-123
Windows-7 배치 파일 안에 있습니까? Linux 환경에서는 cut 명령이나 정규식을 사용할 수 있습니다. 그런데 Windows 명령 프롬프트로 어떻게 들어가야 합니까?
답변1
나는 그것을 스스로 발견했다. set 명령에는 향상된 변수 대체 기능이 있습니다. 하지만 신체 자체에는 사용할 수 없습니다 for
. 새로운 bacth 호출 컨텍스트를 시작해야 합니다.
for /d %%d in (sub-*) do (
set item=%%d
pushd %%d
call :build
popd
)
goto :eof
:build
set item=%item:sub-=%
copy input-%item% output-%item%
:eof
"항목"은 별표와 일치하는 문자열에서 정확히 빌드되지는 않지만 동일합니다.
답변2
나는 또한 직접적인 대답을 찾았습니다. 컷 의미론에 가깝습니다.
set 명령에는 하위 문자열 구문도 있습니다. n자를 건너뛰려면 %variable:~n%
. 오프셋 k에서 시작하는 n 문자를 얻으려면 다음을 사용하세요.%variable:~k,n%
for /d %%d in (sub-*) do (
set item=%%d
set num=%item:~4%
pushd %%d
copy input-%num% output-%num%
popd
)