中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [挑战3] 取得最终有效目录[ 难度:☆]
作者:
标题: [挑战3] 取得最终有效目录[ 难度:☆] 上一主题 | 下一主题
baomaboy
银牌会员





积分 1513
发帖 554
注册 2005-12-30
状态 离线
『楼 主』:  [挑战3] 取得最终有效目录[ 难度:☆]

运行前:在你的 D: 盘下 建立目标文件夹 md "ab\c d\e2f.exe" 我们的字符串为: set "FilePath=d:\ab\c d\e2f.exe\xlay\cdkey" 目标:验证每一层,并给出提示。 提取出 "d:\ab\c d\e2f.exe" 最后输入: 有效路径:d:\ab\c d\e2f.exe 目标文件名:e2f.exe 目标文件属性:文件夹 可以使用P和VBS。 [ Last edited by baomaboy on 2007-4-30 at 02:53 PM ]


   此帖被 +20 点积分       点击查看详情   
评分人:【 lxmxn 分数: +20  时间:2007-5-1 06:33




2007-4-30 14:19
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
baomaboy
银牌会员





积分 1513
发帖 554
注册 2005-12-30
状态 离线
『第 2 楼』:  

Set WshSHell = WScript.CreateObject("WScript.Shell") Set FSO = CreateObject("Scripting.FileSystemObject") FP="d:\ab\c d\e2f.exe\xlay\cdkey" FPArr=split(FP,"\") For i=1 To UBound(FPArr) FPTest = FSO.BuildPath(FPTest,FPArr(i)) FPT=FSO.BuildPath(FPArr(0)&"\",FPTest) If (FSO.FolderExists(FPT)) Then WshSHell.popup "目标文件夹:“"&FPT&"”已存在。" FolderPath=FPT else WshSHell.popup "目标文件夹:“"&FPT&"”不存在。" Exit For end if Next WshSHell.popup "最终有效目录:"&vbcrlf&FolderPath Set WshSHell = Nothing Set FSO = Nothing WScript.Quit(0)
  [ Last edited by baomaboy on 2008-3-25 at 12:55 AM ]


   此帖被 +3 点积分      点击查看详情   
评分人:【 flyinspace 分数: +3  时间:2007-5-1 02:16




2007-4-30 15:07
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 3 楼』:  [p 处理版]。。写得不好请原谅。

@echo off & setlocal EnableDelayedExpansion set "FilePath=d:\ab\c d\e2f.exe\xlay\cdkey" rem ---------------------------------------------------------- rem 下面这段代码为建立文件夹代码。。。可以忽略不记 if not exist "d:\ab\c d\e2f.exe" md "d:\ab\c d\e2f.exe" rem ---------------------------------------------------------- :main for /f "delims=\ tokens=* " %%i in ("%FilePath%") do ( set "FileName=%%~nxi" if not exist "!FilePath!" ( call :GetLen "!FileName!" call :GetPath !Len! echo %FilePath%路径错误,正重新检验。 goto :main ) echo 有效路径:!FilePath! echo 有效文件名:!FileName! ) goto :END :GetPath set "parm1=%~1" set "FilePath=!FilePath:~0,-%parm1%! goto :EOF :GetLen set aaa=%~1 set Len=0 for /l %%i in (0,1,255) do ( if "!aaa:~%%i,1!"=="" ( set /a "Len=%%i+1" goto :EOF ) ) goto :EOF :END pause rem 清除建立的文件夹。演示完成 rd /s /q "d:\ab\c d\e2f.exe"




知,不觉多。不知,乃求知
2007-4-30 15:11
查看资料  发短消息  网志   编辑帖子  回复  引用回复
chkau
初级用户





积分 101
发帖 47
注册 2007-4-18
状态 离线
『第 4 楼』:  

LZ的题目是验证每一层,楼上的代码需稍做修改


2007-4-30 15:56
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 5 楼』:  

我昨天写了相关代码。今天只是将代码稍微做了改动,见笑。
::code by youxi01@cn-dos.net
::获取文件夹的名称及层数

@echo off
setlocal enabledelayedexpansion
set "FolderPath=办公\te st\tes t123\OK"
call :GetFdName "%FolderPath%"

pause>nul

:GetFdName 
   for /f "delims=\ tokens=1,*" %%i in ("%~1") do (
       set FPath=!FPath!\%%i
       if not exist !FPath! echo %%i & GOTO :eof
       call :GetFdName "%%j"
 )
      
[ Last edited by youxi01 on 2007-4-30 at 09:07 PM ]


2007-4-30 21:06
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 6 楼』:  

Originally posted by youxi01 at 2007-4-30 08:06 AM: 我昨天写了相关代码。今天只是将代码稍微做了改动,见笑。 [code] ::code by youxi01@cn-dos.net ::获取文件夹的名称及层数 @echo off setlocal enabledelayedexpa ...
呵呵,代码不合要求:)需要重写哦:) 你的代码合乎挑战1的需求。。




知,不觉多。不知,乃求知
2007-4-30 22:25
查看资料  发短消息  网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 7 楼』:  

其实也符合题目要求,不过没给出全部路径而已。 稍微改动如下:
::code by youxi01@cn-dos.net

@echo off
setlocal enabledelayedexpansion
set "FolderPath=F:\办公\te st\tes t123\OK"
call :GetFdName "%FolderPath%"

pause>nul

:GetFdName 
   for /f "delims=\ tokens=1,*" %%i in ("%~1") do (
       if not exist !FPath!%%i\ (
             echo 目标路径: !FPath!%%i不存在
             echo 最终有效目录为: !FPath!
             GOTO :eof
           )
       set FPath=!FPath!%%i\
       call :GetFdName "%%j"
 )
    


   此帖被 +40 点积分       点击查看详情   
评分人:【 flyinspace 分数: +3  时间:2007-5-1 01:32
评分人:【 everest79 分数: +15  时间:2007-5-1 03:50
评分人:【 lxmxn 分数: +12  时间:2007-5-1 04:46
评分人:【 colorphoto 分数: +2  时间:2007-5-1 07:02
评分人:【 26933062 分数: +8  时间:2007-8-19 19:24


2007-5-1 01:28
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 8 楼』:  

Originally posted by youxi01 at 2007-4-30 12:28 PM: 其实也符合题目要求,不过没给出全部路径而已。 稍微改动如下: [code] ::code by youxi01@cn-dos.net ::code by youxi01@cn-dos.net @echo off setlocal enabledelayedexpansion set "FolderPath=F:\办公\te st\tes t123\OK" call :GetFdName "%FolderPath%" pause>nul :GetFdName for /f "delims=\ tokens=1,*" %%i in ("%~1") do ( if not exist !FPath!%%i\ ( echo 目标路径: !FPath!%%i不存在 echo 最终有效目录为: !FPath! GOTO :eof ) set FPath=!FPath!%%i\ call :GetFdName "%%j" )
很妙的使用方法?? 只是: call :GetFdName "%%j" 这一句话?个人认为改成 goto 比较好一点。。




知,不觉多。不知,乃求知
2007-5-1 02:48
查看资料  发短消息  网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 9 楼』:  

@echo off & setlocal enabledelayedexpansion set fp="d:\ab\c d\e2f.exe\xlay\cdkey" for /f "delims=\ tokens=1-5" %%a in (%fp%) do ( for %%z in (%%a,\%%b,\"%%c",\%%d,\%%e) do (set all=!all!%%z if exist !all! (echo !all!路径正确! set ok=!all! ) else (echo !all!路径错误! ) ) ) echo 最终路径为 !ok! pause 虽然检测出的路径是 d:\ab\"c d"\e2f.exe 但是不影响 if exist 的判断


   此帖被 +1 点积分     点击查看详情   
评分人:【 flyinspace 分数: +1  时间:2007-5-1 06:05


2007-5-1 05:45
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 10 楼』:  

1,若能去处这个 " 就更好了。。 2,若 我们的目录层不止五层呢?? 运行结果为:
d:路径正确! d:\ab路径错误! d:\ab\"c d"路径错误! d:\ab\"c d"\e2f.exe路径错误! d:\ab\"c d"\e2f.exe\xlay路径错误! 最终路径为 d: 请按任意键继续. . .
但对参与热情予以支持,加一分。




知,不觉多。不知,乃求知
2007-5-1 06:16
查看资料  发短消息  网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 11 楼』:  

目录的层数只要在tokens=1-5这里改一下,然后在第2个for中加入相应的变量参照就可以了


2007-5-1 06:21
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 12 楼』:  

Originally posted by zhoushijay at 2007-4-30 05:21 PM: 目录的层数只要在tokens=1-5这里改一下,然后在第2个for中加入相应的变量参照就可以了
呵呵,但我们的目录是不确定的。。 有可能是5个,也有可能是4个。。 更有可能有10多个。。 给一个是不想生成临时文件。。




知,不觉多。不知,乃求知
2007-5-1 06:40
查看资料  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: