Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
Batch file 基于匹配的文件名将多个PDF移动到多个文件夹_Batch File - Fatal编程技术网

Batch file 基于匹配的文件名将多个PDF移动到多个文件夹

Batch file 基于匹配的文件名将多个PDF移动到多个文件夹,batch-file,Batch File,我已经研究过标题类似的问题,但它们似乎不是我所需要的。此外,在我第一天的时候,我发现了一篇帖子(很抱歉,我现在找不到了,尽管我把它加入了书签,但书签只把我带到了这个论坛的主页上),这篇帖子和我要找的内容非常相似,但没有成功(对批处理文件的理解不够)修改它以达到我的目的 我拥有的是一个包含数千个pdf文件的目录 他们的名字是这样的 12345.pdf, 12345.pdf, 12347.pdf, (等等) 在源目录中有几千个匹配的文件夹,它们的名称如下: 12345\u事件编号\u事件提供程序,

我已经研究过标题类似的问题,但它们似乎不是我所需要的。此外,在我第一天的时候,我发现了一篇帖子(很抱歉,我现在找不到了,尽管我把它加入了书签,但书签只把我带到了这个论坛的主页上),这篇帖子和我要找的内容非常相似,但没有成功(对批处理文件的理解不够)修改它以达到我的目的

我拥有的是一个包含数千个pdf文件的目录

他们的名字是这样的

12345.pdf,
12345.pdf,
12347.pdf,
(等等)

在源目录中有几千个匹配的文件夹,它们的名称如下:

12345\u事件编号\u事件提供程序,
12346_eventnumber_eventprovider,
12347_eventnumber_REF alt#u eventprovider,
(等等)

我想做的是让所有PDF根据文件名神奇地转到相关文件夹。PDF的完整文件名,文件夹的第一组数字,直到第一个下划线

无论如何,这是我在修改另一张海报的文件后得到的结果(我的批处理文件技能少得可怜)

@Echo off
cd /d "c:\My source Directory"
setlocal enabledelayedexpansion
for %%a in (*_*.*) do (
 for /f "delims=_" %%b in ("%%a") do (
 set "f=%%b"
   if /i "%%~xa"==".pdf" (
     md "c:\My source directory" 2>nul
     move "%%a" "C:\My destination directory!f:~0,-1!" >nul
   )
它确实了解我的源目录,至少基于结果。但它失败了,因为它所做的只是在我的源目录中创建新文件夹(而不是全部)。所以我希望有人能帮我修好它,让它做我想做的事

如果由我决定,我们不会把每个文件都放在自己的小文件夹中来跟踪文件序列,而是将它们列在数据库或类似的地方(是的,老板希望每个文件都放在自己的小文件夹中,这样他就可以在MS窗口中查看是否缺少任何数字。主啊,发慈悲吧)

但这不取决于我。此外,尽管有一些非常方便的小共享软件,甚至是便宜的软件,但我们的网络几乎不允许外部应用程序。至少在没有国会法案的情况下(几乎是字面意思)

但是我有很大的希望,看到批处理文件似乎正朝着我想要的方向发展,因此,如果有人能纠正我并帮助我获得正确的语言,请提前感谢

提前谢谢

@echo off
setlocal enableextensions disabledelayedexpansion
for %%a in (*.pdf) do for /d %%d in ("%%~na_*") do move "%%a" "%%d\%%a" >nul 2>&1
对于每个pdf文件,搜索以pdf名称开头并后跟下划线的文件夹,然后将文件移动到该文件夹中

再次编辑以适应评论

@echo off
setlocal enableextensions disabledelayedexpansion

set "sourcePDFs=C:\Users\lwilso01\Desktop\Test1"
set "targetFolders=c:\users\lwilson\desktop\test2"

for %%a in ("%sourcePDFs%\*.pdf") do (
    for /d %%d in ("%targetFolders%\%%~na_*") do (
        move "%%~fa" "%%~fd\%%~nxa" >nul 2>&1
    )
    if exist "%%~fa" (
        md "%targetFolders%\%%~na_"
        move "%%~fa" "%targetFolders%\%%~nxa_"
    )
)

谢谢@MC ND,不过我还是做错了一些事情(根据我的第一篇文章,我在这方面还是相当新的)。在哪里插入文件和文件夹路径?在两个括号内?另外,我是否完全用你上面的语言替换了以前的语言?还是我把它插在什么地方了?(我试过几种不同的方法,似乎都不管用)。谢谢大家!@LWilson,见更新的答案。在这两种情况下,这都符合您在问题中指出的内容。我遗漏了什么吗?不,如果我知道如何正确地修改它(将我的文件夹名放入等),我肯定它能工作。我认为更多的是我不理解这个过程,我做错了什么。可能是路径太长了吗?上面的两组说明似乎只设置了pdf文件所在文件夹的路径,没有一个文件移动到其关联的文件夹。我创建了一些测试文件夹,以便使我的项目匿名。以下是我理解的我需要对您提供的上述批次执行的操作。,(我只使用了第二个,没有必要让这变得更复杂)。再次感谢您的帮助和耐心@Echo off set“folder=C:\Users\lwilso01\Desktop\Test1”for%%a in(“%C:\Users\lwilson\Desktop\Test1%*.pdf”)for/d%%d in(“%%%C:\Users\lwilson\Desktop\test2\%%~na*”)do(move“%%~fa”“%%~fd\%%~nxa nul 2>&1”)@lwilson,我了解PDF和文件夹存储在同一文件夹下,并且目标文件夹存在。代码更改为删除两个分区。