Как сравнить имена файлов в пакетном файле - PullRequest
0 голосов
/ 19 февраля 2012

Существует два имени файла: 0_1_en.pdf и GEN 0 GENERAL.html.Последние четыре строки кода - моя попытка (безуспешно) сравнить, если html-файл в переменной %% H соответствует правилу «GEN 0 * .pdf».Извините за мой английский, я не знаю, как сказать это лучше, но я пытаюсь сравнить, дает ли правило правильное имя файла или нет.Таким образом, если существует имя файла «GEN 0 GENERAL.html», оно должно показать строку GEN 0 GENERAL.html.В случае, если это не соответствует правилу, то ни одна строка не будет напечатана.Поэтому, если я прочту имя файла «GEN 3 SERVICES.html», то ничего не будет напечатано.

@echo off
SETLOCAL EnableDelayedExpansion
for /f "delims=" %%P in ('dir /b *.pdf') do (
SET "sPDFName=%%~nxP"
echo "!sPDFName:~0,1!"
IF "!sPDFName:~0,1!"=="1" (SET "sPDFName=!sPDFName:~0,1!")
IF "!sPDFName:~0,1!"=="0" (SET "sPDFName=!sPDFName:~0,1!")
SET tempStr="GEN !sPDFName!*.html"
echo !tempStr!
::echo "!sPDFName!"
for /f "delims=" %%H in ('dir /b *.html') do (
CALL SET substring=%%H:~!tempStr!%%
echo K:%substring%
IF "%%substring%%"=="%%H" (echo %%H) ELSE (echo NOT FOUND)
pause ))

Дает результат: «0» «GEN 0 * .pdf» K: НЕ НАЙДЕН Нажмите любую клавишу, чтобы продолжить...

1 Ответ

1 голос
/ 19 февраля 2012

Я полагаю, что основная причина ошибки вашего кода в том, что строка CALL SET substring=%%H:~!tempStr!%% не имеет никакого смысла.Я не уверен, что вы пытаетесь там сделать, но я почти уверен, что он не дает желаемого результата.

Попытка 1 (не совсем корректно) Я полагаю, что понимаю вашу цель, и я думаю, что ваш код гораздо сложнее, чем должен быть.

Я думаю, что вы хотите протестировать каждый файл PDF, чтобы увидеть, существует ли "GEN n GENERAL.html "файл, где 'n' соответствует 1-му символу в имени файла pdf.

Проверьте, дает ли это искомый результат

@echo off
setlocal enableDelayedExansion
for %%F in (*.pdf) do (
  set "pdfFile=%%F"
  set "htmlFile=GEN !pdfFile:~0,1! GENERAL.html"
  if exist "!htmlFile!" (set result=FOUND) else (set result=NOT FOUND)
  echo testing "!pdfFile!": "!htmlFile!" !result!
)

Попытка 2 (послеКомментарий ОП) Я снова посмотрел на ваш оператор CALL SET, и кажется, что вы пытаетесь выполнить операцию с подстрокой над переменной FOR

  • Проблема 1. Вы не можете выполнить подстроку или поиск и замену в переменной FORрасширение
  • Задача 2:! tempStr!не содержит правильный синтаксис для операции подстроки

Я до сих пор точно не понимаю, какой результат вы ожидаете с этим кодом CALL, поэтому я не знаю, как это исправить.

Но ваш комментарий помогает мне понять, какова ваша общая цель: для pdf с 1-м символом в имени = n вы ищете "GEN n * .html".

Если все, что вам нужно сделать, этораспечатайте соответствующие html-файлы или напечатайте сообщение об ошибке, если ничего не найдено, тогда это должно работать:

@echo off
setlocal enableDelayedExansion
for %%P in (*.pdf) do (
  set "pdfFile=%%P"
  set htmlMask="GEN !pdfFile:~0,1!*.html"
  echo(
  echo Testing "!pdfFile!": Looking for !htmlMask!
  dir /b !htmlMask!
)

Если вам нужно что-то сделать с каждым найденным html-файлом, то это должно работать:

@echo off
setlocal enableDelayedExansion
for %%P in (*.pdf) do (
  set "pdfFile=%%P"
  set htmlMask="GEN !pdfFile:~0,1!*.html"
  echo(
  echo Testing "!pdfFile!": Looking for !htmlMask!
  set "found="
  for %%H in (!htmlMask!) do (
    set found=1
    echo "%%H"
    REM do whatever you need to do with the %%P pdf file and %%H html file
  )
  if not defined found echo NOT FOUND
)

Если вы хотите обрабатывать только PDF-файлы, начинающиеся с 0 или 1, измените первый оператор FOR следующим образом:

for %%P in (0*.pdf 1*.pdf) do (
...