파일의 날짜를 추출한 다음 이 문자열을 새 파일 이름의 일부로 사용해야 합니다. 다음 명령을 사용하여 이 문제를 해결하려고 했습니다.
먼저 파일의 세부 정보를 가져오고 출력을 임시 파일로 리디렉션합니다.
DIR c:/myfolder/thefile.txt >> tmp.txt
그런 다음 FINDSTR을 사용하여 날짜가 포함된 줄을 가져옵니다. 찾지 못한 날짜만 가져오는 방법이 있는 경우:
FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt
출력은 다음과 같습니다
10/04/2012 07:55 66,029 thefile.txt
이제 이 결과를 변수로 설정하고 싶습니다.
SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt
%vartmp%를 입력하면 결과가 반환되기 때문에 작동한 것 같습니다.
10/04/2012 07:55 66,029 thefile.txt
그러나 vartmp의 일부를 추출하려고 하면 문제가 시작됩니다.
ECHO %vartmp:~0,2%
"10"을 예상했는데 "FI"라는 문자열이 반환되었습니다. vartmp가 표현식의 결과가 아닌 표현식을 저장하는 것 같습니다. 표현식의 결과를 다른 tempvar에 할당한 다음 하위 문자열을 추출하려고 합니다. tempvar이지만 아무것도 변경되지 않았습니다.
답변1
FOR 명령을 사용하면 한 줄을 토큰으로 잘라서 원하는 부분만 잡을 수 있습니다. /f를 사용하면 다른 명령의 출력에서 실행할 수 있습니다. 이 경우 FIND로 필터링된 DIR의 출력입니다.
for /f "tokens=1" %%a in ('dir thefile.txt ^| Find "thefile.txt"') do (
set vartmp=%%a
)
답변2
이상적이지는 않지만 SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt
다음과 같이 변경될 수 있습니다.
FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt > tmp2.txt
SET /p vartmp =< tmp2.txt
DEL tmp2.txt
답변3
귀하의 예를 따를 때 줄을 바꾸면 동일한 결과를 얻었습니다.
SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt
~와 함께
for /f %i in ('FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt') do set vartmp=%i
그런 다음 vartmp는 당신이 찾는 것을 보유합니다. 거기에는 작은따옴표가 필요하며 큰따옴표는 작동하지 않습니다. 또한 배치 파일에서 사용하는 경우 %i 대신 %%i가 필요합니다.