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

回复 14楼 的帖子

只需要以K开头,以_dft结尾就OK了,因为文件名中只有一个K,且只有一个_dft。

TOP

  1. @echo off
  2. for /f "delims=" %%i in ('dir/b *.prt') do (
  3.    set "str=%%~ni"
  4.    setlocal enabledelayedexpansion
  5.    set "str=a!str:_dft=k!"
  6.    for /f "tokens=2 delims=k" %%a in ("!str!") do set "str=k%%a_dft"
  7.    ren "%%i" "!str!.prt"
  8.    endlocal
  9. )
  10. pause
复制代码

[ 本帖最后由 随风 于 2009-5-28 17:37 编辑 ]
技术问题请到论坛发帖求助!

TOP

它们文件名的前缀与后缀都不一样长,我想删掉它们的前缀和后缀得到:k010002_dft .prt, k010003_dft .prt等,新得到文件名的字符长度是一样的

红色为希望得到的文件名,原始文件名里始终只有一个K,K后面只有一个_dft,只需截取从K开始到_dft结尾的字符作为新文件名(文件名长度可以不限),扩展名为.prt


你想得到的新文件名长度到底是不是固定的呢?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  楼主的要求一变再变,很让人怀疑你在顶楼的描述是不是你真正的需求,并且在顶楼的描述仍然让人疑窦丛生:虽然你说文件名中有且只有一个k和一个_dft,但是,你并没有说明是不是所有的prt文件都有这两串字符;括号中的“文件名长度不限”到底指原文件名长度未知还是重命名后的文件名长度不定。

  唉,罢了罢了,还是选一种很简单的情况给段演示代码吧,至于能不能解决你的问题,就看你的造化了。

  以下代码适应这样一种情形:prt文件中一定含有一个k,没有字符!,并且,从第一个k开始的前11个字符是你想要的新文件名。情况是非常简单的,代码也是很短的,如果屏幕显示正确,请把 echo 语句中的 echo 去掉,才会真正地重命名,let's go :
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /a-d /b *.prt') do (
  4.     set "str=%%i"
  5.     set "str=!str:*k=k!"
  6.     set "str=!str:~0,11!"
  7.     echo ren "%%i" "!str!.prt"
  8. )
  9. pause
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

看楼主的描述,19楼代码直接截取11位字符估计是不行的。
文件名都有且只有一个k和_dft,兼容文件名含!符号的情况。
:
  1. @echo off
  2. for /f "delims=" %%i in ('dir/b/a-d *.prt') do (
  3.    set "str=%%i"
  4.    setlocal enabledelayedexpansion
  5.    set "str2=!str:*k=!"
  6.    set "str3=!str2:*_dft=!"
  7.    for %%a in (!str3!) do echo ren "!str!" "k!str2:%%a=!.prt"
  8.    endlocal
  9. )
  10. pause
复制代码

[ 本帖最后由 随风 于 2009-5-28 17:57 编辑 ]
技术问题请到论坛发帖求助!

TOP

难为版主了,显示找不到文件。
嘻嘻,太不好意思了。

原帖由 随风 于 2009-5-28 17:55 发表
看楼主的描述,19楼代码直接截取11位字符估计是不行的。
文件名都有且只有一个k和_dft,兼容文件名含!符号的情况。
echo off
for /f "delims=" %%i in ('dir/b/a-d *.prt') do (
   set "str=%%i"
   setloc ...

TOP

难为管理员了,我的要求就是要把前面的后面的去掉留下中间的,表达能力不足请管理员谅解呀。
还有就是也是提示找不到文件。

原帖由 namejm 于 2009-5-28 17:46 发表
  楼主的要求一变再变,很让人怀疑你在顶楼的描述是不是你真正的需求,并且在顶楼的描述仍然让人疑窦丛生:虽然你说文件名中有且只有一个k和一个_dft,但是,你并没有说明是不是所有的prt文件都有这两串字符;括号 ...

TOP

回复 21楼 的帖子

1、你把批处理放在什么地方执行的?
2、把@echo off删除,看看是哪个命令出错了。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

太感谢啦,成功啦!!!!!!!!!!!!!!!!!!!!!!!!!

原帖由 随风 于 2009-5-28 17:55 发表
看楼主的描述,19楼代码直接截取11位字符估计是不行的。
文件名都有且只有一个k和_dft,兼容文件名含!符号的情况。
echo off
for /f "delims=" %%i in ('dir/b/a-d *.prt') do (
   set "str=%%i"
   setloc ...

TOP

显示正确,也成功了,刚才调试用的文件扩展名不对,太谢谢你啦,添麻烦了。。。。。。

原帖由 namejm 于 2009-5-28 17:46 发表
  楼主的要求一变再变,很让人怀疑你在顶楼的描述是不是你真正的需求,并且在顶楼的描述仍然让人疑窦丛生:虽然你说文件名中有且只有一个k和一个_dft,但是,你并没有说明是不是所有的prt文件都有这两串字符;括号 ...

TOP

谢谢版主,我在K与dft间再加入字符也可以得到正确的文件名。厉害。。。。。。。



原帖由 随风 于 2009-5-28 17:55 发表
看楼主的描述,19楼代码直接截取11位字符估计是不行的。
文件名都有且只有一个k和_dft,兼容文件名含!符号的情况。
echo off
for /f "delims=" %%i in ('dir/b/a-d *.prt') do (
   set "str=%%i"
   setloc ...

TOP

返回列表