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

[文件操作] 批处理如何批量给文件名添加指定前缀字符串?

本帖最后由 pcl_test 于 2016-7-10 23:38 编辑

求助一个批处理!请各位高手帮帮忙啊,急需一个修改文件名的批处理程序。
问题如下:  比如说名为0503的文件夹里有100张图片,想把每个图片名前都加上前缀0503,比如图片原名:SSM1900.JPG,改为:0503SSM1900.JPG。
这个批处理怎么写? 先谢谢各位了!!!!

[ 本帖最后由 licai007 于 2008-7-6 15:55 编辑 ]

如果希望将文件夹的名字加在文件名的后面,修改什么地方?如当前目录下cwr\123.jpg,
改为C\123 cwr.jpg....
尝试修改了一下,变成了Cwr\123.jpgcwr....

TOP

这个代码是没风险的,代码也比较稳定
  1. @md "D:\test 1" 2>nul
  2. @md "D:\test 2" 2>nul
  3. @md "D:\test.tmp" 2>nul
  4. @md "D:\test 2\test" 2>nul
  5. echo.>"D:\test 1\a.jpg"
  6. echo.>"D:\test 2\b.jpg"
  7. echo.>"D:\test 2\test\c.jpg"
  8. echo.>"D:\test.tmp\d.jpg"
  9. echo.>e.jpg
  10. @echo 测试文件已准备
  11. @pause
  12. @echo off
  13. set Soigne=整理过的JPG
  14. md %Soigne% 2>nul
  15. for /f "delims=" %%a in ('dir /s/a-d/b D:\*.jpg^|sort/r^|find /v /i "%Soigne%"') do call :xxx "%%a"
  16. pause
  17. :xxx
  18. set "FolderPath=%~dp1"
  19. for /f "delims=" %%i in ("%FolderPath:~0,-1%.tmp") do set "FormatFolderPath=%%~ni"
  20. move /y "%~1" "%Soigne%\%FormatFolderPath%%~nx1"
  21. if not exist "%FolderPath%*.jpg" if not "%FolderPath:~3%"=="" echo 将要删除 rd /q /s "%FolderPath%"
复制代码
代码在下列目录结构下会存在BUG
  1. @md "D:\test" 2>nul
  2. @md "D:\test\test" 2>nul
  3. echo.>"D:\test\test\c.jpg"
  4. echo.>"D:\test\c.jpg"
  5. @echo 测试文件已准备
  6. @pause
  7. ......
复制代码

TOP

for /f "delims=" %%i in ('dir /s /ad /b d:') do rd /s /q "%%i"
最好用echo rd /s /q "%%i",标注下,以免不懂批处理的新手看了,复制该代码运行后删除D盘下所有文件夹,避免不必要的代码风险

TOP

如有子文件夹,则修改如下,应该不会有问题了:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /s /ad /b d:') do (
  3.     for /f "delims=" %%i in ('dir /s /b "%%a\*.*"') do (
  4.         set str=%%a&set str=!str:\= !
  5.         for %%i in (!str!) do set name=%%i
  6.         move /y "%%i" d:\!name!-%%~nxi
  7.      )     
  8. )
  9. for /f "delims=" %%i in ('dir /s /ad /b d:') do rd /s /q "%%i"
  10. pause
复制代码
***共同提高***

TOP

回复 7楼 的帖子

我可能没有说清楚,文件夹里是没有子文件夹的。我刚学批处理,你们的程序我都要好好学习研究下:)

TOP

回复 6楼 的帖子

辛苦了,谢谢你。 我去运行下试试:)

TOP

原帖由 zw19750516 于 2008-7-8 17:23 发表

我的代码就是针对根目录下的文件夹写的,如有子文件夹,也只会将文件重命名并移到根目录

还是以d:\a\b\c\123.txt为例
你的代码会出现这样的情况
当把b文件夹里的文件移至根目录后,就删除b文件夹及子文件夹,那么同时把c文件夹和里面的文件也都删除了。
再移动c文件夹里的文件时。就会找不到文件。
解决办法是:给第一个for加一个sort /r 倒排序应该就可以了。
未测试。。。
  1. @echo off
  2. for /f "delims=" %%a in ('dir /s /ad /b d:^|sort /r') do (
  3.    for /f "delims=" %%i in ('dir /b/s "%%a\*.*"') do move "%%i" "d:\%%~na-%%~nxi"
  4.     rd /s /q "%%a"
  5. )
  6. pause
复制代码

[ 本帖最后由 随风 于 2008-7-8 19:01 编辑 ]
技术问题请到论坛发帖求助!

TOP

原帖由 随风 于 2008-7-8 15:45 发表
5楼的问题没有说清楚,
10个文件夹里面有子文件夹吗?
如果没有,那就是把所有文件都改名后,再移至根目录。
如果有、那问题就复杂了,zw兄的代码也会有问题。
举例:
d:\a\b\c\123.txt
将123.txt改名为c123.t ...

我的代码就是针对根目录下的文件夹写的,如有子文件夹,也只会将文件重命名并移到根目录
***共同提高***

TOP

5楼的问题没有说清楚,
10个文件夹里面有子文件夹吗?
如果没有,那就是把所有文件都改名后,再移至根目录。
如果有、那问题就复杂了,zw兄的代码也会有问题。
举例:
d:\a\b\c\123.txt
将123.txt改名为c123.txt再移至b文件夹,即:d:\a\b\c123.txt并删除c文件夹
那么岂不是还要再把c123.txt又改名为bc123.txt并移至a文件夹?再删除b文件夹?
技术问题请到论坛发帖求助!

TOP

请在测试成功后将最后两个echo去掉再运行就可以了,请慎用之(最好先做好充足的备份)
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /s /ad /b d:') do (
  3.     for /f "delims=" %%i in ('dir /s /b "%%a\*.*"') do (
  4.         set str=%%a&set str=!str:\= !
  5.         for %%i in (!str!) do set name=%%i
  6.         echo move /y "%%i" d:\!name!-%%~nxi
  7.         echo rd /s /q "%%a"
  8.     )     
  9. )
  10. pause
复制代码

[ 本帖最后由 zw19750516 于 2008-7-8 15:15 编辑 ]
***共同提高***

TOP

回复 3楼 的帖子

辛苦了,谢谢你。
可以再问一个问题吗? 就是如果我的D盘里有10个文件夹,每个文件夹里的文件都需要改名(都是文件名前加上所在文件夹的名字,跟上面一样),然后把文件移出到上一级,把文件夹删除,可以在一个程序里完成吗? 怎么写呢?

[ 本帖最后由 licai007 于 2008-7-7 19:25 编辑 ]

TOP

回复 2楼 的帖子

发帖规则看过了,以后注意的,谢谢

TOP

按道理0503不应出现在批处理代码中,文件夹名可以随时获得,如下:
  1. @echo off
  2. rem 获取当前文件夹名
  3. set str=%~p0
  4. set str=%str:~,-1%&call :lp
  5. rem 更名
  6. for /f "delims=" %%i in ('dir /a-d /b *.jpg') do ren "%%i" %var%%%i
  7. echo 搞定!&pause>nul&goto :eof
  8. :lp
  9. if "%str:~-1%" equ "\" goto :eof
  10. set a=%str:~-1%
  11. set var=%a%%var%&set str=%str:~,-1%&goto lp
复制代码
***共同提高***

TOP

下次注意不要一帖多发,并请仔细阅读发帖规则。
http://bathome.net/viewthread.php?tid=963&extra=page%3D1
  1. @echo off
  2. for /f "delims=" %%a in ('dir/b "0503\*.jpg"') do (
  3.    ren "0503\%%~nxa" "0503%%~nxa"
  4. )
  5. pause
复制代码
技术问题请到论坛发帖求助!

TOP

返回列表