Batch file 批处理文件,将多个文件夹中的第一个PDF从c:\PDF\复制到单个文件夹c:\qa\
我有数百个子文件夹来自c:\pdf\文件夹 我想将每个子文件夹中的第一个pdf(按名称排序)复制到一个文件夹中,比如c:\QA\以便手动检查pdf是否有错误 有人能帮忙吗?求你了 到目前为止,我有:Batch file 批处理文件,将多个文件夹中的第一个PDF从c:\PDF\复制到单个文件夹c:\qa\,batch-file,pdf,automation,Batch File,Pdf,Automation,我有数百个子文件夹来自c:\pdf\文件夹 我想将每个子文件夹中的第一个pdf(按名称排序)复制到一个文件夹中,比如c:\QA\以便手动检查pdf是否有错误 有人能帮忙吗?求你了 到目前为止,我有: @echo off cls cd c: cd c:\pdf\ for /r %%a in (*.pdf) do ( copy %%a c:\qa\%%~nxa GOTO :EXIT ) :Exit 注意:文件名是唯一的。目标目录永远不是源目录的子目录。baove代码适用于子文件夹中
@echo off
cls
cd c:
cd c:\pdf\
for /r %%a in (*.pdf) do (
copy %%a c:\qa\%%~nxa
GOTO :EXIT
)
:Exit
注意:文件名是唯一的。目标目录永远不是源目录的子目录。baove代码适用于子文件夹中的第一个pdf,但不适用于其他子文件夹。以下是一些示例代码。它查看每个目录和
C:\PDF
下面的任何潜在子目录,而不查看C:\PDF
中的文件。如果你在寻找不同的东西,那么相应地更新你的问题
@Echo关闭
对于(*)中的/D/R“C:\PDF”%%A,请执行以下操作(
对于/F“Delims=“%%B In('Dir/B/A-D/O-N”%%A\*.pdf“2^>Nul”)Do(
设置“第一个=%%A\%%B”)
SetLocal EnableDelayedExpansion
如果存在“!first!”复制“!first!”C:\QA”
(本地)
暂停
请不要只是使用它,还要通过检查各种引用来慢慢学习。新技术文件系统(NTFS)返回与通配符模式匹配的文件名列表,这些文件名始终按字母顺序排序。因此,对于NTFS格式的分区,下面的批处理代码可能足以完成此任务
@echo off
for /D %%D in ("C:\pdf\*") do if exist "%%D\*.pdf" call :CopyFirstFile "%%D"
goto :EOF
:CopyFirstFile
for %%F in ("%~1\*.pdf") do (
copy "%%F" C:\qa\
goto :EOF
)
goto :EOF
请注意,FOR的第一个忽略具有隐藏属性集的子文件夹。子例程CopyFirstFile
中的的第二个忽略设置了隐藏属性的PDF文件
另一个同样适用于文件分配表(FAT)分区(FAT16、FAT32、exFAT)的解决方案使用命令DIR获取按名称排序的*.pdf文件列表
@echo off
for /D %%D in ("C:\pdf\*") do if exist "%%D\*.pdf" call :CopyFirstFile "%%D"
goto :EOF
:CopyFirstFile
for /F "delims=" %%F in ('dir /A-D /B /ON "%~1\*.pdf"') do (
copy "%~1\%%F" C:\qa\
goto :EOF
)
goto :EOF
由于选项/A-D
,命令DIR忽略与模式*.pdf匹配的目录,并查找隐藏的*.pdf文件。但是,复制不会复制隐藏的*.pdf文件
最好使用MOVE而不是COPY,因为在下一次运行时,如果同时不修改C:\pdf
中的文件夹,批处理文件将再次复制相同的文件
labelCopyFirstFile
下面的命令行被解释为第一个FOR循环调用的子例程
第一个goto:EOF
在第一个FOR循环遍历C:\pdf
的所有非隐藏子目录后退出批处理文件处理
第二个goto:EOF
将在目录中找到的第一个文件作为第一个(也是唯一的)参数复制到子例程后,退出第二个FOR循环和子例程
第三个goto:EOF
实际上是不必要的,因为永远不应该执行此命令行,而且当批处理文件中没有更多命令行时,也不需要此命令行。但最好的做法是确保被称为子例程的每个块都有最后一行goto:EOF
或与goto:EOF
完全相同的exit/B
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
呼叫/?
复制/?
dir/?
echo/?
获取/?
goto/?
如果/?
而且,它几乎是您所需要的全部。:) 我们很乐意提供帮助,当你创建了一个批处理文件,尝试了它,并将它发布在这里,并解释了你在哪里与它斗争。Compo,谢谢你的评论。不幸的是,我在挣扎,因为我不以编程为生。我对批处理文件的了解仅限于重命名和复制a到b的某个文件,而不是使用循环之类的方法。对不起,我不能提供基本的!这不是有效的代码,也请用您的代码编辑您的原始帖子。
CD /D "C:\PDF"
DIR /s /b *.pdf >a.txt
For /f "Tokens=*" %%A In (a.txt) Do (Copy /Y "%%A" "C:\QA")
Exit