Хранить только часть имени файла в пакетном режиме - PullRequest
0 голосов
/ 24 июня 2018

относительно этого вопроса. Я пытаюсь настроить предложенный сценарий в соответствии с измененными потребностями, но не могу.Вот контекст:

  • Сценарий ниже анализирует набор файлов с именами, такими как EventLog_12345.txt
  • В каждом файле он определяет строку, содержащую строку vVariable (пример 2018-06-22 08:21:19 0133 LET vVariable = 'h**ps://somedomain.com/test/joblog.XML')
  • Получает имя файла URL в конце этой строки (joblog)
  • Сохраняет файл как новый файл с новым именем:joblog_12345.txt

  • Ниже приводится сценарий, предложенный в указанном сообщении, который выполняет свою работу.

    :: Q:\Test\2018\05\22\SO_50982243.cmd
    @Echo off & Setlocal EnableDelayedExpansion
    For /f "delims=" %%A in ('findstr /I /M "vVariable" *_*.txt ') Do (
       For /f "tokens=2delims=_" %%B in ("%%~nA") Do (
           For /f "delims=" %%C in ('findstr /I "vVariable" ^<"%%A"') Do Set "Line=%%C"
           Set "Line=!Line:/= !"
           For %%D in (!Line!) Do Set "NewName=%%~nD_%%B%%~xA"
           Echo Ren "%%~A" "!NewName!"
       )
    )
    
  • Однако, когда япопробуйте сделать то же самое на множестве файлов с разными именами, я отчаянно терплю неудачу (я поиграл с частью *_*.txt, чтобы выполнить это, но безуспешно.)

  • Имена файлов, которые мне нужно идентифицировать, выглядят примерно так: Worker FFM Generator.qcc.2018_06_24_14_46_55.txt, где все до тех пор, пока числа не начинаются, является константой, поэтому имена файлов отличаются только по их числовой части.В конце концов я хочу сохранить новый файл (взяв примерную строку сверху) как joblog_2018_06_24_14_46_55.txt

Большое спасибо!

1 Ответ

0 голосов
/ 25 июня 2018

В самой внутренней петле for /F измените "%%A" на "%%~A" или "%%~fA". Как есть, ваши имена файлов, содержащие пробелы, заполняют %%A результатами в кавычках. Поэтому for /F, вероятно, пытается выполнить что-то вроде этого:

findstr /I "vVariable" ^<""Worker FFM Generator.qcc.2018""

... что неверно. Добавление тильды уберет внутренние кавычки, если они есть, и ваши явные кавычки будут действительными.

Для дальнейшего использования, @echo on может помочь вам отследить простые ошибки, такие как эта, что позволит вам увидеть, где скрипт работает не так, как ожидалось.

Если ваш сценарий не находится в том же каталоге, что и ваши файлы журналов, вам также следует добавить pushd directoryname ниже @echo off, указав имя каталога, содержащего «Worker FFM Generator и т. Д.» вместо directoryname. Если вам нужен скрипт для рекурсивного поиска файлов, добавьте переключатель /S в findstr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...