标题: [文件操作] 批处理如何批量给文件名添加指定前缀字符串? [打印本页]
作者: licai007 时间: 2008-7-6 15:53 标题: 批处理如何批量给文件名添加指定前缀字符串?
本帖最后由 pcl_test 于 2016-7-10 23:38 编辑
求助一个批处理!请各位高手帮帮忙啊,急需一个修改文件名的批处理程序。
问题如下: 比如说名为0503的文件夹里有100张图片,想把每个图片名前都加上前缀0503,比如图片原名:SSM1900.JPG,改为:0503SSM1900.JPG。
这个批处理怎么写? 先谢谢各位了!!!!
[ 本帖最后由 licai007 于 2008-7-6 15:55 编辑 ]
作者: 随风 时间: 2008-7-6 18:30
下次注意不要一帖多发,并请仔细阅读发帖规则。
http://bathome.net/viewthread.php?tid=963&extra=page%3D1- @echo off
- for /f "delims=" %%a in ('dir/b "0503\*.jpg"') do (
- ren "0503\%%~nxa" "0503%%~nxa"
- )
- pause
复制代码
作者: batman 时间: 2008-7-7 09:51
按道理0503不应出现在批处理代码中,文件夹名可以随时获得,如下:- @echo off
- rem 获取当前文件夹名
- set str=%~p0
- set str=%str:~,-1%&call :lp
- rem 更名
- for /f "delims=" %%i in ('dir /a-d /b *.jpg') do ren "%%i" %var%%%i
- echo 搞定!&pause>nul&goto :eof
- :lp
- if "%str:~-1%" equ "\" goto :eof
- set a=%str:~-1%
- set var=%a%%var%&set str=%str:~,-1%&goto lp
复制代码
作者: licai007 时间: 2008-7-7 19:07 标题: 回复 2楼 的帖子
发帖规则看过了,以后注意的,谢谢
作者: licai007 时间: 2008-7-7 19:12 标题: 回复 3楼 的帖子
辛苦了,谢谢你。
可以再问一个问题吗? 就是如果我的D盘里有10个文件夹,每个文件夹里的文件都需要改名(都是文件名前加上所在文件夹的名字,跟上面一样),然后把文件移出到上一级,把文件夹删除,可以在一个程序里完成吗? 怎么写呢?
[ 本帖最后由 licai007 于 2008-7-7 19:25 编辑 ]
作者: batman 时间: 2008-7-8 15:12
请在测试成功后将最后两个echo去掉再运行就可以了,请慎用之(最好先做好充足的备份)- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /s /ad /b d:') do (
- for /f "delims=" %%i in ('dir /s /b "%%a\*.*"') do (
- set str=%%a&set str=!str:\= !
- for %%i in (!str!) do set name=%%i
- echo move /y "%%i" d:\!name!-%%~nxi
- echo rd /s /q "%%a"
- )
- )
- pause
复制代码
[ 本帖最后由 zw19750516 于 2008-7-8 15:15 编辑 ]
作者: 随风 时间: 2008-7-8 15:45
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文件夹?
作者: batman 时间: 2008-7-8 17:23
原帖由 随风 于 2008-7-8 15:45 发表
5楼的问题没有说清楚,
10个文件夹里面有子文件夹吗?
如果没有,那就是把所有文件都改名后,再移至根目录。
如果有、那问题就复杂了,zw兄的代码也会有问题。
举例:
d:\a\b\c\123.txt
将123.txt改名为c123.t ...
我的代码就是针对根目录下的文件夹写的,如有子文件夹,也只会将文件重命名并移到根目录
作者: 随风 时间: 2008-7-8 18:23
原帖由 zw19750516 于 2008-7-8 17:23 发表
我的代码就是针对根目录下的文件夹写的,如有子文件夹,也只会将文件重命名并移到根目录
还是以d:\a\b\c\123.txt为例
你的代码会出现这样的情况
当把b文件夹里的文件移至根目录后,就删除b文件夹及子文件夹,那么同时把c文件夹和里面的文件也都删除了。
再移动c文件夹里的文件时。就会找不到文件。
解决办法是:给第一个for加一个sort /r 倒排序应该就可以了。
未测试。。。
- @echo off
- for /f "delims=" %%a in ('dir /s /ad /b d:^|sort /r') do (
- for /f "delims=" %%i in ('dir /b/s "%%a\*.*"') do move "%%i" "d:\%%~na-%%~nxi"
- rd /s /q "%%a"
- )
- pause
复制代码
[ 本帖最后由 随风 于 2008-7-8 19:01 编辑 ]
作者: licai007 时间: 2008-7-8 19:09 标题: 回复 6楼 的帖子
辛苦了,谢谢你。 我去运行下试试:)
作者: licai007 时间: 2008-7-8 19:40 标题: 回复 7楼 的帖子
我可能没有说清楚,文件夹里是没有子文件夹的。我刚学批处理,你们的程序我都要好好学习研究下:)
作者: batman 时间: 2008-7-8 20:25
如有子文件夹,则修改如下,应该不会有问题了:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /s /ad /b d:') do (
- for /f "delims=" %%i in ('dir /s /b "%%a\*.*"') do (
- set str=%%a&set str=!str:\= !
- for %%i in (!str!) do set name=%%i
- move /y "%%i" d:\!name!-%%~nxi
- )
- )
- for /f "delims=" %%i in ('dir /s /ad /b d:') do rd /s /q "%%i"
- pause
复制代码
作者: fastslz 时间: 2008-7-8 22:41
for /f "delims=" %%i in ('dir /s /ad /b d:') do rd /s /q "%%i"
最好用echo rd /s /q "%%i",标注下,以免不懂批处理的新手看了,复制该代码运行后删除D盘下所有文件夹,避免不必要的代码风险
作者: fastslz 时间: 2008-7-10 13:50
这个代码是没风险的,代码也比较稳定- @md "D:\test 1" 2>nul
- @md "D:\test 2" 2>nul
- @md "D:\test.tmp" 2>nul
- @md "D:\test 2\test" 2>nul
- echo.>"D:\test 1\a.jpg"
- echo.>"D:\test 2\b.jpg"
- echo.>"D:\test 2\test\c.jpg"
- echo.>"D:\test.tmp\d.jpg"
- echo.>e.jpg
- @echo 测试文件已准备
- @pause
-
-
- @echo off
- set Soigne=整理过的JPG
- md %Soigne% 2>nul
- for /f "delims=" %%a in ('dir /s/a-d/b D:\*.jpg^|sort/r^|find /v /i "%Soigne%"') do call :xxx "%%a"
- pause
- :xxx
- set "FolderPath=%~dp1"
- for /f "delims=" %%i in ("%FolderPath:~0,-1%.tmp") do set "FormatFolderPath=%%~ni"
- move /y "%~1" "%Soigne%\%FormatFolderPath%%~nx1"
- if not exist "%FolderPath%*.jpg" if not "%FolderPath:~3%"=="" echo 将要删除 rd /q /s "%FolderPath%"
复制代码
代码在下列目录结构下会存在BUG- @md "D:\test" 2>nul
- @md "D:\test\test" 2>nul
- echo.>"D:\test\test\c.jpg"
- echo.>"D:\test\c.jpg"
- @echo 测试文件已准备
- @pause
-
- ......
复制代码
作者: 172043209 时间: 2017-6-9 17:01
如果希望将文件夹的名字加在文件名的后面,修改什么地方?如当前目录下cwr\123.jpg,
改为C\123 cwr.jpg....
尝试修改了一下,变成了Cwr\123.jpgcwr....
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |