标题: [文件操作] 批处理如何用以相对路径列出当前目录的文件列表? [打印本页]
作者: sivenyu 时间: 2012-7-28 12:59 标题: 批处理如何用以相对路径列出当前目录的文件列表?
初学脚本编程真有点摸不着,想用批处理列出当前目录及子目录下的文件,但要求是以相对路径显示(因为我是用来拼成一些拷贝路径),例如当前目录是E:\MY_TEST\BAT,那么
E:\MY_TEST\BAT\abc.txt
E:\MY_TEST\BAT\abc\cde.bin
将显示为
abc.txt
abc\cde.bin
网上看了些例子都是显示绝对路径的,如下面例子就吃不消:- @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 !file! >> 内容.txt
- )
复制代码
不知道如何以相对路径显示?!
谢谢!
作者: yangfengoo 时间: 2012-7-28 20:04
- @echo off & setlocal ENABLEDELAYEDEXPANSION
- for /f "TOKENS=*" %%a in ('dir /s/b') do set n=%%a&echo,!n:%cd%=!
- pause
复制代码
作者: poter 时间: 2012-7-28 20:53
回复 2# yangfengoo
不对,"\123.txt"是被理解为根目录下的123.txt
相对路径用的是正斜杠,应该是“/123.txt”
你还应该做一个斜杠替换
作者: sivenyu 时间: 2012-7-28 21:07
不胜感激!不过还是怪我不才,想继续问下:echo,!n:%cd%=! 看不懂,我怎么把显示的部分取出来,或保存但一个变量中,方便我后面拼成一个拷贝路径,比如把\abc.txt 拼成 \XXX\abc.txt \YYY\ZZZ\abc.txt
再次感谢yangfengoo !
作者: sivenyu 时间: 2012-7-28 21:15
哦, 那刚才的例子也可以改出来:
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%\=! 这句怎么看!请大人指点!
作者: sivenyu 时间: 2012-7-28 21:17
回复 yangfengoo
不对,"\123.txt"是被理解为根目录下的123.txt
相对路径用的是正斜杠,应该 ...
poter 发表于 2012-7-28 20:53
有真有这点差别?!请问怎么换成正斜杠?
作者: sivenyu 时间: 2012-7-29 09:36
有点明白了,把 set file=!file:\=/! 这句加上可以转换正反斜杠。
%cd%表示当前路径,附空值就等于去掉,同样\=/就把反斜杠改成正斜杠。
作者: sivenyu 时间: 2012-7-29 09:42
还有点问题再请大家帮忙一下,上面的列举把目录也列出来了,怎么判断是目录还是文件啊?!
作者: sivenyu 时间: 2012-7-29 09:55
找到个链接:http://www.bathome.net/thread-1047-1-1.html
问题解决了,谢谢大家!这个论坛真好,以后会常来!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |