2016-02-02 19 views
0

我在这里看到的最接近使用命令“MV”,这显然不是Windows命令。 Windows“移动”命令不会完成这项工作。批处理文件,以一个类型的所有文件移动到不同的驱动器保持原有的目录树

我有一个文本文件,其中列出了每个需要移动的文件,显示其完整路径从c:\(例如C:\ di1 \ dir2 \ dir3 \ dir4 \ filetomove.png。 )子目录名称中有空格,没有标准的顺序,有些可能是一个深度,其他5个深度。

我想这样做,以便我最终得到一个新的列表,除了驱动器号将是X:\而不是C:\

这些目录中还有很多其他文件,不应该被触摸,只有在我正在使用的列表中有这些文件。

+2

你试过ROBOCOPY? https://technet.microsoft.com/en-ca/library/cc733145.aspx – Sarvadi

回答

0

事实上,Robocopy更灵活,更不容易出错,但这里有一些批处理“代码”,用于读取文本文件和每行(假设每个文件的完整路径在一行中) :

  • “计算”目标文件夹(其实是将文件的父文件夹的第一个字符 - 这应该是驱动器盘符 - 与存储在DESTINATION_DRIVE一)如果新的父目录存在
  • 测试,如果没有创建它(和所有中间目录) - 这就是为什么move命令用于失败:因为目标父目录不存在。的说明在这里:如果具有相同名称的文件作为目标目录存在,移动操作显然会失败
  • 进行移动操作

脚本:

@echo off 
set DESTINATION_DRIVE=e 

for /f "tokens=*" %%f in (files.txt) do (
    call :move_file "%%f" 
) 
goto :eof 

:move_file 
    set _SRC_DIR=%~dp1 
    set _DST_DIR=%DESTINATION_DRIVE%%_SRC_DIR:~1% 
    if not exist "%_DST_DIR%\nul" (
     mkdir "%_DST_DIR%" 
    ) 
    move %1 "%_DST_DIR%" 
    goto :eof 

作为一个缺陷,移动文件后,该脚本可能会在源驱动器上留下空的目录。

相关问题