我研究过类似名称的问题,但它们看起来并不像我需要的那样。另外,在我的第一天,我找到了一个帖子(我道歉,我现在无法找到它,即使我给它加了书签,书签只带我到这个论坛的主页),那是非常类似于我所寻找的,但是不成功(不是批处理文件足够精明),为我的目的修改它。
我所拥有的是一个包含数千个pdf文件的目录。
他们的名字是这样的。
12345.pdf,
12345.pdf,
12347.pdf,
(依此类推)。
在源目录中有几千个匹配的文件夹,其名称如下:
12345_eventnumber_eventprovider,
12346_eventnumber_eventprovider,
12347_eventnumber_REF alt#_ eventventvider,
(依此类推)。
我想要做的是让所有的pdf根据文件名神奇地转到相关的文件夹。 pdfs的整个文件名,第一组数字直到文件夹的第一个下划线。
无论如何,在修改了另一张海报的文件之后,这就是我最终得到的结果(使用我可怜的批处理文件技能)。
@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窗口查看是否有任何数字丢失。主怜悯)。
但这不取决于我。此外,虽然似乎有一些非常方便的小共享软件或甚至便宜的软件,我们的网络几乎没有外部应用程序。至少不是没有国会的行为(几乎字面上)。
但是我很有希望,看到批处理文件似乎正朝着我想要的方向前进,所以如果有人能够理顺我并帮助我找到正确的语言,那么请提前感谢。
提前致谢!
答案 0 :(得分:1)
@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_"
)
)