【问题标题】:How to move documents to specific folders/sub folders based on 2 parts of the title如何根据标题的 2 个部分将文档移动到特定文件夹/子文件夹
【发布时间】:2019-01-10 20:27:48
【问题描述】:

这里是新手,

试图解决归档问题。

我需要一个 bat.file 脚本来根据名称的开头和名称中的某个单词移动文件。抱歉,很难解释。这是我的例子....

195-21 Cat ate my shoe
-AP DISBURSEMENTS
-BILLING
-CLIENT PW

195-22 Jump on the Roof
-AP DISBURSEMENTS
-BILLING
-CLIENT PW

1104-03 Dog named Dave
-AP DISBURSEMENTS
-BILLING
-CLIENT PW

1010-146 Water for pond
-AP DISBURSEMENTS
-BILLING
-CLIENT PW

这些都是我想要移动的 .pdf 文件:

195-21 December 2018 Invoice 59641
195-21 Amerson Report Class $84.61
195-22 December 2018 Invoice 57741
195-21 January 2018 Invoice 59131
1104-03 Ciox 18-Jun-16 $346.79
1104-08 St. Augustine 03-May-17 $35.21
1010-146 May 2018 Invoice 56981

因此文件将根据名称的数字部分移动。

195-21 Cat ate my shoe
-AP DISBURSEMENTS
<------195-21 Amerson Report Class $84.61
-BILLING   
<---------195-21 December 2018 Invoice 59641
-CLIENT PW

如果文件名中有Invoice 这个词,我需要它转到subfile Billing。如果不是所有其他人都需要转到子文件AP DISBURSEMENTS

如果该号码的主文件不存在,它可以留在原处。

问题是一些数字比其他数字更多。 195-211010-146

我也不知道我在做什么。就好像我有这个伟大的计划,但我什至不知道从哪里开始执行它......

感谢您的任何帮助!

我在网上找到并尝试了它。它很整洁,但我不知道我在做什么,这不是我想要的。

@echo off &setlocal
for /f "delims=" %%i in ('dir /b /a-d *.pdf') do (

    set "filename1=%%~i"
    setlocal enabledelayedexpansion
    set "folder1=!filename1:~0,8!"
    mkdir "!folder1!" 2>nul
    move "!filename1!" "!folder1!" >nul
    endlocal

)

我希望根据名称的第一部分和“发票”将 pdf 移动到其相应的文件夹,但此代码不会这样做。它根据前几个数字将它们移动到文件夹中。我不知道我在做什么。很抱歉浪费您的时间...

【问题讨论】:

  • 所以只有包含invoice 的文件你想移动到subfile Billing ..?是否有任何数字与您的目标相关?
  • 是的,开头的数字将决定它将进入哪个“主”文件夹。因此,195-55 将进入 195-55 文件夹,如果其中包含单词 invoice,则将进入子文件夹 billing。如果它没有发票一词,它将进入 195-55 子文件夹 -AP Disbursments

标签: batch-file command directory move


【解决方案1】:
  • 您首先应该使用简单的 for 来迭代 pdf 文件,
  • 第二个用于 /f 在第一个空格处拆分文件名和
  • /f 的第三个迭代目标文件夹
  • 然后检查它是否是发票和
  • 如果目标文件夹存在。

这一切都可以在没有延迟扩展的情况下完成。

之前的示例树:

> tree \ /F
│
└───Base
    │   1010-146 May 2018 Invoice 56981.pdf
    │   1104-03 Ciox 18-Jun-16 $346.79.pdf
    │   1104-08 St. Augustine 03-May-17 $35.21.pdf
    │   195-21 Amerson Report Class $84.61.pdf
    │   195-21 December 2018 Invoice 59641.pdf
    │   195-21 January 2018 Invoice 59131.pdf
    │   195-22 December 2018 Invoice 57741.pdf
    │
    ├───1010-146 Water for pond
    │   ├───AP DISBURSEMENTS
    │   ├───BILLING
    │   └───CLIENT PW
    ├───1104-03 Dog named Dave
    │   ├───AP DISBURSEMENTS
    │   ├───BILLING
    │   └───CLIENT PW
    ├───195-21 Cat ate my shoe
    │   ├───AP DISBURSEMENTS
    │   ├───BILLING
    │   └───CLIENT PW
    └───195-22 Jump on the Roof
        ├───AP DISBURSEMENTS
        ├───BILLING
        └───CLIENT PW

运行这个批处理文件

:: Q:\Test\2019\01\10\SO_54136438.cmd
@Echo off
set "Base=A:\Base"
Set "Ext=*.pdf"
Set "DestInv=BILLING"
Set "DestDiv=AP DISBURSEMENTS"

For %%A in ("%Base%\%Ext%") Do For /f %%B in ("%%~nA") Do (
    For /F "delims=" %%C in ('Dir /B /AD "%Base%\%%B*" 2^>Nul') Do (
        Echo:Invoice|findstr /I "%%~nA" 1>Nul 2>&1 &&(
            If Not exist "%Base%\%%C\%DestInv%\" MD "%Base%\%%C\%DestInv%\"
            Move "%%~fA" "%Base%\%%C\%DestInv%\"
        )||(
            If Not exist "%Base%\%%C\%DestDiv%\" MD "%Base%\%%C\%DestDiv%\"
            Move "%%~fA" "%Base%\%%C\%DestDiv%\"
        )
    )
)

之后:

> tree \ /F
│
└───Base
    │   1104-08 St. Augustine 03-May-17 $35.21.pdf
    │
    ├───1010-146 Water for pond
    │   ├───AP DISBURSEMENTS
    │   ├───BILLING
    │   │       1010-146 May 2018 Invoice 56981.pdf
    │   │
    │   └───CLIENT PW
    ├───1104-03 Dog named Dave
    │   ├───AP DISBURSEMENTS
    │   │       1104-03 Ciox 18-Jun-16 $346.79.pdf
    │   │
    │   ├───BILLING
    │   └───CLIENT PW
    ├───195-21 Cat ate my shoe
    │   ├───AP DISBURSEMENTS
    │   │       195-21 Amerson Report Class $84.61.pdf
    │   │
    │   ├───BILLING
    │   │       195-21 December 2018 Invoice 59641.pdf
    │   │       195-21 January 2018 Invoice 59131.pdf
    │   │
    │   └───CLIENT PW
    └───195-22 Jump on the Roof
        ├───AP DISBURSEMENTS
        ├───BILLING
        │       195-22 December 2018 Invoice 57741.pdf
        │
        └───CLIENT PW

【讨论】:

  • 只需将变量Base 设置为包含您的文件和文件夹的目录即可。
  • 这正是我想要完成的。我将更改单词库并尝试一下。我会尽快与结果联系!
  • 您确实将set "Base=A:\Base" 更改为您的 文件和文件夹的位置?即set "Base=C:\Test" 或您将它们存储在哪里?
  • 太棒了!我要怎么感谢你?我可以寄一张感谢卡吗?!
  • 如果一个答案解决了您的问题或您认为它有帮助,您应该考虑accept the answer 和/或vote up 您需要更多代表才能看到投票。
猜你喜欢
  • 1970-01-01
  • 2017-06-07
  • 2017-05-04
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 2021-10-16
相关资源
最近更新 更多