我正在尝试将文件夹(例如\\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
不接受。 调用此更改的批次与文件夹或其新路径不在同一目录中。因此,至少据我所知,我无法使用当前目录代码(如ren
或cd
)。
如果有人有可能的解决方案,将不胜感激!感谢。
答案 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
选项,它删除了原始文件夹和文件。