使用带有“

使用带有“

我使用.cmd文件(在 Windows 7 下)将大量扫描的 PDF 文件从“隔离”文件夹移动到它们的最终位置。

PDF 的文件名从TA500xxxx.PDFTA517xxxx.PDF(其中 xxxx 是从 0001 到 9999 的任意数字)。如果可能的话,我希望能够通过一次操作识别所有文件名低于TA517xxxx.pdf(即从TA5000001.pdf到 的所有文件TA5169999.pdf) 的文件,但 IF EXIST 似乎不接受 '<' 运算符,即 'IF EXIST < TA517*.pdf GOTO....' 不起作用。

我可以为每个文件名块(TA500、TA501 等)使用单独的 IF EXIST 语句,但这似乎有点多余。有没有一种简洁的方法来解决这个问题?

答案1

我完全不知道 IF 语句是否从 stdin 读取/接受数据。我不这么认为,而且我以前从未见过这种情况。

我会做这样的事情:

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

此循环将把 TA500* 至 TA516* 的每个 PDF 文件移动到目标

注意:FOR 会删除数字中的前导零,因此有时在执行此类任务时您必须非常有创造力。

答案2

<> 是输入/输出重定向操作符在批处理脚本中,您不能使用它们来比较数值。

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

进一步阅读

相关内容