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

[文件操作] 批处理如何把两级目录名命名给最里面的文件?

问题描述:C文件夹里有A001文件夹  A002文件夹  A003文件夹……。A001文件夹里又有B001文件夹  B002文件夹  B003文件夹 依此类推, B001文件夹里有jpg文件,现在要把jpg文件所在的上两级文件夹的名字加在一起放在jpg文件原有名字的前面。举例说明 下:A001里面有B001文件夹和B002文件夹,B001文件夹里有图片名为:我的图片.jpg,则要达到的结果为:A001B001我的图片.jpg ,B002中的图片名为:我的图片。jpg 则应该命名为:A001B002我的图片.jpg ………如何写代码。谢谢。

位置:放于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
复制代码

TOP

回复 2# amwfjhh


     4、5行交换位置,呵呵

TOP

回复 3# apang


    高,表现一样,效率不一样……

TOP

回复 4# amwfjhh


    不是,有前辈做总结了:
http://www.bathome.net/viewthread.php?tid=4580

TOP

那篇讨论我也拜读过。很有收获,这里也有其影子,只是在细节上还没有很在意,想着几条处理变量的放到一起好看些,但这里确实初始时放在延时外要好些。

TOP

回复 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
复制代码

TOP

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

TOP

个人爱好:
  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
复制代码

TOP

返回列表