【问题标题】:Renaming files with a windows batch file使用 Windows 批处理文件重命名文件
【发布时间】:2013-06-25 09:58:49
【问题描述】:

我有一系列文件需要每天重命名。我收到的文件格式如下: yyyyMMdd_hhmmss_xxx.someFileName.txt 我需要去掉中间的时间戳以及文件名前面的三位数字字段,并留下日期和“someFileName.txt”部分。生成的文件名应如下所示:yyyyMMddsomeFileName.txt

我对 bat 文件一无所知,我做了一些实验:

@setlocal EnableDelayedExpansion

@for %%i in (.\*.txt) do call rename %%i

:rename
@set dateString=%%i:~0,8%
@set nameString=%%i:~20%
@set combinedString=%dateString%%nameString%
@echo %combinedString%

显然,这实际上并没有重命名任何东西。它只是应该打印组合字符串输出。我收到语法错误:“命令的语法不正确 ~0,8 ~20”

这里发生了什么?正确的方法是什么?

【问题讨论】:

  • 您必须call :rename(注意:冒号)才能使用您定义的标签。
  • 此外,不幸的是,语法有很多很多错误。第一个问题是批处理没有 HLL 意义上的过程概念,并且直接通过 :rename 之类的标签收费。在 FOR 语句之后,您需要一个 GOTO :EOF 才能到达文件末尾。 rename 是一个糟糕的选择,因为它是一个批处理关键字。在以前称为rename 的例程中,%%i 是脱离上下文的。因为它是xrename 例程的第一个参数,所以它是例程中的%1。您不能子字符串元变量(%%i%1 等) - 您只能子字符串普通环境变量。
  • 不完全符合您的要求,但如果您可以使用像 yyyyMMdd.someFileName.txt 这样的名称,那么您只需要ren *_*_*.*.txt ????????.*

标签: windows for-loop batch-file rename


【解决方案1】:

这应该可以满足您的需求。

@echo off
for /f "delims=" %%X in ('dir /a:-d /b *.txt') do (
    for /f "tokens=1,2,3,* delims=_." %%A in ("%%~nxX") do (
        echo %%A%%D
    )
)

当您想重命名它们时,将echo 命令替换为ren "%%~fX" "%%A%%D"

【讨论】:

  • 我想重命名这样的文件夹中的文件 20160824.cfx 我使用你的命令,但它不起作用..你能告诉我哪里出错了..我想重命名现有文件要附加一个递增的数字,我在脚本中的变量中有当前目录,如下所示for /r %EFM_TEMP% %%x in (*.cfx) do ren "%%x" "%filename% 它只重命名 4 个文件中的 1 个
猜你喜欢
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 2019-06-08
相关资源
最近更新 更多