Пакетный файл для переименования .txt, чтобы включить количество строк - PullRequest
0 голосов
/ 17 июня 2019

У меня есть подпрограмма, которая отправляет общие файлы .txt с именем "orders.txt" каждый час.по мере их получения я хочу запустить командный файл, чтобы переименовать файл в: orders_DDMMYYYYMMSS_XXX.txt, где XXX - это общее количество строк, содержащихся в исходном файле

, поэтому я решил, как добавитьдата / время, но не количество строк.

спасибо заранее!

ren *.txt Completed_Orders_%date:~10,4%%date:~7,2%%date:~4,2%%time:~0,2%%time:~3,2%.txt

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Вот как бы я это сделал:

@echo off
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set "datetime=%%I"
set "datetime=%datetime:~0,12%"

for %%F in (*.txt) do (
  for /f %%a in ('type "%%F"^|find "" /v /c') do (
    ECHO ren "%%F" "Completed_Orders_%%~nF_%datetime%_%%a.new
  )
)

Изменения:

  • другой способ получить строку даты / времени, не зависящий от настроек локали
  • окружающий for %%F цикл для обработки каждого *.txt файла
  • сохранение исходного имени файла (%%~nF) как части нового имени
  • другое расширение для переименованных файлов (чтобы избежать повторной обработки их снова и снова) Было бы лучше отфильтровать переименованные файлы в начале, но я не знаю, как они выглядят (вместо этого *.txt что-то, что соответствует только предварительно обработанным файлам)
  • снял команду ren с ECHO. Удалите ECHO после устранения неполадок (если вы уверены, что он работает как задумано)
0 голосов
/ 18 июня 2019

я сделал это:

set file=*.txt
set /a cnt=0
for /f %%a in ('type "%file%"^|find "" /v /c') do set /a cnt=%%a
ren *.txt "Completed_Orders_%date:~10,4%%date:~7,2%%date:~4,2%%time:~0,2%%time:~3,2%_%cnt%.txt"
...