【问题标题】:Batch script to iterate through directories starting with a specific string用于遍历以特定字符串开头的目录的批处理脚本
【发布时间】:2020-05-03 04:07:27
【问题描述】:

我目前不得不手动编辑批处理文件以手动告诉它要处理哪个目录。

它必须抓取的目录总是以“2020-”开头(至少今年是这样),如果我错过了一天,有时会有多个目录。

(如果更简单,它们将始终采用这种格式:“0000-00-00”)

有没有办法编辑这个来解决这个问题?

我尝试将 source_directory 设置为“2020*”,但我知道这可能不是这样的,哈哈,任何正确方向的帮助或指针都会很棒。

@echo off

pushd %~dp0

SET source_directory=2020-05-03
SET target_directory=%~dp0

for /f %%a IN ('dir "%source_directory%" /b') do (
move %source_directory%\%%a %target_directory%
)

【问题讨论】:

  • 如果 2020 是您要查找的前缀,那么 2020-??-?? 应该这样做,除非您有 2020-aa-aa 形式的目录,其中 a 是字母字符。如果这样做,您可以随时检查 %%a 中的任何非数字值的结果并跳过执行移动。
  • 此脚本是否在 source_directory 中指定的日期每天运行?
  • 我希望它自动运行,所以我会通过任务调度程序。但目前由于限制,我不得不手动完成,所以有时它会被推迟,然后会累积好几天。所以我有“2020-01-01”和“2020-01-02”等。我希望它只使用当前日期作为变量,但它没有考虑到这一点。
  • 感谢您提供有关“??”的信息,我已将其纳入我的解决方案中。
  • 请从问题中删除您的解决方案并将其作为答案发布,因为这正是答案的目的......

标签: loops for-loop batch-file move


【解决方案1】:

对不起,我不经常使用 SO,所以我忘记了事情需要怎么做。

这是我想出的解决方案。我不认为这是这样做的直观方式,但我对批处理的理解不够好,无法在没有嵌套循环的情况下做到这一点。

@echo off

pushd %~dp0

SET source_directory=????-??-??
SET target_directory=%~dp0

for /d %%s in (%source_directory%) do (
    for /f %%a IN ('dir "%%s" /b') do (
        move %%s\%%a %target_directory%
    )
)

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多