首页 > 解决方案 > 将具有确切名称的多个文件夹移动到它自己的父文件夹

问题描述

我有这样的文件结构:

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.."

我没有使用(*),因为如果您有数百个文件夹,它会大大增加命令执行时间,因为它必须检查每个文件夹的名称。

感谢大家的帮助

标签: batch-filecommand-linemovesubdirectory

解决方案


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.."

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


推荐阅读