【问题标题】:batch to retrieve files within folders based on time interval taken from folder name批处理以根据从文件夹名称获取的时间间隔检索文件夹中的文件
【发布时间】:2014-02-17 12:29:17
【问题描述】:

我是批处理脚本的新手。我正在做以下工作,

我有很多文件夹命名如下

02_25-06_00
02_25-06_10
02_25-06_20
02_25-06_30
02_25-06_40
02_25-06_50
02_25-07_00

其中 02 是月份,25 是日期,06 是小时,00 是分钟

在每个文件中,有两个文件夹,分别命名为 A 和 B。每个文件夹都有 5 个文本文件。

我需要一个获取时间间隔的批处理脚本,例如 06:00 到 06:20 作为输入,并显示两个子文件夹中的每个子文件夹中的所有文本文件,如下所示

02_25-06_00-A1.txt
02_25-06_00-A2.txt
02_25-06_00-A3.txt
02_25-06_00-A4.txt
02_25-06_00-A5.txt
02_25-06_00-B1.txt
02_25-06_00-B2.txt
02_25-06_00-B3.txt
02_25-06_00-B4.txt
02_25-06_00-B5.txt
02_25-06_10-A1.txt
02_25-06_10-A2.txt
02_25-06_10-A3.txt
02_25-06_10-A4.txt
02_25-06_10-A5.txt
02_25-06_10-B1.txt
02_25-06_10-B2.txt
02_25-06_10-B3.txt
02_25-06_10-B4.txt
02_25-06_10-B5.txt

请在这个批处理脚本中帮助我...

【问题讨论】:

  • .txt 文件有那些实际的文件名吗?
  • @foxidrive 不,文本文件有不同的名称,我需要用时间信息重命名那个文件
  • MC ND 的解决方案在这里有效。

标签: file batch-file copy move batch-processing


【解决方案1】:
@echo off
    setlocal enableextensions enabledelayedexpansion

    set /p "start=Start (hh:mm): "
    set /p "end=End (hh:mm): "

    set "somewhere=%cd%"

    for /f "tokens=1-2 delims=-" %%a in ('dir /b /on /ad "%somewhere%"') do (
        if "%%b" geq "%start::=_%" if "%%b" leq "%end::=_%" (
            for %%c in ( "%somewhere%\%%a-%%b\a\*.*" "%somewhere%\%%a-%%b\b\*.*") do (
                for /f "tokens=*" %%d in ("%%~dpc.") do (
                    echo(%%a-%%b-%%~nxd%%~nxc
                )
            )
        )
    )

pause

这是一个创建测试用例文件夹和文件的批处理文件:

@echo off
for %%a in (1 2 3 4 5) do for %%b in (A B) do for %%c in (
02_25-06_00
02_25-06_10
02_25-06_20
02_25-06_30
02_25-06_40
02_25-06_50
02_25-07_00
) do md %%c\%%b 2>nul& type nul>%%c\%%b\%%a.txt

已编辑 - 包括代码更改以适应新文件夹命名(以 cmets 表示)。包括的变化:

  • 文件夹 a = 9k(更改for %%c 文件集)

  • 文件夹 b = c2(for %%c 文件集的更改)

  • 时间命名文件夹 = hh-mm_hh-mm(for %%a delims 的变化,小时比较变量替换,for %%c 文件集)

其余代码保持不变

for /f "tokens=1-2 delims=_" %%a in ('dir /b /on /ad "%somewhere%"') do (
    if "%%b" geq "%start::=-%" if "%%b" leq "%end::=-%" (
        for %%c in ( "%somewhere%\%%a_%%b\9k\*.*" "%somewhere%\%%a_%%b\c2\*.*") do (
            for /f "tokens=*" %%d in ("%%~dpc.") do (
                echo(%%a-%%b-%%~nxd%%~nxc
            )
        )
    )
)

【讨论】:

  • 我添加了一个脚本来创建提及的文件夹和文件。您的脚本运行良好。
  • @foxidrive,谢谢。
  • @foxidrive 非常感谢您的及时帮助。我正在列出所有的 txt 文件。是否可以提取文件并将其放在单独的文件夹中?
  • @Mrk,将echo 行替换为copy "%%~fc" "c:\targetFolder\%%a-%%b-%%~nxd%%~nxc"
  • 先生,代码是 MC ND 的,我只是添加了一些小的外观更改。要学习批处理脚本,请关注 www.dostips.com 或 Computer Hope 等批处理论坛,并阅读其他简单的脚本并在论坛中提问。监视这些论坛的人通常很乐意解释技术并帮助您。您可以在 cmd 提示符下键入 HELP 以查看命令列表,还可以键入 HELP COMMANDNAME 以获取有关命令名称如何工作的一些说明。另一种方法是输入commandname /?,例如find /?set /?for /?
猜你喜欢
  • 2016-09-11
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2020-12-06
相关资源
最近更新 更多