【问题标题】:.Bat file to move file by file extension and substring file name.bat 文件通过文件扩展名和子字符串文件名移动文件
【发布时间】:2021-06-02 14:33:09
【问题描述】:

我是 .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 文件

我该怎么做?

【问题讨论】:

  • 当使用IF ERRORLEVEL 语法时,它会检查errorlevel 是否大于或等于X。所以IF ERRORLEVEL 0 基本上对所有内容都为TRUE。没有多少基本的 Windows 命令会产生负面的错误级别。来自帮助文件 ERRORLEVEL number 如果最后一次运行的程序返回的退出代码等于或大于指定的数字,则指定一个真条件。
  • 旁注:您认为将控制台窗口中的文本复制并粘贴到您的问题中然后尝试上传屏幕截图会更容易吗?
  • @Squashman 我谨记您对下次机会的建议

标签: windows batch-file command-line


【解决方案1】:

您可以改用 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 的 pdf 文件
【解决方案2】:

为您提供几个选项。您可以使用命令修饰符来隔离文件扩展名。然后,您可以使用字符串替换来查看基本文件名中是否存在 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\"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2016-06-22
    • 2023-04-08
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    相关资源
    最近更新 更多