【问题标题】:Batch file to recursively move a single subdirectory from multiple parent directories TO another single, defined directory批处理文件以递归方式将单个子目录从多个父目录移动到另一个单个定义的目录
【发布时间】:2013-04-17 17:45:23
【问题描述】:

如果这个标题还不够令人困惑.. 希望我想要做的事情更容易理解。

Windows 7 以防万一。

我正在工作的文件夹中有多个目录;

C:\WorkingDir\1
C:\WorkingDir\2
C:\WorkingDir\3
and so on

在每个文件夹(1、2、3 等)中都有一个子目录,没有其他文件或文件夹;

C:\WorkingDir\1\5E04AB
C:\WorkingDir\2\4F07FC
C:\WorkingDir\3\9DA04F

我需要将每个子目录从父文件夹中移动到一个新文件夹;

C:\NewFolder\5E04AB
C:\NewFolder\4F07FC
C:\NewFolder\9DA04F

就是这样!我认为这可能很简单,但我无法理解变量或解释如何使用它们的更好资源。我根本不怎么使用批处理文件,所以我很抱歉这种求助的呼声。希望知识渊博的人有一个简单的解释可以帮助我:-)

我发现了这个:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

但是有人可以将我链接到一个资源,在那里我可以了解有关批处理变量和参数的更多信息以供将来参考吗?

谢谢谢谢谢谢

更新:

@endoro 感谢您的答复。我第一次尝试运行您的代码时一定有用户错误。它工作正常,一切都很好!非常感谢!

更新 2 运行 User1 贡献的代码后,它将创建我的 NewFolder 目录,但不会向其中复制任何内容。它仍然是空的。以下是我运行 DOS 时的一些重复输出:

C:\WorkingDir>(
set fldr2=C:\WorkingDir\1\5E04AB
 move "C:\WorkingDir\\" "C:\NewFolder\"
)
The system cannot find the file specified.

C:\WorkingDir>(
set fldr2=C:\WorkingDir\2\4F07FC
 move "C:\WorkingDir\\" "C:\NewFolder\"
)
The system cannot find the file specified.

C:\WorkingDir>(
set fldr2=C:\WorkingDir\3\9DA04F
 move "C:\WorkingDir\\" "C:\NewFolder\"
)
The system cannot find the file specified.`

【问题讨论】:

  • 好的,我试过了,但是每当我尝试运行它时,只会得到“命令的语法不正确”。 @echo off&setlocalset "workingdir=C:\WorkingDir"md "C:\NewFolder" 2>nulpushd "%workingdir%"cdfor /d %%i in (*) do for /d %%j in ("%%~i\*") do echo move "%%~fj" "C:\NewFolder\%%~nxj"popd
  • 您想要修复这组特定文件夹还是一般性的问题?

标签: batch-file windows-7 move file-processing


【解决方案1】:

请查看输出并删除echo,如果可以的话:

@echo off &setlocal 
set "workingdir=WorkingDir"
md "C:\NewFolder" 2>nul

pushd "%workingdir%"
cd
for /d %%i in (*) do for /d %%j in ("%%~i\*") do echo move "%%~fj" "C:\NewFolder\%%~nxj"
popd

【讨论】:

  • 当我回复时,我无法弄清楚如何让我的 cmets 以正确的间距显示所有内容。我在代码周围使用了反引号,但它没有显示我的间距和行正确中断。 stackoverflow.com/editing-help#need-more-detail 也没有帮助..
  • 我检查了代码,这里没问题。你看到cd 命令的输出了吗?这应该显示C:\WorkingDir
  • 也适用于我 - 我直接复制了 OP 的版本。唯一的变化是我使用的驱动器号。
  • 啊!我不知道我第一次做了什么,但是是的,它完美无缺。谢谢!
【解决方案2】:

我无法对此进行测试,但是:

@echo off
setlocal EnableDelayedExpansion
md "c:\NewFolder\"
cd "C:\WorkingDir\"
for /D /r %%a in ("*") do (
    set fld1=%%a
    cd "%fld1%"
    for /D /r %%b in ("*") do (
        set fld2=%%b
        move "c:\WorkingDir\%fld1%\%fld2%" "C:\NewFolder\%fld2%"
        )
    )

还有一个很好的批处理资源:

http://ss64.com/nt/

【讨论】:

  • 它运行但不工作。我将稍后编辑我的原始问题以显示此批处理脚本的输出。
  • 感谢您提供有关批次信息的链接!
  • @user2291844:您介意测试一下这个版本并告诉我进展如何吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 2010-09-10
  • 2017-07-20
  • 2013-08-20
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
相关资源
最近更新 更多