Board logo

标题: [文件操作] 【已解决】请教如何在循环中仅截取文件名的操作 [打印本页]

作者: slovent    时间: 2010-2-5 21:13     标题: 【已解决】请教如何在循环中仅截取文件名的操作

各位老师,一周几问,学生实在感到抱歉,目前跟namejm老师学写for命令的时候遇到了一个问题。

我想写一个自动从移动存储设备中取照片的批处理(差着老大一截),想最先实现的功能是自动按文件日期生成文件夹,然后把对应时间拍照的照片copy到相应日期为目录的文件夹中。

这个简单的功能基本已经实现,但是,因为照片的体积越来越大,为了节约拷贝时间,想先判断文件是否存在在目标路径,如果存在则不在copy。但是我用 “for /r "%SrcDir%" %%a in (*.jpg) do ”命令时,取到的%%a是带有源路径的文件名,请问,这个能用截取的方式仅仅取到完整的文件名吗?
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set SrcDir=G:\新建文件夹
  4. set TagDir=G:\Photos
  5. for /r "%SrcDir%" %%a in (*.jpg) do (
  6. set t=%%~ta
  7. echo if not exist %TagDir%\"!t:~0,4!!t:~5,2!!t:~8,2!" md %TagDir%\!t:~0,4!!t:~5,2!!t:~8,2!
  8. REM 问题出在下面这句,%%a取的是完整路径加文件名,如何让%%a只取文件名呢:(
  9. echo if not exist %TagDir%\"%%a" copy "%%a" %TagDir%\!t:~0,4!!t:~5,2!!t:~8,2!
  10. )
  11. pause
复制代码
【】

[ 本帖最后由 slovent 于 2010-2-5 22:02 编辑 ]
作者: jcy0307    时间: 2010-2-5 21:46

http://bathome.l3.wuyou.com/thread-6998-1-1.html
楼主可以参考问题
看3楼的答案 再结合到自己的批中
作者: slovent    时间: 2010-2-5 22:02

jcy0307老师,强,解决了。。。
请问,类似%%~nxa,%%~dpi,echo %%~nxi这样的参数有专门介绍的帖子吗?

更新代码如下,仅仅改动了一个小小的地方。。。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set SrcDir=G:\
  4. set TagDir=G:\Photos
  5. for /r "%SrcDir%" %%a in (*.jpg) do (
  6. set t=%%~ta
  7. if not exist %TagDir%\"!t:~0,4!!t:~5,2!!t:~8,2!" md %TagDir%\!t:~0,4!!t:~5,2!!t:~8,2!
  8. REM 问题出在下面这句,%%a取的是完整路径加文件名,如何让%%a只取文件名呢:(
  9. if not exist %TagDir%\"!t:~0,4!!t:~5,2!!t:~8,2!"\%%~nxa copy "%%a" %TagDir%\!t:~0,4!!t:~5,2!!t:~8,2!
  10. )
复制代码

作者: jcy0307    时间: 2010-2-6 12:50

namejm 的教程中有解释
另外也可以通过for/?查看
http://bathome.l3.wuyou.com/thread-2189-1-1.html




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