Я использую файл .cmd (в Windows 7) для перемещения большого количества отсканированных файлов PDF из папки «карантин» в их возможные местоположения.

В PDF-файлах имена файлов начинаются с TA500xxxx.PDF для TA517xxxx.PDF (где xxxx - от 0001 до 9999). Я хотел бы иметь возможность идентифицировать все файлы с именами файлов ниже, чем TA517xxxx.pdf (т. Е. Все файлы от TA5000001.pdf до TA5169999.pdf), если это возможно, за одну операцию, но если EXIST, похоже, не принимает Оператор «<», т.е. «IF EXIST <TA517 * .pdf GOTO ....» не работает.

Я мог бы использовать отдельный оператор IF EXIST для каждого блока имени файла (TA500, TA501 и т.д.), Но это кажется чрезмерным. Есть ли аккуратный способ обойти это?

2 ответа2

0

Я не знаю, читает ли оператор IF / принимает данные из стандартного ввода вообще. Я так не думаю и никогда раньше этого не видел.

Я бы сделал что-то вроде этого:

FOR /L %i IN (500,1,516) DO MOVE TA%i*.pdf target

Этот цикл будет перемещать каждый файл PDF с TA500 * на TA516 * до цели.

Примечание: FOR обнуляет начальные нули, образуя числа, поэтому иногда нужно быть очень креативным при выполнении подобных задач.

0

< и > являются операторами перенаправления ввода / вывода в пакетных сценариях, и их нельзя использовать для сравнения числовых значений.

Команда if предоставляет следующие трехбуквенные операторы сравнения:

EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal

Вот пример сценария, который должен помочь вам начать:

@echo off
setlocal
setlocal enabledelayedexpansion

REM initialize a patter which matches any .pdf files whose
REM name begins with "TA5" and is followed by 6 characters
set pattern=TA5??????.pdf

REM get all files matching the pattern
REM in the current folder and all subfolders
for /r %%A in ("%pattern%") do (

REM retrieve the current file name
set name=%%~nA

REM get 6 characters from the original name starting from the 4th
set value=!name:~3,6!

REM ensure the value is a valid number through a regular expression
echo "!value!"|findstr "^\"[0-9]*\"$" >nul
if !errorlevel! == 0 (

REM check if the value is smaller than 170000
if !value! leq 169999 (
echo %%A
)))

pause >nul
endlocal & exit /b

дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .