Board logo

标题: [文件操作] 批处理如何把两级目录名命名给最里面的文件? [打印本页]

作者: 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文件夹
  1. @echo off
  2. for /f "tokens=*" %%i in ('dir /b/s/a-d *.jpg') do (
  3. setlocal enabledelayedexpansion
  4. set "strPic=%%~dpnxi"
  5. set "strPic=!strPic:%cd%=!"
  6. set "strPic=!strPic:\=!"
  7. echo !strPic!
  8. endlocal
  9. )
  10. 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级目录的目录名的部分字符加在图片名字的前面就不可以了,有没有别的可以提取目录名字的部分字符的代码。谢谢。我写了一段效率太低了。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /d %%i in (*) do (
  3.       set name1=%%~ni
  4.    pushd %%i
  5.    for /d %%j in (*) do (
  6.       set name2=%%~nj
  7.    pushd %%j
  8.    if exist 我的*.jpg (
  9.     For /F "Delims=" %%k In ('Dir /A:-D /S /B
  10. *.jpg') do (     
  11.      set name3=%%~nk
  12.     ren "%%k" "!name1!!name2:~0,4!!name3!%
  13. %~xk"
  14.   Copy "!name1!!name2:~0,4!!name3!%%~xk" "C:\
  15. 目标文件夹\"
  16. )
  17.      )
  18. popd
  19.    )
  20. popd
  21. )
  22. pause
复制代码

作者: amwfjhh    时间: 2014-12-3 09:47

同理可得。在取得相对于当前目录的相对路径原理基础上,对于图片所在的上级目录或上上级目录都可以进行处理。好好利用FOR变量的那几个扩展,再利用set进行字符截取就可以了。
作者: CrLf    时间: 2014-12-3 17:49

个人爱好:
  1. @echo off
  2. for /f "tokens=*" %%i in ('dir /b/s/a-d *.jpg') do (
  3. for %%j in (%%~dpi..\..) do echo %%~nxj%%~nxi
  4. )
  5. pause
复制代码





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