【发布时间】:2021-04-18 21:44:06
【问题描述】:
所以我正在尝试创建一个批处理文件,该文件将在与批处理文件相同的目录中获取一个 pdf 文件并输出文件名(无扩展名)。我用这段代码来完成这个:
@echo off
for /r "C:\Users\me\Test Folder" %%G in (*.pdf) do set "name=%%~nG"
这很好用。下一步是搜索另一个目录,并在搜索到的目录中找到一个名称与上述代码输出匹配的目录(存储在 %name% 变量中)。这是我尝试过的:
dir "P:\Accounting\Acc Pay" | find %name% | set "loc=%%~dp"
上述代码的目标是只找到与原始 pdf 文件同名的目录,然后将输出的驱动器和路径设置为变量 %loc%。我想这是我搞砸的地方。
一旦文件夹的路径设置为 %loc%,我就应该以这一行结束:
move .\*.pdf %loc%
这将获取包含批处理文件的目录中的所有 pdf 文件(目录中一次只有一个)并将其移动到当前存储在 %loc% 变量中的路径。
整个代码如下所示:
@echo off
for /r "C:\Users\me\Test Folder" %%G in (*.pdf) do set "name=%%~nG"
for /r %%A in ('dir "P:\Accounting\Acc Pay" | find %name%') do set "loc=%%~dpA"
move .\*.pdf %loc%
但是,代码似乎将 pdf 文件移动到它已经存在的相同位置(即包含批处理文件的文件夹)。我假设 %loc% 变量不能正常工作。非常感谢任何帮助。
【问题讨论】:
-
要搜索的文件夹是否始终是
"P:\Accounting\AccPay"的直接子级,或者它可能被埋在“树下”的某个地方? -
它始终是直接子代。在 AccPay 文件夹中有多个文件夹,每个供应商公司一个。这些文件夹中只有文件。
-
for /r "C:\Users\me\Test" %%G in (*.pdf) do move "%%G" "P:\Accounting\AccPay\%%~nG"? -
或者改用
if exist。例如@For /R "C:\Users\me\Test" %%G In (*.pdf) Do @If Exist "P:\Accounting\AccPay\%%~nG\" Move /Y "%%G" "P:\Accounting\AccPay\%%~nG" -
感谢@Stephan,成功了!所以通常情况下,文件名不会与文件夹名完全匹配。相反,文件夹将被命名为这样的名称(示例公司),而 pdf 文件将被命名为这样的名称(示例公司-发票 12345)。无论如何,我仍然可以完成这项工作吗?
标签: windows batch-file cmd command-line