我有这样的文件结构:
folder +---a | \---b | \---foo bar +---c | \---d | \---foo bar +---. \---.
我想foo bar
使用批处理文件移动到它自己的父文件夹。
我在命令行中尝试了此操作,但它说:
The syntax of the command is incorrect.
cd "path to folder"
for /r %x in (foo bar) do move "%x" ".."
编辑
我将命令更改为此:
for /r %x in ("foo bar") do move "%x" "%~px.."
但是现在它给出了一个错误,因为在foo和bar之间存在空格:("foo bar")
,我该怎么办?使用foo?bar
而不是"foo bar"
也许?
编辑2
我的最终命令:
for /d /r %x in ("?oo bar") do if "%~nx"=="foo bar" move "%x" "%~px.."
我没有使用(*)
它,因为如果您有数百个文件夹,它会大大增加命令执行时间,因为它必须检查每个文件夹的名称。
谢谢大家的帮助
我提供了以下示例,以不使用递归,而将其RoboCopy
用于移动操作。RoboCopy
具有能够合并目录和/或以其他方式覆盖(取决于您选择的选项)的好处,如果有任何冲突的话。
如果您仅移动具有特定名称的目录,例如,foo bar
那么以下命令行可能会有所帮助:
(PushD "folder"&&(For /D %G In (*)Do @For /D %H In ("%G\*") Do @RoboCopy "%H\foo bar" "%G\foo bar" /E /Move)&PopD)>NUL 2>&1
如果要将所有目录(无论其名称)从三个级别下移到folder
一个级别,那么这就足够了。
(PushD "folder"&&(For /D %G In (*)Do @For /D %H In ("%G\*") Do @For /D %I In ("%H\*")Do @RoboCopy "%I" "%G\%~nxI" /E /Move)&PopD)>NUL 2>&1
请注意,没有检查以确定包含目标的第二级目录现在是否为空。如果是,并且希望删除它们,则需要扩展命令行,或根据需要添加新的命令行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句