3

Мне нужно извлечь дату файла, а затем использовать эту строку как часть имени нового файла. Я пытаюсь решить эту проблему с помощью следующих команд:

Сначала я получаю информацию о файле и перенаправляю вывод во временный файл.

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%

Он возвращает мне строку "FI", когда я ожидал "10", кажется, что vartmp сохраняет выражение, а не результат выражения, я пытаюсь присвоить результат выражения другому tempvar, а затем извлечь подстроку Темпвар, но ничего не изменилось.

3 ответа3

1

Команду FOR можно использовать для разбиения строки на токены, чтобы вы могли получить только ту часть, которую хотите. С помощью /f вы можете запустить его на выходе других команд, в этом случае выход DIR фильтруется с помощью FIND.

for /f "tokens=1" %%a in ('dir thefile.txt ^| Find "thefile.txt"') do (
set vartmp=%%a
)
0

Это не идеально, но можно изменить 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
0

Следуя вашим примерам, я нашел тот же результат, если заменил строку:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .