尝试编写Bat文件以根据列表中的名称复制文件

时间:2018-04-26 17:05:19

标签: batch-file

我正在尝试编写一个脚本来获取没有扩展名的文件夹中的所有文件名。然后从那个带有所有名称的txt文件,我想在任何地方的文件夹中复制具有该名称的每个文件。因此,文件夹B将包含我需要的所有文件.pdf并且我想从文件夹A获取相应名称为B的.doc文件

实施例 文件夹B = 123.doc.pdf,234.doc.pdf,345.doc.pdf

文件夹A = 123.doc,234.doc,345.doc,1324.doc,54353.doc,1231.doc

我想从B中获取没有.pdf的名称,然后使用该txt文件将文件夹A中的doc文件复制到新文件夹C中。

我创建了一个脚本来获取所有文件名,但不知道如何删除扩展名并将其保存到文件中。

dir /a /b /-p /o:gen >FileNames.txt

任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:0)

以下是此任务的简单批处理文件:

@echo off
md "C:\Temp\Folder C" 2>nul
for %%I in ("C:\Temp\Folder B\*.doc.pdf") do if exist "C:\Temp\Folder A\%%~nI" copy /Y "C:\Temp\Folder A\%%~nI" "C:\Temp\Folder C\" >nul
rd "C:\Temp\Folder C" 2>nul

第二个命令行创建Folder C,禁止显示任何错误消息,例如此文件夹上的一个输出已经写入,以通过将其重定向到设备 NUL来处理 STDERR

第三个命令行使用命令 FOR Folder B中搜索文件名与通配符模式*.doc.pdf匹配的任何非隐藏文件。

对于Folder B中的每个找到的文件,执行 IF 条件以检查.pdf中是否存在具有相同名称且文件扩展名为Folder A的文件。如果该条件为真,则将文件复制到Folder C并覆盖Folder C中具有相同名称的现有文件,除了设置了只读属性,并禁止写入成功消息以处理 STDOUT ,将其重定向到设备 NUL

最后删除Folder C,但仅限为空。处理包含文件的Folder C上的 STDERR 的错误消息通过将其重定向到设备 NUL 来抑制。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • copy /?
  • echo /?
  • for /?
  • if /?
  • md /?
  • rd /?