Use o comando 'IF EXIST' com o operador '<'

0

Uso um .cmdarquivo (no Windows 7) para mover um grande número de arquivos PDF digitalizados de uma pasta 'quarentena' para seus possíveis locais.

Os PDFs têm nomes de arquivos que vão de TA500xxxx.PDFpara TA517xxxx.PDF(onde xxxx é de 0001 a 9999). Eu gostaria de poder identificar todos os arquivos com nomes de arquivos menores que TA517xxxx.pdf(ou seja, todos de TA5000001.pdfaté TA5169999.pdf) em uma única operação, se possível, mas SE EXISTENTE não parece usar o operador '<', ou seja, 'SE EXISTIR <TA517 * .pdf GOTO .... 'não funciona.

Eu poderia usar uma instrução IF EXIST separada por bloco de nome de arquivo (TA500, TA501 etc.), mas isso parece excessivo. Existe uma maneira organizada de contornar isso?

user277524
fonte

Respostas:

0

Não sei se a instrução SE lê / aceita dados de stdin. Acho que não e nunca vi isso antes.

Eu faria algo assim:

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

Esse loop moverá todos os arquivos PDF do TA500 * para o TA516 * para o destino .

Nota: PARA tiras com zeros à esquerda de números de formulário, portanto, às vezes, você precisa ser muito criativo ao executar tarefas como esta.

dulange
fonte
Existem alguns problemas possíveis. Por exemplo, o comando moverá arquivos nomeados TA500.pdfou TA516abcd.pdfmesmo se eles não devem ser tocados. Como está, o comando também tentará mover arquivos inexistentes.
and31415
0

<e > são operadores de redirecionamento de entrada / saída em scripts em lote, e você não pode usá-los para comparar valores numéricos.

O ifcomando fornece os seguintes operadores de comparação de três letras:

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

Aqui está um exemplo de script que deve ajudar você a começar:

@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

Leitura adicional

and31415
fonte