Я полагаю, что основная причина ошибки вашего кода в том, что строка 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 (