변수로 설정하는 방법, 표현식의 결과

변수로 설정하는 방법, 표현식의 결과

파일의 날짜를 추출한 다음 이 문자열을 새 파일 이름의 일부로 사용해야 합니다. 다음 명령을 사용하여 이 문제를 해결하려고 했습니다.

먼저 파일의 세부 정보를 가져오고 출력을 임시 파일로 리디렉션합니다.

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가 필요합니다.

관련 정보