Batch file 使用通配符重命名文件夹或创建新文件夹并移动内容的批处理文件?

Batch file 使用通配符重命名文件夹或创建新文件夹并移动内容的批处理文件?,batch-file,cmd,wildcard,batch-processing,Batch File,Cmd,Wildcard,Batch Processing,我正试图整理一个数据文件夹,并编写了一个批处理文件来处理大量的准备工作(删除空文件夹、删除垃圾文件等),但当我试图处理重复文件夹中的文件时,我失败了 这是当前情况的一个例子: w:\Data\Corporations\555\20130101\Concat_000001\555_20130101_data.zip w:\Data\Corporations\555\20130101\Concat_000002\555_20130101_data.zip w:\Data\Corporations\5

我正试图整理一个数据文件夹,并编写了一个批处理文件来处理大量的准备工作(删除空文件夹、删除垃圾文件等),但当我试图处理重复文件夹中的文件时,我失败了

这是当前情况的一个例子:

w:\Data\Corporations\555\20130101\Concat_000001\555_20130101_data.zip
w:\Data\Corporations\555\20130101\Concat_000002\555_20130101_data.zip
w:\Data\Corporations\555\20130101\Concat_000003\555_20130101_data.zip
w:\Data\Corporations\555\20130101\Concat_000004\555_20130101_data.zip
每个YYYYMMDD文件夹应该只有一个Concat文件夹,如下所示:

w:\Data\Corporations\555\20130101\Concat\555_20130101_data.zip
w:\Data\Corporates中有数百个文件夹需要处理,因此我想我首先需要找到任何名为Concat_*的文件夹,在同一父文件夹中创建一个名为Concat的文件夹,然后将任何zip从Concat_*移动到Concat

我用
MD
MOVE
命令尝试了(Concat*)中的
FOR/D的各种组合,但迄今为止运气不佳。我还尝试从
FOR
语句中调用一个子例程,该子例程将跳回树中的一个级别,创建一个名为Concat的文件夹,返回Concat并移动.zip文件,但同样没有成功

任何帮助都将不胜感激

干杯

皮特

试试这个:

for /r "w:\Data\Corporations\555" %%a in (*.zip) do for %%b in ("%%~dpa.") do md "%%~dpbConcat" 2>nul & move /y "%%~fa" "%%~dpbConcat"
试试这个:

for /r "w:\Data\Corporations\555" %%a in (*.zip) do for %%b in ("%%~dpa.") do md "%%~dpbConcat" 2>nul & move /y "%%~fa" "%%~dpbConcat"

下面是您所要求的。如果取消对最后一行的注释,则将删除空的配置文件夹。非空的配置文件夹将被保留

@echo off
for /f "delims=" %%F in ('dir /b /ad /s concat_*') do (
  if not exist "%%~dpFconcat\" mkdir "%%~dpFconcat\"
  if exist "%%F\*.zip" move /y "%%F\*.zip" "%%~dpFconcat\" >nul
  REM uncomment line below if you want to remove empty concat_* folders
  REM dir /b "%%F"|findstr "^" >nul || rd "%%F"
)

下面是您所要求的。如果取消对最后一行的注释,则将删除空的配置文件夹。非空的配置文件夹将被保留

@echo off
for /f "delims=" %%F in ('dir /b /ad /s concat_*') do (
  if not exist "%%~dpFconcat\" mkdir "%%~dpFconcat\"
  if exist "%%F\*.zip" move /y "%%F\*.zip" "%%~dpFconcat\" >nul
  REM uncomment line below if you want to remove empty concat_* folders
  REM dir /b "%%F"|findstr "^" >nul || rd "%%F"
)

在,您可以找到一些文档,说明如何在批处理文件的for循环中提取文件名变量的仅文件名、仅扩展名或目录部分。Windows PowerShell应该有能力实现这一点。使用相同名称的ZIP又如何?Move会覆盖同名文件。谢谢@FrankPl的链接,我会查看一下。我认为这将证明太复杂,我难以置信的基本掌握的命令,虽然@endro-同名的.zip文件都是相同的。我无法控制的另一个进程有时会创建重复的文件。它不会将这些文件写入同一个文件夹(Concat),而是创建一个附加参考号的重复文件夹(Concat_00001)。我在这个过程中的目标就是用zip文件的副本覆盖zip文件,所以我只剩下正确的文件夹和zip文件的最后一个副本,所有的Concat_*文件夹都是空的,需要删除。在,您可以找到一些文档,说明如何在批处理文件的for循环中提取文件名变量的仅文件名、仅扩展名或目录部分。Windows PowerShell应该有能力实现这一点。使用相同名称的ZIP又如何?Move会覆盖同名文件。谢谢@FrankPl的链接,我会查看一下。我认为这将证明太复杂,我难以置信的基本掌握的命令,虽然@endro-同名的.zip文件都是相同的。我无法控制的另一个进程有时会创建重复的文件。它不会将这些文件写入同一个文件夹(Concat),而是创建一个附加参考号的重复文件夹(Concat_00001)。我在这个过程中的目标正是用它们的副本覆盖zip文件,所以我只剩下一个正确的文件夹和一个zip文件的最终副本,所有的Concat_*文件夹都将被删除。太棒了,非常感谢!原来我离这里不远,但我怀疑自己能在不到6个月的时间里让它工作:)太棒了,非常感谢!事实证明,我离这里不远,但我怀疑我自己能在不到6个月的时间内让它工作:)谢谢恩多,这对于w:\Data\Corporates\555文件夹来说太好了,但我还需要处理公司内的许多其他文件夹@dbenham下面的答案正是这样。不过,我对这一切还是很陌生,我看到的例子越多,我的理解就越好,所以谢谢:)谢谢恩多,这对于w:\Data\Corporates\555文件夹来说太好了,但我也需要处理公司内的许多其他文件夹@dbenham下面的答案正是这样。不过,我对这一切还很陌生,我看到的例子越多,我的理解就越好,所以谢谢:)