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

[文件操作] 批处理如何用以相对路径列出当前目录的文件列表?

初学脚本编程真有点摸不着,想用批处理列出当前目录及子目录下的文件,但要求是以相对路径显示(因为我是用来拼成一些拷贝路径),例如当前目录是E:\MY_TEST\BAT,那么
E:\MY_TEST\BAT\abc.txt
E:\MY_TEST\BAT\abc\cde.bin
将显示为
abc.txt
abc\cde.bin

网上看了些例子都是显示绝对路径的,如下面例子就吃不消:
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "delims=" %%i in ('"dir /a/s/b/on *.*"') do (
  3. set file=%%~fi
  4. set 不要这行file=!file:%cd%\=!
  5. set file=!file:\=/!
  6. echo !file! >> 内容.txt
  7. )
复制代码
不知道如何以相对路径显示?!
谢谢!

  1. @echo off &  setlocal ENABLEDELAYEDEXPANSION
  2. for /f "TOKENS=*" %%a in ('dir /s/b') do set n=%%a&echo,!n:%cd%=!
  3. pause
复制代码

TOP

回复 2# yangfengoo


    不对,"\123.txt"是被理解为根目录下的123.txt

相对路径用的是正斜杠,应该是“/123.txt”

你还应该做一个斜杠替换

TOP

不胜感激!不过还是怪我不才,想继续问下:echo,!n:%cd%=!  看不懂,我怎么把显示的部分取出来,或保存但一个变量中,方便我后面拼成一个拷贝路径,比如把\abc.txt  拼成 \XXX\abc.txt  \YYY\ZZZ\abc.txt
再次感谢yangfengoo !

TOP

哦, 那刚才的例子也可以改出来:
set strprx1=/SD/
set strprx2=/NANDFLASH/ST/

@echo off & setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('"dir /a/s/b/on *.*"') do (
set file=%%~fi
set file=!file:%cd%\=!
::set file=!file:\=/!
echo %strprx1%!file! %strprx2%!file!
)

但是我不懂set file=!file:%cd%\=! 这句怎么看!请大人指点!

TOP

回复  yangfengoo


    不对,"\123.txt"是被理解为根目录下的123.txt

相对路径用的是正斜杠,应该 ...
poter 发表于 2012-7-28 20:53


有真有这点差别?!请问怎么换成正斜杠?

TOP

有点明白了,把 set file=!file:\=/! 这句加上可以转换正反斜杠。
%cd%表示当前路径,附空值就等于去掉,同样\=/就把反斜杠改成正斜杠。

TOP

还有点问题再请大家帮忙一下,上面的列举把目录也列出来了,怎么判断是目录还是文件啊?!

TOP

找到个链接:http://www.bathome.net/thread-1047-1-1.html
问题解决了,谢谢大家!这个论坛真好,以后会常来!

TOP

返回列表