使用FOR在Windows中重命名文件

时间:2015-03-10 16:02:17

标签: windows batch-file command-line batch-rename

任务是使用命令行将五个随机文件重命名为renamed1.ren,renamed2.ren,...,renamed5.ren。以下是我的观点:

set i=1
for /f "tokens=*" %f in ('dir /b') do (
ren %f renamed%i%.ren
set /a i+=1)

我希望i在每次迭代中都会递增,但这并不起作用。我能改变什么?

2 个答案:

答案 0 :(得分:2)

SETLOCAL ENABLEDELAYEDEXPANSION    
set i=1
for /f "tokens=*" %%f in ('dir /b') do (
 ren %%f renamed!i!.ren
 set /a i+=1)

在块语句(a parenthesised series of statements)中,解析整个块并执行然后。块中的任何%var%将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于{{1 }}

因此,FOR ... DO (block)将在遇到IF (something) else (somethingelse)时使用%variables%的值执行。

解决此问题的两种常见方法是1)使用IF并使用setlocal enabledelayedexpansion代替!var!来访问已更改的%var%或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。

在批处理文件中,循环控制变量引用需要将var加倍。

答案 1 :(得分:1)

这是一个不需要延迟扩展的衬垫。

从命令行:

for /f "tokens=1* delims=:" %A in ('dir /b^|findstr /n "^"') do @ren "%B" "renamed%A.ren"

在批处理脚本中

@echo off
for /f "tokens=1* delims=:" %%A in ('dir /b^|findstr /n "^"') do ren "%%B" "renamed%%A.ren"
相关问题