使用批处理文件从带日期的文件夹中复制所选文件

时间:2018-07-04 10:45:21

标签: batch-file command-line

我在带日期的文件夹(例如20180601、20180602等)的共享目录(源文件夹为F :)中有一组文件。 我的目标文件夹位于本地驱动器中(目标位置为C:)。

我想将选定的文件从源复制到目标。

例如

ID   max_date   penultimate
1   06.02.2018   05.01.2018
2   03.06.2018   01.06.2018
3   12.12.2017   NULL

....

现在,我要在目标位置手动创建文件夹,并手动复制所选文件,但是我无法对已过时的文件夹进行此操作。

感谢您的帮助。预先感谢。

1 个答案:

答案 0 :(得分:2)

这个问题还不清楚,但是我还是尝试回答。

  

我想将选定的文件从源复制到目标。

我假设在Windows资源管理器中选择了文件,目标是将具有完整路径的所选文件从驱动器F:复制到驱动器C:,但替换第一个目录SourceDestination

可以使用以下批处理文件完成此操作:

@echo off
for %%A in (%*) do for /F "tokens=1* delims=\" %%B in ("%%~pA") do %SystemRoot%\System32\xcopy.exe "%%~A" "C:\Destination\%%C" /C /F /G /H /K /R /Y
pause

批处理文件可以存储在任何目录中。为了与Windows资源管理器中的选定文件一起运行,必须在用户帐户的SendTo文件夹中创建一个快捷方式文件(* .lnk)。

SendTo文件夹在Windows XP上是文件夹%USERPROFILE%\SendTo,在Windows Vista和更高版本的Windows版本上是文件夹%APPDATA%\Microsoft\Windows\SendTo(经Stephan确认)。

要创建快捷方式文件,请在批处理文件上用鼠标右键单击,然后在子菜单发送至子菜单中的打开的上下文菜单中单击桌面(创建快捷方式)< / strong>。

切换到Windows桌面,然后在刚刚创建的快捷方式上用辅助(右键)单击,然后在最后一个项目属性上打开的上下文菜单中单击鼠标左键。

目标上首先附加,该字符串 %*(空格,百分号,星号)对于以后使用完整的合格文件名运行批处理文件很重要Windows资源管理器将所有选定文件作为参数传递给批处理文件。其次,在评论中写一个注释,该注释对您以后了解此快捷方式在使用中的作用很有用。您也可以单击按钮更改图标,然后从%SystemRoot%\System32\shell32.dll中选择一个更好的图标,因为Windows已自动为批处理文件快捷方式选择了一个。然后使用确定按钮关闭属性

再次使用刚刚创建和修改的快捷方式上的辅助(右键)单击,并在菜单项重命名上使用主要(左)鼠标单击。将快捷方式文件重命名为复制所选文件

现在Windows桌面上的快捷方式文件已准备好移动SendTo文件夹中。因此,使用主(左)键单击鼠标右键,选择快捷方式文件,按 Ctrl + X 进行剪切,在Windows资源管理器中打开用户帐户的SendTo文件夹,然后将带有 Ctrl + V 的快捷方式文件粘贴到该文件夹​​中。

现在可以从Windows资源管理器中使用批处理文件。您可以在F:\Source中选择一个或多个文件(不是文件夹),然后用鼠标的第二个(右键)单击所选文件中的一个以打开上下文菜单,然后在子菜单中单击鼠标左键<在复制所选文件或您为快捷方式文件指定的任何名称上,strong>发送至

该批处理文件运行 FOR 循环,处理所有传递给%*引用的批处理文件的文件名。每个文件名都一个接一个地分配给循环变量A

没有驱动器号F:的当前文件的路径由第二个 FOR 处理,该路径使用反斜杠作为分隔符将路径字符串分成两个子字符串。第一个子字符串是Source,它分配给不再使用的指定循环变量B\Source\之后没有驱动器号和冒号的所有其他路径均根据ASCII table分配给下一个循环变量C。因此,循环变量C保留当前文件的目录路径,不包含F:\Source\,并以反斜杠结尾,这对于下一个命令 XCOPY 很重要。

注意tokens=后面的数字确定从源文件路径忽略的目录级别的数目。

命令 XCOPY 用于将完全限定文件名保存在循环变量A中的文件复制到文件夹C:\Destination,并创建目录树作为hold in循环变量C(如果有必要)。如果目标参数以反斜杠结尾,则 XCOPY 总是将目标参数解释为目录。这就是为什么循环变量C包含以反斜杠结尾的路径如此重要的原因。

所有文件复制完毕后,由于命令 PAUSE cmd.exe暂停了批处理文件的执行,以便您可以验证所有操作是否按预期进行。

请注意,批处理文件不能用于一次执行复制数千个文件的操作。命令行的长度受Windows限制。因此,不可能从Windows资源管理器传递给成批文件数千个完全合格的文件名。

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • call /? ...解释%*
  • echo /?
  • for /?
  • xcopy /?