【问题标题】:Batch file rename multiple files only echos the result批处理文件重命名多个文件只回显结果
【发布时间】:2014-02-13 02:03:14
【问题描述】:

我在创建批处理文件 (.bat) 以根据特定参数重命名同一目录中的多个文件时遇到问题。为了使多个文件发生这种情况,我必须为其添加一个增量值。

根据研究(主要是这里),我拼凑了以下命令,但无论我做什么,我都无法真正做到。它只是回显应该做的事情,当我从“ren”之前删除回显时,它表示语法错误。

@echo off
CD C:\FolderPath\
setlocal enabledelayedexpansion
set /a count=0
for /f "tokens=*" %%a in ('dir /b /od *.txt') do (
echo ren CDFF_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%time:~9,2%_!count!.txt
set /a count+=1
)

【问题讨论】:

  • @Tomalak - 仔细阅读问题。 OP 说如果删除 ECHO 会导致语法错误。
  • @dbenham 哦,你是对的。删除评论。

标签: windows batch-file


【解决方案1】:

将第一个参数添加到ren命令(要重命名的文件):

ren "%%a" "CDFF_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%time:~9,2%_!count!.txt"

所以整个代码是:

@echo off   
setlocal enabledelayedexpansion

CD C:\FolderPath\
set /a count=0

for /f "tokens=*" %%a in ('dir /b /od *.txt') do (
   echo ren "%%a" "CDFF_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%time:~9,2%_!count!.txt"
   set /a count+=1
)

请注意,它不适用于名称奇怪的文件。例如。 “文件(名称.txt”

【讨论】:

  • +1,但是为什么它不能用于毒字符呢?引号应防止有毒字符。
  • 我试过这个,我得到一个“系统找不到指定的路径”所以我删除了“CD”命令只是为了用 *.bat 文件所在文件夹中的文件测试它,我仍然只能让它回应它应该做的事情。
  • 好的。从头开始。有用。为了方便起见,我只是复制了代码,但我没有意识到即使我在“ren”之后添加了参数,我也没有删除它之前的回声。谢谢
【解决方案2】:

ren 需要输入 filname 作为其第一个参数。因此你的语法错误。

这是一个替代实现:

@echo off
setlocal enabledelayedexpansion

set FOLDER=%1
set DATE=%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%time:~9,2%
set /a count=0

for /r %FOLDER% %%a in (*.txt) do (
    ren "%%a" CDFF_%DATE%_!count!.txt
    set /a count += 1
)

调用为

rename.bat C:\FolderPath

【讨论】:

  • 谢谢。我可能弄错了,但我阅读这个 .bat 文件的方式需要用目标路径调用。在我的情况下,目标路径永远不会改变,并且 .bat 文件不能位于目标路径中,因此我尝试像以前那样编写它。 (可能应该在最初的描述中添加)
  • 这是for /r 循环已经处理的特殊情况。如果省略参数,则%1 将为空,这意味着FOLDER 将为空,此时for /r 假定为当前目录。
猜你喜欢
  • 1970-01-01
  • 2019-06-08
  • 2014-02-26
  • 2012-12-10
  • 2019-05-25
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
相关资源
最近更新 更多