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

[其他] 如何让批处理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仅为文件名,而不包括路径名?

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

TOP

试试dir
  1. FOR /F %%A in ('dir /a-d /b %USERPROFILE%\Desktop\*.doc') DO IF NOT EXIST "E:\%%A" COPY "%%A" E:\
复制代码
兴趣是最好的老师。

TOP

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

TOP

回复 3# cb02356828


    不对吧,%%A里面只包含文件名,copy的时候是找不到文件的。

TOP

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

TOP

回复 6# forfiles
直接在桌面上运行
兴趣是最好的老师。

TOP

回复 7# cb02356828


    这个可能是楼主不希望的

TOP

回复  cb02356828


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



    copy的时候再用for

TOP

回复 9# lky216


    看不懂你在说什么

TOP

回复 10# forfiles


    copy的时候是找不到文件的

TOP

返回列表