Board logo

标题: [其他] 如何让批处理for命令中的变量为文件名而不包括路径? [打印本页]

作者: mebanna    时间: 2012-6-24 10:59     标题: 如何让批处理for命令中的变量为文件名而不包括路径?

我的目的是:遍历桌面上的所有*.doc文件,如果E:\ 目录下不存在同名文件,则将之从桌面拷贝至E:\ 目录下。
为此我写了批处理,内容如下:
  1. FOR /R %USERPROFILE%\Desktop\ %%A in (*.doc) DO IF NOT EXIST "E:\%%A" COPY "%USERPROFILE%\Desktop\%%A" E:\
复制代码
可运行后发现,【%%A】实际值为【%USERPROFILE%\Desktop\*.doc】,而不是我所希望的【*.doc】,即,仅有文件名而不包括路径名。

请问如何实现%%A仅为文件名,而不包括路径名?
作者: mebanna    时间: 2012-6-24 11:02

补充:
我知道用CD命令修改当前路径,能实现上面的目的:
  1. CD /D %USERPROFILE%\Desktop\
  2. FOR %%A in (*.doc) DO IF NOT EXIST "E:\%%A" COPY "%%A" E:\
复制代码
但我不希望修改当前路径,因为会导致其它相关联的批处理文件,出现问题。
作者: cb02356828    时间: 2012-6-24 11:18

试试dir
  1. FOR /F %%A in ('dir /a-d /b %USERPROFILE%\Desktop\*.doc') DO IF NOT EXIST "E:\%%A" COPY "%%A" E:\
复制代码

作者: a7701    时间: 2012-6-24 11:52

看看这个符不符合你要求:
  1. FOR /R "%USERPROFILE%\desktop\" %%A in (*.doc) DO IF NOT EXIST "E:\%%~nxA" COPY "%%A" E:\
复制代码

作者: forfiles    时间: 2012-6-24 18:43

回复 3# cb02356828


    不对吧,%%A里面只包含文件名,copy的时候是找不到文件的。
作者: forfiles    时间: 2012-6-24 18:45

回复 3# cb02356828
  1. for /f "delims=" %%a in ('dir /a-d /b "%userprofile%\desktop\*.doc"') do if not exist "e:\%%a" copy "%%~fa" e:\
复制代码
  1. for /f "delims=" %%a in ('dir /a-d /b /s "%userprofile%\desktop\*.doc"') do if not exist "e:\%%~nxa" copy "%%a" e:\
复制代码

作者: cb02356828    时间: 2012-6-24 19:51

回复 6# forfiles
直接在桌面上运行
作者: forfiles    时间: 2012-6-24 20:08

回复 7# cb02356828


    这个可能是楼主不希望的
作者: lky216    时间: 2012-6-25 10:48

回复  cb02356828


    不对吧,%%A里面只包含文件名,copy的时候是找不到文件的。
forfiles 发表于 2012-6-24 18:43



    copy的时候再用for
作者: forfiles    时间: 2012-6-25 11:17

回复 9# lky216


    看不懂你在说什么
作者: lky216    时间: 2012-6-25 11:55

回复 10# forfiles


    copy的时候是找不到文件的




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