.Bat 文件通过文件扩展名和子字符串文件名移动文件

.Bat file to move file by file extension and substring file name

我是 .bat 脚本的新手。我正在尝试为 Windows 创建一个 .bat 文件,它只允许我移动包含子字符串“A20”的 pdf 文件。

在我的示例中,任何文件都被移动了,我不明白哪里出了问题。

@echo off
echo %1|find ".pdf" >nul
if errorlevel 0 (
    echo %1|find "A20" >nul
    if errorlevel 1 (echo notfound) else (move C:\Users\Jesus\Downloads\source\%1 C:\Users\Jesus\Downloads\destination_A20\%1)
) else (
    echo notfound
)

当我运行脚本时,任何文件都会被移动。当文件名包含“A20”

时,我只需要移动 pdf 文件

我该怎么做?

您可以改用 findstr。

@echo off
echo %1|findstr /i /c:".pdf" >nul
if errorlevel 0 (
    echo %1|findstr /i /c:"A20" >nul
if errorlevel 1 (echo notfound) else (move C:\Users\Jesus\Downloads\source\%1 C:\Users\Jesus\Downloads\destination_A20\%1)
) else (
    echo notfound
)

有几个选项供您选择。您可以使用命令修饰符来隔离文件扩展名。然后您可以使用字符串替换来查看基本文件名中是否存在 A20。您可以通过阅读 CALL 命令的帮助来了解修饰符,您可以通过阅读 SET 命令的帮助来了解字符串替换。

set "filename=%~n1"
IF /I "%~x1"==".pdf" (
    IF NOT "%filename:A20=%"=="%filename%" (
        move "C:\Users\Jesus\Downloads\source\%~nx1" "C:\Users\Jesus\Downloads\destination_A20\"
    ) else (
        echo File is is a PDF but A20 not found
    )
) else (
    echo file is not a PDF
)

如果您只想从一个目录简单地移动到另一个目录,您可以使用通配符。

move "C:\Users\Jesus\Downloads\source\*A20*.pdf" "C:\Users\Jesus\Downloads\destination_A20\"