将具有正确名称的多个文件夹移动到其自己的父文件夹中

问题描述 投票:0回答:2

我具有这样的文件结构:

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"吗?

batch-file command-line move subdirectory
2个回答
1
投票
for /r /d %A in (*) do if /i "%~nxA" == "foo bar" move /y "%~A" "%~dpA.."

*用作(set)。如果查看for /?,则可能会看到:

(set)指定一组一个或多个文件。可以使用通配符。

因此,(set)是文件,而不是文件夹。

理想情况下,为for变量使用一个字母,而不是修饰字母。 x表示扩展修饰符。

[%~nxA将是当前文件夹名称,并检查是否为foo bar

如果move已经存在,如果foo bar失败,则拒绝访问以警告它的存在。

如果用于批处理文件,请将%字符加倍至%%

备用循环:

for /f "delims=" %A in ('dir /b /s /a:d "*foo bar"') do if /i "%~nxA" == "foo bar" move /y "%~A" "%~dpA.."

它将在循环开始之前获取路径,以避免同一文件夹的多次移动。


1
投票

如果您仅移动具有特定名称的目录,例如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

请注意,没有包含任何检查来确定包含您的目标的第二级目录现在是否为空。如果是,并且希望删除它们,则需要扩展命令行,或根据需要添加新的命令行。

© www.soinside.com 2019 - 2024. All rights reserved.