【问题标题】:Batch file to rename .txt to include number of rows批处理文件重命名 .txt 以包含行数
【发布时间】:2019-10-31 10:04:20
【问题描述】:

我有一个例程,它每小时发送一个名为“orders.txt”的通用 .txt 文件。当我收到它们时,我想运行一个批处理文件将文件重命名为:orders_DDMMYYYYMMSS_XXX.txt 其中 XXX 将是原始文件中包含的总行数

到目前为止,我已经想出了如何添加日期/时间戳,但不是行数。

提前致谢!

ren *.txt Completed_Orders_%date:~10,4%%date:~7,2%%date:~4,2%%time:~0,2%%time:~3,2%.txt

【问题讨论】:

  • find /c /v "" 获取行数。放置一个for /f 循环以将其放入变量中(请参阅for /?)。
  • 我建议,如果您对有限的用户设置比较满意,请将%date:~10,4%%date:~7,2%%date:~4,2%%time:~0,2%%time:~3,2% 改为%DATE:~-4%%DATE:~-7,2%%DATE:~-10,2%%TIME:~0,2%%TIME:~3,2%。这将增加减少没有设置以实现DDMMYYYYMMSS 的用户数量,因为某些设置没有将Day 前缀到他们的%DATE%。
  • 谢谢大家。我添加了循环,它似乎正在工作。

标签: batch-file count rename


【解决方案1】:

我会这样做:

@echo off
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set "datetime=%%I"
set "datetime=%datetime:~0,12%"

for %%F in (*.txt) do (
  for /f %%a in ('type "%%F"^|find "" /v /c') do (
    ECHO ren "%%F" "Completed_Orders_%%~nF_%datetime%_%%a.new
  )
)

变化:

  • 另一种获取日期/时间字符串而不依赖于区域设置的方法
  • 一个环绕的for %%F循环来处理每个*.txt文件
  • 保留原始文件名 (%%~nF) 作为新名称的一部分
  • 重命名文件的另一个扩展名(避免一次又一次地重新处理它们)最好在开始时过滤要重命名的文件,但我不知道它们是什么样子(而不是*.txt只匹配预处理文件的东西)
  • 用ECHO 解除ren 命令。排除故障后删除ECHO(当您确定它按预期工作时)

【讨论】:

    【解决方案2】:

    我这样做了:

    set file=*.txt
    set /a cnt=0
    for /f %%a in ('type "%file%"^|find "" /v /c') do set /a cnt=%%a
    ren *.txt "Completed_Orders_%date:~10,4%%date:~7,2%%date:~4,2%%time:~0,2%%time:~3,2%_%cnt%.txt"
    

    【讨论】:

    • 当您确定时没关系,只有一个 .txt 文件(您似乎是这样)。请注意,这取决于您的本地设置,因此它可能无法在另一台计算机上运行(尤其是您可能会在 10:00 之前的日期/时间字符串中获得一个空格,因此我引用了您的目标文件名来处理该空间 -虽然我更喜欢language independent solution)。请务必在安排每小时运行时设置工作文件夹,否则它将找不到您的文件。
    • 感谢您的反馈。如果文件夹中有多个 .txt 文件,则它似乎无法按照您的指示工作。我将如何更改它以处理文件夹中的多个 .txt 文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2011-04-10
    • 2012-12-10
    • 2013-12-14
    • 2014-02-26
    • 1970-01-01
    相关资源
    最近更新 更多