![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 15:57 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何给dir结果中的文件名加上完整路径 |
| 可打印版本 5,536 / 17 |
| 第1楼 onlykier | 发表于 2006-11-07 23:22 |
| 初级用户 发帖 23 积分 50 | |
|
如何给dir结果中的文件名加上完整路径 假设一个目录下有子目录,子目录下又有子目录,用如下命令
dir /s /a-d /tc|sort|find "-"|find /v "序列" 结果类此如下 2006-10-01 19:49 123,392 asdfasdfasd060921-060927.xls 2006-10-01 19:49 123,904 asdfasdfasd060914-060920.xls 2006-10-01 19:49 161,280 asdfasdfasd060831-060906.xls 2006-10-01 19:49 167,936 asdfasdfasd060907-060913.xls 2006-10-07 19:08 160,768 asdfasdfasd060824-060830.xls 2006-10-07 19:13 124,928 asdfasdfasd060928-061004.xls 2006-10-12 00:17 124,416 asdfasdfasd061005-061011.xls 2006-10-19 08:18 124,928 asdfasdfasd061012-061018.xls 2006-10-26 12:22 124,928 asdfasdfasd061019-061025.xls 我想在文件名之前显示该文件的目录名,结果像这样,请问该如何做? 2006-10-01 19:49 123,392 d:\x1\asdfasdfasd060921-060927.xls 2006-10-01 19:49 123,904 d:\x2\asdfasdfasd060914-060920.xls 2006-10-01 19:49 161,280 d:\x2\1\asdfasdfasd060831-060906.xls 2006-10-01 19:49 167,936 d:\x2\2\asdfasdfasd060907-060913.xls 2006-10-07 19:08 160,768 d:\x2\3\asdfasdfasd060824-060830.xls 2006-10-07 19:13 124,928 d:\x4\asdfasdfasd060928-061004.xls 2006-10-12 00:17 124,416 d:\x5\asdfasdfasd061005-061011.xls 2006-10-19 08:18 124,928 d:\x4\1\asdfasdfasd061012-061018.xls 2006-10-26 12:22 124,928 d:\x4\3\asdfasdfasd061019-061025.xls ──────────────── 版务记录 ──────────────── 执行:namejm 原标题:问个dir的问题 修改后标题:如何给dir结果中的文件名加上完整路径 说明:因标题过于模糊,不便于论坛的搜索和管理,在本提示发表三日后,楼主尚未修改 标题,现由本人强制修改标题,并扣除楼主2点积分。 ──────────────── 版务记录 ──────────────── [ Last edited by namejm on 2007-2-3 at 08:38 PM ] |
|
| 第2楼 不得不爱 | 发表于 2006-11-07 23:27 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
dir/s/b
时间和大小是一定要吗? [ Last edited by 不得不爱 on 2006-11-7 at 11:29 AM ] |
|
| 第3楼 onlykier | 发表于 2006-11-07 23:33 |
| 初级用户 发帖 23 积分 50 | |
|
日期 和文件名要,其他要不要都行
|
|
| 第4楼 onlykier | 发表于 2006-11-07 23:35 |
| 初级用户 发帖 23 积分 50 | |
|
dir /s /a-d /tc|sort|find "-"|find /v "序列"
这句话的意思是 /s 显示当前目录及子目录的文件 /a-d 结果中去除文件夹的信息 /tc 按创建时间显示 |sort 是对dir /s/a-d/tc 的结果进行排序,按创建时间从早到晚排序 |find "-" 对dir /s /a-d /tc|sort 的结果进行筛选,只显示带有"-"的行 |find /v "序列" 的作用是,由于dir /s /a-d /tc|sort|find "-"显示的结果中有一行结果是不相要的,所以对dir /s /a-d /tc|sort|find 的结果中去除带有"序列"的那行 |
|
| 第5楼 不得不爱 | 发表于 2006-11-08 00:31 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
bat里用:
FOR /F "tokens=*" %%i IN ('dir/s/b/od') DO @echo %%~ti %%i CMD里用 FOR /F "tokens=*" %i IN ('dir/s/b/od') DO @echo %~ti %i |
|
| 第6楼 onlykier | 发表于 2006-11-08 01:57 |
| 初级用户 发帖 23 积分 50 | |
|
我要文件的目录位置。请楼上的兄弟看下1楼的原意
|
|
| 第7楼 namejm | 发表于 2006-11-08 02:09 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
5F的只满足了3F的其中一个需求,而对另一个需求不做处理,在5F的基础上得到如下代码:
[ Last edited by namejm on 2006-11-7 at 02:15 PM ] |
|
| 第8楼 不得不爱 | 发表于 2006-11-08 04:40 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
可是我测试了下7楼的代码和5楼的代码是一样的输出啊
|
|
| 第9楼 不得不爱 | 发表于 2006-11-08 04:45 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
不会是你们执行dir/s/b/od不显示带路径的文件名吧
|
|
| 第10楼 namejm | 发表于 2006-11-08 07:03 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by 不得不爱 at 2006-11-7 16:40: sorry,没有对5F和7F的代码做对比测试,导致我主观地认为5F的代码和7F的代码有所差别,实际上它们显示的结果是一样的。 不过,用 for 语句中的 %%~ti 扩展只能探测到文件的最后改动时间,而不能探测到文件的创建时间。要提取创建时间的话,还是需要用 dir 里的 /tc。请楼主测试以下代码,看是不是你所需要的: 发现用 %%~dpnxl 来扩展文件的完整路径的时候,居然是直接在文件名前简单地加上批处理所在的路径,看来这个问题还真的有点棘手,可能得通过产生临时文件的方法才能完全满足楼主的要求。 [ Last edited by namejm on 2006-11-7 at 08:26 PM ] |
|
| 第11楼 namejm | 发表于 2006-11-08 11:23 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
找到了一个解决方案,美中不足的是:产生了两个临时文件。
|
|
| 第12楼 zh159 | 发表于 2006-11-08 13:11 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
效率较低,不过不会生成临时文件
|
|
| 第13楼 不得不爱 | 发表于 2006-11-08 23:07 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
楼上的无法运行!
|
|
| 第14楼 namejm | 发表于 2006-11-09 01:47 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
我在10F说过,for 语句的 %%~ti 只能探测到文件的最后改动时间,而 %%~dpnxi 只是简单地在文件名之前加上批处理所在的路径,假设 test.bat 位于 d:\test 下,而test.txt 位于 d:\test\abc\123 下,那么,%%~dpnxi 只会把 test.txt 扩展成 d:\test\test.txt 而不是 d:\test\abc\123\test.txt ,所以,同时使用 %%~ti 和 %%~dpnxi(或者%%~fi) 的做法是不正确的。
|
|
| 第15楼 zh159 | 发表于 2006-11-09 04:51 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
我 12F 的测试过,可以运行,只不过LZ的后一段:findstr "-"^|find /v "序列" 测试时我用的是^|findstr ".mmf"(mmf为手机铃声文件)
for /f "delims=" %%a in ('dir/b/s "%%l"') do set Name=%%~fa 这一行是再搜索一次"%%l"的文件,%%~fa获得正确路径,因为再次dir/s搜索,所以效率降低了 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |