Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理文件,用于搜索与本地文件同名的文件夹,并将所述文件移动到定位的不工作文件夹_Windows_Batch File_Cmd_Command Line - Fatal编程技术网

Windows 批处理文件,用于搜索与本地文件同名的文件夹,并将所述文件移动到定位的不工作文件夹

Windows 批处理文件,用于搜索与本地文件同名的文件夹,并将所述文件移动到定位的不工作文件夹,windows,batch-file,cmd,command-line,Windows,Batch File,Cmd,Command Line,因此,我尝试创建一个批处理文件,该文件将接收与批处理文件位于同一目录中的pdf文件,并输出文件名(SAN扩展名)。我使用此代码来完成以下任务: @echo off for /r "C:\Users\me\Test Folder" %%G in (*.pdf) do set "name=%%~nG" 这个很好用。下一步是搜索另一个目录,并在搜索的目录中查找名称与上述代码输出匹配的目录(存储在%name%变量中)。以下是我尝试过的: dir "P

因此,我尝试创建一个批处理文件,该文件将接收与批处理文件位于同一目录中的pdf文件,并输出文件名(SAN扩展名)。我使用此代码来完成以下任务:

@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
需要引用its的参数,为了安全起见,
move
命令的目标也应该被引用。您的
find
可以从
/i
中获益,使其不区分大小写

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

@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 FSTR/IBLC替换<代码> find /i“%%NG”<代码>:“%%NG”< /代码>(参见<代码> FordSTR//<代码>以查明交换机意味着什么)< /P>


(注意:为了避免混淆:
findstr
是唯一支持将交换机连接成一个交换机的命令(据我所知)。
/iblc
/I/b/l/c
相同。

是要搜索的文件夹,始终是
“p:\Accounting\AccPay”
的直接子文件夹,或者它可能被“埋在树下”的某个地方?它总是一个直接的孩子。AccPay文件夹中有多个文件夹,每个供应商公司一个。这些文件夹中只有文件。
对于(*.pdf)中的/r“C:\Users\me\Test”%%G,请移动“%%G”P:\Accounting\AccPay\%%~nG”
,或者使用
(如果存在)
。e、 g.
@For/R“C:\Users\me\Test”%%g在(*.pdf)中如果存在,请执行“P:\Accounting\AccPay\%%~nG\”移动/Y“%%g”P:\Accounting\AccPay\%%~nG”
谢谢@Stephan,这很有效!因此,通常情况下,文件名与文件夹名不完全匹配。取而代之的是,文件夹的名称类似于此(示例公司),pdf文件的名称类似于此(示例公司发票12345)。不管怎样,我还是可以做到的?