Board logo

标题: [文本处理] [已解决]批处理输出的时候是正确的,但是改名出错?(文件替换的问题)附带源码 [打印本页]

作者: playinthesky    时间: 2015-3-13 01:09     标题: [已解决]批处理输出的时候是正确的,但是改名出错?(文件替换的问题)附带源码

本帖最后由 playinthesky 于 2015-3-14 23:51 编辑
  1. @echo off
  2. for %%i in (*.jpg) do (
  3. for /f "tokens=1-2 delims=." %%a in ("%%i") do (
  4. for /f "tokens=1-5 delims=-" %%b in ("%%a") do (
  5.    echo %%b-%%c-%%d-%%f-%%e.jpg %%b-%%c-%%d-%%e-%%f.jpg
  6. )
  7.         )
  8. )
  9. pause
复制代码
J090-2011-30年-0001-0035.jpg   J090-2011-30年-0035-0001.jpg
J090-2011-30年-0001-0036.jpg   J090-2011-30年-0036-0001.jpg
J090-2011-30年-0001-0037.jpg   J090-2011-30年-0037-0001.jpg
J090-2011-30年-0001-0038.jpg   J090-2011-30年-0038-0001.jpg
J090-2011-30年-0001-0039.jpg   J090-2011-30年-0039-0001.jpg
J090-2011-30年-0001-0040.jpg   J090-2011-30年-0040-0001.jpg
J090-2011-30年-0001-0041.jpg   J090-2011-30年-0041-0001.jpg
J090-2011-30年-0001-0042.jpg   J090-2011-30年-0042-0001.jpg
J090-2011-30年-0001-0043.jpg   J090-2011-30年-0043-0001.jpg
J090-2011-30年-0001-0044.jpg   J090-2011-30年-0044-0001.jpg
J090-2011-30年-0001-0045.jpg   J090-2011-30年-0045-0001.jpg
J090-2011-30年-0001-0046.jpg   J090-2011-30年-0046-0001.jpg
J090-2011-30年-0001-0047.jpg   J090-2011-30年-0047-0001.jpg
J090-2011-30年-0001-0048.jpg   J090-2011-30年-0048-0001.jpg
J090-2011-30年-0001-0049.jpg   J090-2011-30年-0049-0001.jpg
输出是正常的,但是改名之后
  1. @echo off
  2. for %%i in (*.jpg) do (
  3. for /f "tokens=1-2 delims=." %%a in ("%%i") do (
  4. for /f "tokens=1-5 delims=-" %%b in ("%%a") do (
  5.    ren %%b-%%c-%%d-%%e-%%f.jpg %%b-%%c-%%d-%%f-%%e.jpg
  6. )
  7.         )
  8. )
复制代码
改名之后的结果是

J090-2011-30年-0001-0035.jpg
J090-2011-30年-0036-0001.jpg
J090-2011-30年-0037-0001.jpg
J090-2011-30年-0038-0001.jpg
J090-2011-30年-0039-0001.jpg
J090-2011-30年-0040-0001.jpg
J090-2011-30年-0041-0001.jpg
J090-2011-30年-0042-0001.jpg
J090-2011-30年-0043-0001.jpg
J090-2011-30年-0044-0001.jpg
J090-2011-30年-0045-0001.jpg
J090-2011-30年-0046-0001.jpg
J090-2011-30年-0047-0001.jpg
J090-2011-30年-0048-0001.jpg
J090-2011-30年-0049-0001.jpg

在几千条下运行,总会出现没改的,谁能告诉我,这是为什么?有大哥可以指点一下吗?
作者: DAIC    时间: 2015-3-13 10:38

  1. @echo off
  2. for /f "delims=" %%i in ('dir /b *.jpg') do (
  3.     for /f "tokens=1-2 delims=." %%a in ("%%i") do (
  4.         for /f "tokens=1-5 delims=-" %%b in ("%%a") do (
  5.            ren %%b-%%c-%%d-%%e-%%f.jpg %%b-%%c-%%d-%%f-%%e.jpg
  6.         )
  7.     )
  8. )
复制代码

作者: cobat    时间: 2015-3-13 11:14

本帖最后由 cobat 于 2015-3-13 13:50 编辑
  1. for %%i in (*.jpg)
复制代码
我记的这种写法会读取部分改名后的文件
所以你的情况不是没改,是改了两次.
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b *.jpg') do (
  3.     for /f "tokens=1-5 delims=-" %%b in ("%%~na") do (
  4.         ren "%%a" "%%b-%%c-%%d-%%f-%%e.jpg"
  5.     )
  6. )
  7. pause
复制代码

作者: playinthesky    时间: 2015-3-13 20:43

回复 2# DAIC


    谢谢你的指点!我试试看!
作者: playinthesky    时间: 2015-3-13 20:44

回复 3# cobat


    你说的很有道理!
作者: pcl_test    时间: 2015-3-14 14:29

回复 5# playinthesky
问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2