批处理脚本:移动文件夹&内容到新路径

时间:2016-08-24 19:11:56

标签: batch-file directory

问题

我正在尝试将文件夹(例如\\myUNC\folder1)及其内容移动到另一个文件夹(例如\\myUNC\Parent\folder1)。我通常有两种简单的方法 - 使用move(类似于here)或使用ren(类似于here)。

示例代码

set oldPath=\\myUNC\folder1
set newPath=\\myUNC\Parent\folder1
move "%oldPath%" "%newPath%"
::ren"%oldPath%" "%newPath%"

故障排除

在我第一次尝试move解决方案时,我收到错误:

  

文件名或扩展名太长。 0 dir(s)移动。

结果,我在第二个链接中尝试ren,这给出了错误:

  

该命令的语法不正确。

对于第二个错误,我假设这是因为我将路径作为变量的一部分传递 - ren不接受。 调用此更改的批次与文件夹或其新路径不在同一目录中。因此,至少据我所知,我无法使用当前目录代码(如rencd)。

如果有人有可能的解决方案,将不胜感激!感谢。

2 个答案:

答案 0 :(得分:1)

  

文件名或扩展名太长。 0 dir(s)移动。

此错误指的是'功能'在Windows中,将文件名限制为最多255个字符。要解决此问题,您需要缩短网络驱动器上文件夹的名称
Maximum filename length in NTFS (Windows XP and Windows Vista)?

  

该命令的语法不正确。

发生此错误是因为您无法为ren命令声明新文件夹。文件只能在同一文件夹中重命名,甚至不允许子目录。但是您遇到The syntax of the command is incorrect.错误的原因是因为您在ren"之间遗漏了一个空格


可能的解决方案:

根据您的方案,您可以pushd进入该文件夹,然后使用move命令。根据我的经验,一些命令不会对UNC位置和本地文件位置(例如if exist "\\UNC\")做出同等响应:

@echo off
pushd \\myUNC\
set oldPath=folder1
set newPath=Parent\folder1
move "%oldPath%" "%newPath%"
popd

如果你没有超过255个字符限制

,这只会起作用

答案 1 :(得分:0)

经过大量的故障排除后,我找到了一个没有错误的解决方案!

解决方案

set oldPath=\\myUNC\folder1
set newPath=\\myUNC\Parent\folder1
robocopy /move "%oldPath%" "%newPath%"

为什么

Robocopy是Microsoft提供的一个较新的命令,用于处理长度超过256个字符的文件名字符串(显然是move和/或copy命令的问题)。

您可以使用google robocopy来了解有关命令选项和参数的更多信息,但它非常直接。对于我的问题,我想移动文件,所以我只使用了/move选项,它删除了原始文件夹和文件。