标题: [文件操作] 批处理如何把两级目录名命名给最里面的文件? [打印本页]
作者: kmustwxw 时间: 2014-12-2 14:52 标题: 批处理如何把两级目录名命名给最里面的文件?
问题描述:C文件夹里有A001文件夹 A002文件夹 A003文件夹……。A001文件夹里又有B001文件夹 B002文件夹 B003文件夹 依此类推, B001文件夹里有jpg文件,现在要把jpg文件所在的上两级文件夹的名字加在一起放在jpg文件原有名字的前面。举例说明 下:A001里面有B001文件夹和B002文件夹,B001文件夹里有图片名为:我的图片.jpg,则要达到的结果为:A001B001我的图片.jpg ,B002中的图片名为:我的图片。jpg 则应该命名为:A001B002我的图片.jpg ………如何写代码。谢谢。
作者: amwfjhh 时间: 2014-12-2 23:43
位置:放于C文件夹- @echo off
-
- for /f "tokens=*" %%i in ('dir /b/s/a-d *.jpg') do (
- setlocal enabledelayedexpansion
- set "strPic=%%~dpnxi"
- set "strPic=!strPic:%cd%=!"
- set "strPic=!strPic:\=!"
- echo !strPic!
- endlocal
- )
-
- pause&goto :EOF
复制代码
作者: apang 时间: 2014-12-3 00:09
回复 2# amwfjhh
4、5行交换位置,呵呵
作者: amwfjhh 时间: 2014-12-3 00:12
回复 3# apang
高,表现一样,效率不一样……
作者: apang 时间: 2014-12-3 00:26
回复 4# amwfjhh
不是,有前辈做总结了:
http://www.bathome.net/viewthread.php?tid=4580
作者: amwfjhh 时间: 2014-12-3 00:38
那篇讨论我也拜读过。很有收获,这里也有其影子,只是在细节上还没有很在意,想着几条处理变量的放到一起好看些,但这里确实初始时放在延时外要好些。
作者: kmustwxw 时间: 2014-12-3 08:59
回复 2# amwfjhh 谢谢你,写的运行效率很高,我要是想得到B级目录或是A级目录的目录名的部分字符加在图片名字的前面就不可以了,有没有别的可以提取目录名字的部分字符的代码。谢谢。我写了一段效率太低了。- @echo off&setlocal enabledelayedexpansion
-
- for /d %%i in (*) do (
- set name1=%%~ni
- pushd %%i
- for /d %%j in (*) do (
- set name2=%%~nj
- pushd %%j
- if exist 我的*.jpg (
- For /F "Delims=" %%k In ('Dir /A:-D /S /B
-
- *.jpg') do (
- set name3=%%~nk
- ren "%%k" "!name1!!name2:~0,4!!name3!%
-
- %~xk"
- Copy "!name1!!name2:~0,4!!name3!%%~xk" "C:\
-
- 目标文件夹\"
- )
- )
- popd
- )
- popd
- )
- pause
复制代码
作者: amwfjhh 时间: 2014-12-3 09:47
同理可得。在取得相对于当前目录的相对路径原理基础上,对于图片所在的上级目录或上上级目录都可以进行处理。好好利用FOR变量的那几个扩展,再利用set进行字符截取就可以了。
作者: CrLf 时间: 2014-12-3 17:49
个人爱好:- @echo off
- for /f "tokens=*" %%i in ('dir /b/s/a-d *.jpg') do (
- for %%j in (%%~dpi..\..) do echo %%~nxj%%~nxi
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |