![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-01 19:05 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,249 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]如何获取当前文件夹名? |
| 可打印版本 3,129 / 18 |
| 第1楼 wingofsea | 发表于 2006-05-25 14:52 |
| 初级用户 发帖 34 积分 124 | |
|
[已结]如何获取当前文件夹名? 最近在写一个批处理脚本,遇到如下问题,请教大家:
1 如何获取到批处理程序所在的当前文件夹的名称? 如: C:\sample\test.bat, 获取到sample 2 如何要求用户通过终端输入,并获取输入的内容? 如: please input the file path: C:\windows 回车 获取到c:\windows 3 如何处理路径中出现的空格问题? 如C:\Program Files\hello ,会截成两段 [ Last edited by willsort on 2006-6-10 at 19:13 ] |
|
| 第2楼 jawbin | 发表于 2006-05-25 15:09 |
| 高级用户 发帖 444 积分 994 | |
|
1,2 我只知道可以调用自己写的小程序,不过我通常是不会用复杂的批处理的,呵呵
3. 用引号 |
|
| 第3楼 vvillsort | 发表于 2006-05-25 17:15 |
| 新手上路 发帖 7 积分 14 | |
|
1.对于你的第一个问题,用批处理完成是有一定的局限性的,不过要看情况,请看下面代码,最多能够判断6层目录,不过路径里如果有空格就不成了
@echo off for /f "tokens=1,2,3,4,5,6 delims=\" %%a in ("%~p1") do ( if not "%%f"=="" echo %%f & goto :eof if not "%%e"=="" echo %%e & goto :eof if not "%%d"=="" echo %%d & goto :eof if not "%%c"=="" echo %%c & goto :eof if not "%%b"=="" echo %%b & goto :eof if not "%%a"=="" echo %%a & goto :eof ) 2.对于第二个问题,我想你的意思就是让别人运行批处理,从而得到输入,可以考虑用set /p 来实现。 3.对于第三个问题,解决路径中的空格的问题,其他用“”双引号就可以达到。自己体会才是 |
|
| 第4楼 willsort | 发表于 2006-05-25 17:48 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re wingofsea:
第一个问题,如果你是想获取全路径的当前文件夹,可以引用环境变量%cd%,如果只是想获取其文件名和扩展名,可以使用: for %%p in ("%cd%") do set sample=%%~nxp 第二个和第三个问题,均如vvillsort所言。只是在使用引号包含路径时,需要预先确定原来的路径中不包含引号,否则问题将会变得复杂化。 |
|
| 第5楼 wingofsea | 发表于 2006-05-25 17:56 |
| 初级用户 发帖 34 积分 124 | |
|
谢谢,
对于第一个问题:只需要获取当前目录,也就是一层就可以了 第2个问题:让用户输入文件路径,然后批处理程序获取到用户输入的这个路径。 |
|
| 第6楼 wingofsea | 发表于 2006-05-25 18:10 |
| 初级用户 发帖 34 积分 124 | |
|
谢谢大家,如willsort所说,获取当前文件夹的问题可以用“for %%p in ("%cd%") do set sample=%%~nxp” , 敬佩:)
关于批处理获取用户输入的问题,可能是我没有描述清楚, 1 判断当前用户输入的路径是否有效 2 如果无效路径,输出“ The Path specified is invalid, please input it again:” 3 用户再次输入路径 4 批处理程序获取路径 谢谢 |
|
| 第7楼 wingofsea | 发表于 2006-05-25 18:59 |
| 初级用户 发帖 34 积分 124 | |
|
关于路径中包含空格的问题:
我希望输出 C:\program files\utility\version.txt中的最后一行文字,使用代码如下: @echo off @set VERSIONFILE=C:\program files\utility\version.txt @for /f "delims=" %%a in (%VERSIONFILE%) do set a=%%a @echo.%a% 运行上诉脚本, 这样会提示,The system cannot find the file C:\Program. 而如果将代码修改为: @set VERSIONFILE="C:\program files\utility\version.txt" 的话,@for /f "delims=" %%a in (%VERSIONFILE%) do set a=%%a 则不会去读取version.txt 中的内容,而是把"C:\program files\utility\version.txt"作为字符串了。 请教这种情况怎么解决? |
|
| 第8楼 3742668 | 发表于 2006-05-25 19:53 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
注意:如果最后一行包含有 &,&&,||等特殊字符的话,可能会显示错误。建议先用set a=%a:&=^^^&%等语句把特殊字符转换一下。 [ Last edited by 3742668 on 2006-5-25 at 19:57 ] |
|
| 第9楼 wingofsea | 发表于 2006-05-25 21:40 |
| 初级用户 发帖 34 积分 124 | |
|
谢谢,空格问题已经解决,谢谢,还剩下一个获取用户输入的问题:)
|
|
| 第10楼 3742668 | 发表于 2006-05-25 22:13 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
关于用户输入的问题,在3楼已经有了答案了,就是用set /p来实现。例如:
|
|
| 第11楼 vvillsort | 发表于 2006-05-26 08:32 |
| 新手上路 发帖 7 积分 14 | |
|
鼓掌中..........willsort兄和3742668兄解答的比小的好,敬佩中..........第一个方法比我的又简洁又好用,唉,自愧不如啊............
|
|
| 第12楼 winndsu | 发表于 2006-05-26 08:44 |
| 新手上路 发帖 1 积分 2 | |
|
一看就知道你是willsort的fans
|
|
| 第13楼 vvillsort | 发表于 2006-05-26 10:22 |
| 新手上路 发帖 7 积分 14 | |
|
楼上的真逗,那以后我要是注册个 "VVengier" ,岂不是 "Wengier"的粉丝啦,哈哈哈哈哈哈哈.........................
|
|
| 第14楼 VVengier | 发表于 2006-05-26 10:30 |
| 新手上路 发帖 2 积分 4 来自 DOS联盟 | |
|
楼上的注意,别乱说话,否则 T.........
|
|
| 第15楼 Climbing | 发表于 2006-05-26 10:42 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
Wengier的fans终于来了,好好的一个帖子被整成了灌水帖,晕~~~
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |