中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 获取当前目录下所有文件的相对路径
作者:
标题: 获取当前目录下所有文件的相对路径 上一主题 | 下一主题
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『楼 主』:  输出本目录下的所有文件

请问:
如何输出本目录下所有文件的相对路径?
c:\test
        -------name
                      ----a.bmp
        b.bmp

输出:
  name\a.bmp
      b.bmp

2006-6-23 17:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 2 楼』:  获取当前目录下所有文件的相对路径

请问如何获取当前目录下所有文件的相对路径?

c:\test
      -------subDir
                      --------1test.txt
      -------2test.txt

输出:
test\sunDir\1test.txt
test\2test.txt

   此帖被 -8 点积分      点击查看详情   


2006-6-24 00:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
htysm
高级用户




积分 866
发帖 415
注册 2005-12-4
状态 离线
『第 3 楼』:  

dir /s /o *.* >> file.txt

2006-6-24 10:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 4 楼』:  

for /r %a in (*) do @echo %~pnxa

2006-6-24 10:53
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 5 楼』:  

dir /s/b



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-6-24 11:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 6 楼』:  

—————————————————版务记录—————————————————
执行:qwe1234567
说明:同样的内容发表不同的主题
操作:合并主题《DOS學習入門 & 精彩文章 (教學室)>输出本目录下的所有文件》与1,4,5楼
处罚:扣除因多发主题所得6分积分,并处罚2分积分
提示:请不要1个同样的内容发表不同的主题或者同样的主题!
—————————————————版务记录————————————————




我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-6-24 12:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 7 楼』:  

to qwe1234567版主: 接受处罚,呵呵
另外, 尝试了一些dir /s /b,是可以输出本目录下所有文件。
但输出的是绝对路径,而希望得到的是相对路径。


To bagpipe:
您给的这条命令好像只是将盘符忽略掉。
如果是三级目录:
c:\first_level
         ----------test
                      -------name
                              ----a.bmp
                      -------b.bmp

而只想输出test目录下的文件:
test\name\a.bmp
test\b.bmp

谢谢

2006-6-24 13:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 8 楼』:  

for  %a in (C:\TEST\*.*) do @echo %~pnxa
我觉得楼主够懒的,不能自己好好看一下,就等着别人来解答,唉

2006-6-24 14:49
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 9 楼』:  

to bagpipe:
用for  %a in (C:\TEST\*.*) do @echo %~pnxa还是不能达到要求。
如上面所讲,
如果是三级目录:
c:\first_level
         ----------test
                      -------name
                              ----a.bmp
                      -------b.bmp

而只想输出test目录下的文件:
test\name\a.bmp
test\b.bmp

使用for  %a in (C:\TEST\*.*) do @echo %~pnxa,则输出
first_level\test\name\a.bmp
first_level\test\b.bmp

btw:刚入门学批处理,有些浮躁,谢谢大家的帮助

2006-6-26 13:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 10 楼』:  

Re qdcr:

      请参考以下链接中10楼和11楼的方案:

[1] [已结]如何获得文件的上一层目录名字
http://www.cn-dos.net/forum/viewthread.php?tid=19925#pid117288



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-26 14:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 11 楼』:  

to willsort版主:
really pretty good :)
谢谢,使用如下的code
@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
)
可以将所有文件相对于搜索路径(当前目录)的相对路径输出,但是也同时将所有目录进行输出了。

参考了咱们论坛上另外一个帖子:如何判断参数是文件还是目录
http://www.cn-dos.net/forum/view ... =%E5%88%A4%E6%96%AD

      判断是否存在目录: if exist "%~f1\" ...
      判断是否存在文件: if exist "%~f1" if not exist "%~f1\"...

写了如下的批处理:文件列表输出至file.txt,目录列表输出至directory.txt
@echo off
::for /r /d %%d in (*.*) do if exist "%%d\*.*" echo %%d >>content.txt
for /f %%i in ('"dir /a /s /b *.*"') do call :next "%%i"
pause
goto :eof

:next
set jpg=%1
set cd1=%cd:\=/%
set jpg=%jpg:\=/%
rem echo %%jpg:%cd1%=%% | findstr .
for /f %%j in ('"echo %%jpg:%cd1%=%% | findstr . "') do set last=%%j
set last=%last:"=%
call :checkFD %last%
echo %last% >> content.txt
goto :eof


:checkFD
if exist "%~f1\" echo %1>>directory.txt
if exist "%~f1" if not exist "%~f1\" echo %1>>file.txt
goto :EOF

问题:
在file.txt 还有directory.txt中只有一行记录。
检查了几遍code,觉得没有问题啊。请教

2006-6-26 15:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 12 楼』:  

Re qdcr:

      过滤目录可以直接将'"dir /a/s/b/on *.*"'的开关/a改为/a-d,判断文件抑或目录的技巧,一般只在路径是用户输入的情况下使用。

      各方案中的set file=!file:\=/!或者set jpg=%jpg:\=/%只是将路径的\转换/,对你的问题并无助益,可以省去。

      记录数的问题,那需要结合具体的测试环境来分析。应该是路径在转换过程中出现了小的问题,在checkFd下加一个echo.%1看看输出是否有误吧。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-27 01:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: