Как присвоить переменной результат выражения

Как присвоить переменной результат выражения

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

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

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 сохраняет выражение, а не результат выражения. Я пытаюсь присвоить результат выражения другой временной переменной, а затем извлечь подстроку временной переменной, но ничего не меняется.

решение1

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

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

Связанный контент