【问题标题】:Batch file to rename folders with wildcard or create a new folder and move contents?批处理文件以使用通配符重命名文件夹或创建新文件夹并移动内容?
【发布时间】:2013-08-06 12:32:57
【问题描述】:

我正在尝试整理一个数据文件夹并编写了一个批处理文件来处理许多初步工作(删除空文件夹、删除垃圾文件等),但我在尝试处理时摔倒了包含重复文件夹中的文件。

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

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\Corporations 中有数百个文件夹要处理,所以我想我需要首先找到任何名为 Concat_* 的文件夹,在同一个父文件夹中创建一个名为 Concat 的文件夹,然后移动任何压缩从 Concat_ 到 Concat。

我尝试了FOR /D in (Concat_*)MDMOVE 命令的各种组合,但到目前为止没有运气。我还尝试从FOR 语句中调用一个子例程,该语句将跳回树中的一个级别,创建一个名为 Concat 的文件夹,返回到 Concat_* 并移动 .zip 文件,但还是没有运气。

任何帮助将不胜感激。

干杯,

皮特

【问题讨论】:

  • technet.microsoft.com/en-us/library/cc754900(v=ws.10).aspx,您可以找到一些文档,您可以在批处理文件的 for 循环中仅提取文件名或仅提取扩展名或文件名变量的目录部分。
  • Windows PowerShell 应该有能力实现这一点。
  • 那么同名的 ZIP 怎么办?移动会覆盖同名文件。
  • 感谢@FrankPl 的链接,我会看一下。我认为这对于我对命令的基本掌握来说太复杂了!
  • @Endoro - 同名的 .zip 文件都是一样的。我无法控制的不同进程有时会创建重复文件。它不是将这些写入同一个文件夹 (Concat),而是创建一个附加的参考编号 (Concat_00001) 的重复文件夹。我在此处理中的目标正是用它们的副本覆盖 zip 文件,所以我留下了正确的文件夹和一个 zip 文件的最终副本,并且所有 Concat_* 文件夹都为空以被删除。

标签: batch-file cmd wildcard batch-processing


【解决方案1】:

试试这个:

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

【讨论】:

  • 感谢 Endoro,这对于 w:\Data\Corporations\555 文件夹非常有用,但我也需要处理 Corporations 中的许多其他文件夹。 @dbenham 下面的回答正是这样做的。不过,我对这一切还是很陌生,我看到的例子越多,我的理解就越好,所以谢谢你:)
【解决方案2】:

以下内容按照您的要求进行。如果取消注释最后一行,则将删除空的 config_* 文件夹。非空的 config_* 文件夹将被保留。

@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"
)

【讨论】:

  • 太棒了,非常感谢!事实证明我不是一百万英里之外,但我怀疑我自己会在不到 6 个月的时间内让它工作:)
猜你喜欢
  • 1970-01-01
  • 2020-12-19
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多