【问题标题】:How to shorten a directory path pattern如何缩短目录路径模式
【发布时间】:2012-09-15 12:22:42
【问题描述】:

我有一组大约 10.000 个具有以下结构的目录

./AAA/AAA/somedirs/file.txt
..
./BCDE/BCDE/somedirs/file.txt
..
./FGMAB/FGMAB/somedirs/file.txt
..
etc

我想减少两个连续同名目录的重复目录路径模式:

./X/X/etc/

到具有该名称的单个目录:

./X/etc/

我想在这样的 X/X 模式之后找到所有子结构,并使用如下命令将它们移动到 X/:

for /r /d %x in (*/%y/%y/*) do move "%x" ".."

这确实运行,但它似乎并没有真正做任何事情。

任何人知道是否以及如何做到这一点?

【问题讨论】:

  • 如果你想缩短一个看起来太长的相对路径,你必须去那个路径使它成为当前的(即:“.”)。使用PUSHDCDPOPD来回切换到特定路径,以便临时使用较短的相对路径。

标签: windows windows-7 command-line


【解决方案1】:

假设重复的名字都在树结构的顶部,如下所示:

md dummy\x
for /D %x in (*) do if exist %x\%x cmd /c "move %x dummy\x\%x & move dummy\x\%x\%x %x & rd dummy\x\%x"

先测试一下! (请记住,当命令在批处理文件中时,百分号需要加倍。)

【讨论】:

  • 谢谢,这行得通!对于任何尝试使用相同技巧的人,请记住,如果目录和文件出现包含空格,则需要在它们周围添加额外的引号,例如"%x\%x" 而不是 %x\%x。下面的代码与上面的技巧相同,但只有一行不需要虚拟目录:for /D %x in (*) do if exist %x\%x cmd /c "for /D %y in ("%x\%x\*") do move "%y" "%x"" & rd "%x/%x"
  • 很公平。但是请注意,如果第二级有任何文件,即.\aaa\aaa\file.txt,或者如果有任何目录名称重复三次,即.\aaa\aaa\aaa\file.txt,则您的方法将不起作用。这些是否是潜在问题取决于场景。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 2018-04-26
  • 2020-04-26
  • 2013-08-25
相关资源
最近更新 更多