[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] for /f 循环如何从最后一行开始操作?

有一系列wav文件,分别为 1.wav 2.wav 3.wav ...一直到 99.wav 100.wav
我想把每个文件名序号都加1,即改成 2.wav 3.wav 4.wav...一直到 100.wav 101.wav

代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a n=1
  4. for /f "delims=*" %%a in ('dir /b *.wav') do (
  5. set /a n+=1
  6. ren "%%a" "!n!.wav"
  7. )
  8. pause>nul
复制代码
现在问题是:执行第一个循环时,要把 1.wav 改成 2.wav,但这时候 2.wav已经存在了,所以更改失败。如果FOR循环从最后一个开始执行的话
就没有这个问题了,所以我的问题就是:for循环有没有办法从最后一行开始执行,如果没有办法的话,这种问题怎么解决?

  何不倒序提取文件再重命名?
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (100,-1,1) do (
  4.     set /a num=%%i+1
  5.     ren %%i.wav !num!.wav
  6. )
  7. pause
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

如果文件名和文件本身的内容没有太大关联的话,就直接将1.wave改成101.wav吧,这样最简单了。
Still with wax

TOP

也可以将换个方向思维,从最大的一个开始处理,每次减1,这样就不存在你的问题了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a n=101
  4. for /l %%a in (1 1 100) do (
  5. set /a m=n, n-=1
  6. ren !n!.wav  "!m!.wav"
  7. )
  8. pause>nul
复制代码
Still with wax

TOP

晕啊,就为了试验下代码居然被管理员抢先了
Still with wax

TOP

回复 4楼 的帖子

问题已解决,谢谢大家!
确实是思维定势了,想着对文件操作就用 /f。。。

TOP

回复 6楼 的帖子

问题得到解决请给标题前面添加[已解决]字样,谢谢!
(*^_^*)

TOP

返回列表