找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 32088|回复: 10

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

[复制链接]
发表于 2012-6-24 10:59:12 | 显示全部楼层 |阅读模式
我的目的是:遍历桌面上的所有*.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仅为文件名,而不包括路径名?
 楼主| 发表于 2012-6-24 11:02:46 | 显示全部楼层
补充:
我知道用CD命令修改当前路径,能实现上面的目的:
  1. CD /D %USERPROFILE%\Desktop\
  2. FOR %%A in (*.doc) DO IF NOT EXIST "E:\%%A" COPY "%%A" E:\
复制代码
但我不希望修改当前路径,因为会导致其它相关联的批处理文件,出现问题。
发表于 2012-6-24 11:18:38 | 显示全部楼层
试试dir

  1. FOR /F %%A in ('dir /a-d /b %USERPROFILE%\Desktop\*.doc') DO IF NOT EXIST "E:\%%A" COPY "%%A" E:\
复制代码
发表于 2012-6-24 11:52:55 | 显示全部楼层
看看这个符不符合你要求:
  1. FOR /R "%USERPROFILE%\desktop" %%A in (*.doc) DO IF NOT EXIST "E:\%%~nxA" COPY "%%A" E:\
复制代码
发表于 2012-6-24 18:43:28 | 显示全部楼层
回复 3# cb02356828


    不对吧,%%A里面只包含文件名,copy的时候是找不到文件的。
发表于 2012-6-24 18:45:37 | 显示全部楼层
回复 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:\
复制代码
发表于 2012-6-24 19:51:37 | 显示全部楼层
回复 6# forfiles
直接在桌面上运行
发表于 2012-6-24 20:08:36 | 显示全部楼层
回复 7# cb02356828


    这个可能是楼主不希望的
发表于 2012-6-25 10:48:38 | 显示全部楼层
回复  cb02356828


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



    copy的时候再用for
发表于 2012-6-25 11:17:57 | 显示全部楼层
回复 9# lky216


    看不懂你在说什么
发表于 2012-6-25 11:55:37 | 显示全部楼层
回复 10# forfiles


    copy的时候是找不到文件的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:08 , Processed in 0.020279 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表