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

0

Eu uso um arquivo .cmd (no Windows 7) para mover um grande número de arquivos PDF digitalizados de uma pasta "quarentena" para seus locais eventuais.

Os PDFs têm nomes de arquivos em execução de TA500xxxx.PDF a TA517xxxx.PDF (onde xxxx é qualquer coisa de 0001 a 9999). Gostaria de poder identificar todos os arquivos com nomes de arquivo inferiores a TA517xxxx.pdf (ou seja, todos aqueles de TA5000001.pdf a TA5169999.pdf ) em uma única operação, se possível, mas IF EXIST não parece levar a '<' 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 algum jeito de contornar isso?

    
por user277524 31.03.2014 / 14:03

2 respostas

0

Não sei se a instrução IF lê / aceita dados de stdin. Eu não penso assim e eu 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 de TA500 * para TA516 * para destino .

Observação: para as faixas que levam a números de formulário de zeros, às vezes você precisa ser muito criativo ao executar tarefas como essa.

    
por 31.03.2014 / 15:30
0

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

O comando if 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 script de exemplo que deve ajudá-lo 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

por 31.03.2014 / 15:30