中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何获取当前文件夹名?
« [1] [2] »
作者:
标题: [已结]如何获取当前文件夹名? 上一主题 | 下一主题
wingofsea
初级用户





积分 124
发帖 34
注册 2006-5-23
状态 离线
『楼 主』:  [已结]如何获取当前文件夹名?

最近在写一个批处理脚本,遇到如下问题,请教大家:
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 ]

2006-5-25 14:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jawbin
高级用户




积分 994
发帖 444
注册 2005-1-29
状态 离线
『第 2 楼』:  

1,2 我只知道可以调用自己写的小程序,不过我通常是不会用复杂的批处理的,呵呵

3.
用引号

2006-5-25 15:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vvillsort
新手上路

一个忠实的FANS


积分 14
发帖 7
注册 2006-5-24
状态 离线
『第 3 楼』:  

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.对于第三个问题,解决路径中的空格的问题,其他用“”双引号就可以达到。自己体会才是



willsort OR vvillsort???俺,一个忠实的粉丝......
2006-5-25 17:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

Re wingofsea:

      第一个问题,如果你是想获取全路径的当前文件夹,可以引用环境变量%cd%,如果只是想获取其文件名和扩展名,可以使用:

      for %%p in ("%cd%") do set sample=%%~nxp

      第二个和第三个问题,均如vvillsort所言。只是在使用引号包含路径时,需要预先确定原来的路径中不包含引号,否则问题将会变得复杂化。



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





积分 124
发帖 34
注册 2006-5-23
状态 离线
『第 5 楼』:  

谢谢,
对于第一个问题:只需要获取当前目录,也就是一层就可以了

第2个问题:让用户输入文件路径,然后批处理程序获取到用户输入的这个路径。

2006-5-25 17:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wingofsea
初级用户





积分 124
发帖 34
注册 2006-5-23
状态 离线
『第 6 楼』:  

谢谢大家,如willsort所说,获取当前文件夹的问题可以用“for %%p in ("%cd%") do set sample=%%~nxp” , 敬佩:)

关于批处理获取用户输入的问题,可能是我没有描述清楚,
1 判断当前用户输入的路径是否有效
2 如果无效路径,输出“ The Path specified is invalid, please input it again:”
3 用户再次输入路径
4 批处理程序获取路径
谢谢

2006-5-25 18:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wingofsea
初级用户





积分 124
发帖 34
注册 2006-5-23
状态 离线
『第 7 楼』:  

关于路径中包含空格的问题:
我希望输出 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"作为字符串了。
请教这种情况怎么解决?

2006-5-25 18:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 8 楼』:  


@echo off
@set VERSIONFILE=C:\program files\utility\version.txt
@for /f "usebackq delims=" %%a in ("%VERSIONFILE%") do set a=%%a
@echo.%a%
注意:如果最后一行包含有 &,&&,||等特殊字符的话,可能会显示错误。建议先用set a=%a:&=^^^&%等语句把特殊字符转换一下。

[ Last edited by 3742668 on 2006-5-25 at 19:57 ]

2006-5-25 19:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wingofsea
初级用户





积分 124
发帖 34
注册 2006-5-23
状态 离线
『第 9 楼』:  

谢谢,空格问题已经解决,谢谢,还剩下一个获取用户输入的问题:)

2006-5-25 21:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 10 楼』:  

关于用户输入的问题,在3楼已经有了答案了,就是用set /p来实现。例如:
@echo off
call :GetPath
echo 你输入的路径为:%strPath%
pause>nul
exit

:GetPath
    set /p strPath=please input the path:
    pushd %strPath% 2>nul || (echo  The Path specified is invalid, please input it again: & goto GetPath)
    popd
goto :eof


2006-5-25 22:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vvillsort
新手上路

一个忠实的FANS


积分 14
发帖 7
注册 2006-5-24
状态 离线
『第 11 楼』:  

鼓掌中..........willsort兄和3742668兄解答的比小的好,敬佩中..........第一个方法比我的又简洁又好用,唉,自愧不如啊............



willsort OR vvillsort???俺,一个忠实的粉丝......
2006-5-26 08:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
winndsu
新手上路





积分 2
发帖 1
注册 2006-5-23
状态 离线
『第 12 楼』:  

一看就知道你是willsort的fans

2006-5-26 08:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vvillsort
新手上路

一个忠实的FANS


积分 14
发帖 7
注册 2006-5-24
状态 离线
『第 13 楼』:  

楼上的真逗,那以后我要是注册个   "VVengier"  ,岂不是 "Wengier"的粉丝啦,哈哈哈哈哈哈哈.........................



willsort OR vvillsort???俺,一个忠实的粉丝......
2006-5-26 10:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
VVengier
新手上路




积分 4
发帖 2
注册 2006-5-26
来自 DOS联盟
状态 离线
『第 14 楼』:  

楼上的注意,别乱说话,否则 T.........

2006-5-26 10:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 15 楼』:  

Wengier的fans终于来了,好好的一个帖子被整成了灌水帖,晕~~~



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2006-5-26 10:42
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: