gpt4 book ai didi

windows - 批处理文件搜索与本地文件同名的文件夹并将所述文件移动到定位的文件夹不起作用

转载 作者:行者123 更新时间:2023-12-03 11:07:31 26 4
gpt4 key购买 nike

所以我正在尝试创建一个批处理文件,它将在与批处理文件相同的目录中获取一个 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% 变量没有正常工作。非常感谢任何帮助。

最佳答案

就像@Magoo 所说的(^|)。您肯定想为 dir 命令添加以下开关:/b 用于“裸格式”(仅名称)和 /ad 用于“属性目录”仅返回文件夹名称。 find 需要引用它的参数,为了安全起见,move 命令的目标也应该被引用。您的 find 可以受益于 /i 以使其不区分大小写。

我个人会使用嵌套循环来避免创建 super 变量:

@echo off
for /r "C:\Users\me\Test Folder" %%G in (*.pdf) do (
for /r %%A in ('dir /b /ad "P:\Accounting\Acc Pay" ^| find /i "%%~nG"') do (
move "%%G" "%%~dpA"
)
)

好处:如果有多个 .pdf 文件(可能在周末或假期之后),这将一次性正确处理所有文件。

根据您的命名结构,考虑将 find/i "%%~nG" 替换为 findstr/iblc:"%%~nG"(参见 findstr/?找出开关的含义)

(注意防止混淆:findstr 是唯一支持将开关连接成一个的命令(据我所知)。/iblc/i/b/l/c)

关于windows - 批处理文件搜索与本地文件同名的文件夹并将所述文件移动到定位的文件夹不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65709380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com