Windows批处理移动到可能不存在的目录

时间:2011-08-31 23:45:01

标签: windows batch-file

在Windows批处理文件中,我试图将文件移动到目前可能不存在的目录。因为目录不在那里,当我移动时,我看到一个错误,如:

系统无法找到指定的路径

move c:\aaa\bbb\ccc\ddd\myfile.txt c:\aaa\111\222\333\444\mytext.txt

如果当前不存在,我如何轻松创建我想要移动的路径?例如,此处,目录111可能尚未存在于aaa下。我希望创建整个路径结构,然后移动文件 我原以为它只是为我创造了整条路径。

6 个答案:

答案 0 :(得分:22)

尝试:

md c:\aaa\111\222\333\444 2> nul
移动命令之前

md使目录递归,因此如果没有到444的父目录,它将继续按层次结构创建。 “2> nul”确保如果您已经拥有该目录,那么您的命令就不会出错。

答案 1 :(得分:15)

如果ROBOCOPY是一个选项,它将创建文件夹结构(如果它不存在。

试试这个:

ROBOCOPY c:\aaa\bbb\ccc\ddd c:\aaa\111\222\333\444 mytext.txt /MOV

答案 2 :(得分:5)

if not exist c:\aaa\111\222\333\444 md c:\aaa\111\222\333\444
Move c:\aaa\bbb\ccc\ddd\myfile.txt c:\aaa\111\222\333\444\mytext.txt

答案 3 :(得分:3)

继续Aruns回答:

md c:\aaa\111\222\333\444\mytext.txt
rd c:\aaa\111\222\333\444\mytext.txt
move c:\aaa\bbb\ccc\ddd\myfile.txt c:\aaa\111\222\333\444\mytext.txt

这会创建一个名为mytext.txt的文件夹及其父项,然后将其删除,但不删除父项。

更有趣:

call :move_md "c:\aaa\bbb\ccc\ddd\myfile.txt" "c:\aaa\111\222\333\444\mytext.txt"
call :move_md "c:\aaa\bbb\ccc\ddd\myfile1.txt" "c:\aaa\111\222\333\444\mytext4.txt"
call :move_md "c:\aaa\bbb\ccc\ddd\myfile2.txt" "c:\aaa\111\222\333\444\mytext5.txt"
call :move_md "c:\aaa\bbb\ccc\ddd\myfile3.txt" "c:\aaa\111\222\333\444\mytext6.txt"
goto :eof

:move_md
md %2
rd %2
move %1 %2
goto :eof

答案 4 :(得分:2)

假设您有以下目录结构。

C:\aaa\bbb\ccc\ddd

你想在aaa下创建一个名为111的目录,然后在111下创建222,然后在444下创建333,依此类推

Window的cmd允许您通过提供多级路径

来创建目录结构

从而 md c:\aaa\111\222\333\444将创建所有目录,直到444。

您可能需要先创建目录,然后执行移动

答案 5 :(得分:0)

继续 johvanswer:我真的很喜欢这个想法,但是如果您有大量文件,由于性能限制,这将不起作用。每个文件大约需要 8.5 秒,我有大约 3mio 文件要移动,这使得总计算时间大约为 10 个月。有了这个选项,我找到了这个两步解决方案 - 首先复制文件夹结构,然后才复制文件:

  1. xcopy C:\source C:\target /t /e
  2. 移动 C:\source\aaa\bbb\ccc\ddd\myfile.txt C:\target\111\222\333\444\mytext.txt

这显然有一个缺点,它会创建不必要的文件夹,但对我来说这不是问题。