Board logo

标题: [文件操作] 批处理怎样批量在指定文件夹内添加前缀到全文件(代码修改)? [打印本页]

作者: comicguests    时间: 2011-8-23 11:47     标题: 批处理怎样批量在指定文件夹内添加前缀到全文件(代码修改)?

  1. set Choice=
  2. echo         请将要加前缀文件夹直接拖入本窗口:
  3. echo.
  4. set /p Choice=
  5. if ""%Choice%"" == "" goto 2
  6. set/p k=要添加的前缀为:
  7. if "%k%" == "ml" (goto ml)
  8. for /f "delims=" %%i in ('dir /s /b "%choice%"') do ren %%i  %k%%%i
复制代码
上面是代码的一部分,可以运行但文件夹内的文件名并没有改变...
还应该做什么修改吗?
作者: Hello123World    时间: 2011-8-23 13:30

  1. @echo off&SetLocal EnableDelayedExpansion
  2. Set /p str=请输入要添加的前缀:
  3. for /r %%i in (*.*) do ren "%%i" "%str%%%~nxi"
  4. pause>nul
复制代码

作者: zaixinxiangnian    时间: 2011-8-23 18:24

回复 2# Hello123World

Hello123World  你这个可以,但我在试的时候把全部文件名改了,想要去掉那个前缀怎么搞啊
作者: hfg1977    时间: 2011-8-23 18:32

回复 3# zaixinxiangnian
看你的问题真让人无语,
没点自学能力,没点吃苦精神就不要学bat.
作者: Hello123World    时间: 2011-8-23 18:54

回复 3# zaixinxiangnian


    我给你点提示,用set 来替换。(以后做实验不要用有用的文件做,创建些文件没用的文件……)
作者: zaixinxiangnian    时间: 2011-8-23 20:12

回复 5# Hello123World


    谢谢你的提醒,我已经想到用SET截取了

不过还有两个疑问
1.for /r 也可用delims  token  这些/F中的参数吗?
2.加了环境变量延迟。为什么后面的(%STR%)不用双感叹号括起来啊?
作者: comicguests    时间: 2011-8-23 20:15

回复 2# Hello123World
  1. @echo off&SetLocal EnableDelayedExpansion
  2. set Choice=
  3. echo 请将要加前缀文件夹直接拖入本窗口,然后回车:
  4. echo.
  5. set /p Choice=
  6. Set /p str=请输入要添加的前缀:
  7. for /r %%i in (*.*) do ren "%%i" "%str%%%~nxi"
  8. pause>nul
复制代码
我将代码改成了上面的样子,但它不能处理别的文件夹(其他分区)的文件,该怎么改呢?
作者: comicguests    时间: 2011-8-23 20:19

回复 3# zaixinxiangnian
  1. for /f "delims=" %%1 in ('dir /s /a /b') do (set wind=%%~nx1
  2. ren "%%~1" "!wind:你的前缀=!")
复制代码
这个也可以吧~~
作者: ArdentMan    时间: 2011-8-23 20:20

回复 7# comicguests
请问楼主你的Choice变量是设置来做什么用的,后面居然可以不用到
作者: comicguests    时间: 2011-8-23 20:45

回复 9# ArdentMan

???
那个不就是弹出批处理窗口后,需要你将要处理的文件夹拖入的意思吗?
作者: zaixinxiangnian    时间: 2011-8-23 22:33

回复 8# comicguests


    你这个试了不行啊
作者: zaixinxiangnian    时间: 2011-8-23 22:39

回复 5# Hello123World


    小弟不才,,,,,写了好久也没有成功,,,写到这里下面怎么试都不行,,,,请指教
  1. @echo off&SetLocal EnableDelayedExpansion
  2. for /r %%i in (*.*) do set val=%%~nxi&echo !val!
  3. pause>nul
复制代码

作者: zaixinxiangnian    时间: 2011-8-27 13:49

回复 2# Hello123World

Hello123World  看到了再帮忙写下吧,,,批量把前缀去掉,真的想了也写了试了都没有成功?
作者: Hello123World    时间: 2011-8-27 15:16

回复 13# zaixinxiangnian
  1. @echo off&SetLocal EnableDelayedExpansion
  2. Set /p str=请输入要去除的前缀:
  3. for /r %%i in (*.*) do (
  4. Set nstr="%%~ni"
  5. Set nstr=!nstr:%str%=!
  6. ren "%%i" "!nstr!%%~xi"
  7. )
  8. pause>nul
复制代码
还是先学点基础知识吧,水到渠成!
作者: zaixinxiangnian    时间: 2011-8-27 16:22

回复 14# Hello123World


    谢谢,谨听你的建议(为这个问题卡住了 试了好久都不行。是FOR的嵌套还不会用吧?)

你那个好像 文件名有空格的就不能处理了
作者: Hello123World    时间: 2011-8-27 17:41

回复 15# zaixinxiangnian
  1.     @echo off&SetLocal EnableDelayedExpansion
  2. Set /p str=请输入要去除的前缀:
  3. for /r %%i in (*.*) do (
  4. Set nstr="%%~ni"
  5. Set nstr="!nstr:%str%=!"
  6. ren "%%i" "!nstr!%%~xi"
  7. )
  8. pause>nul
复制代码
"!nstr:%str%=!"
这里加引号既可以了。




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