中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [在线求助]下面代码如何正确运行
作者:
标题: [在线求助]下面代码如何正确运行 上一主题 | 下一主题
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『楼 主』:  [在线求助]下面代码如何正确运行

代码见下面地址无奈何签名代码略析,
能否解释下,%1在这里表示什么意思,我知道%0表示自身,用在这里好象没有什么效果,批处理一运行什么也看不见。但是把%1改为文本则OK。
http://www.cn-dos.net/forum/view ... 8&sid=4qtTEH### 8楼的帖子
我怎么运行他的代码不成功,什么提示都没有,我是在WINXP下运行的
[code]
@echo off
for /f "delims=" %%l in (%1) do (
    set line=%%l
        call :show
    echo.
)
pause
goto end
:show
setlocal EnableDelayedExpansion
for /l %%i in (0,1,9999) do (
        if "!line:~%%i,1!"=="" goto end
        set /p= !line:~%%i,1!<nul
        ping/n 1 127.1>nul
    )

:end


[code/]

[ Last edited by HUNRYBECKY on 2007-2-4 at 03:45 AM ]

2007-2-4 03:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhclvip
初级用户





积分 138
发帖 50
注册 2007-1-23
状态 离线
『第 2 楼』:  



  Quote:
Originally posted by HUNRYBECKY at 2007-2-3 02:23 PM:
代码见下面地址无奈何签名代码略析,
能否解释下,%1在这里表示什么意思,我知道%0表示自身,用在这里好象没有什么效果,批处理一运行什么也看 ...

这个程序要带参运行。
无参就是什么都不显示就goto end了。

但是通过分析,即使带上参数运行,它也只会闪烁几秒而终止,这个时间与参数的长度有关。
比如参数1有abc三个字母,则闪烁三秒。

程序中的使用了^G但并没使之发声。也使用了退格字符,但也没有显示。
仅此而已。

2007-2-4 04:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by zhclvip at 2007-2-4 04:48:


这个程序要带参运行。
无参就是什么都不显示就goto end了。

但是通过分析,即使带上参数运行,它也只会闪烁几秒而终止,这个时间与参数的长 ...

谢谢回答,经过搜索学习,终于会了。跑到MS官方网站找到了这些东西,并总结了下。所以上面的代码要运行(假设保存为OK.BAT文件,调用的%1=ok.txt),则在DOS下输入OK.BAT OK.TXT 即可。
1.%加批处理参数引用符(用数字来表示):
批处理参数引用符,实际上也是一种变量,常用来做为批处理调用的参数.其中%0表示批处理自身,我们常常在批处理代码的最后输入DEL %0 来等批处理运行完后删除自身;%1-%9则是参数顺序,如批处理F.BAT内容为format %1,则调用该批处理格式化A时可以:F.BAT A:即可;但是当我们要引用第十一个参数引用符该怎么办呢?那么可以使用SHIFT命令移动DOS的参数起始指针,这类似C语言的指针操作.
例:建立一个MYCOPY.BAT,内容如下:XCOPY /S/C/Y %1\*.* %2,在命令中或批处理中就可以调用这些参数:mycopy.bat c:\boot d:\boot.可以看出这样比原来命令精简了很多.
例:以下批处理文件 Mycopy.bat 显示了如何使用包含任意数目批处理参数的 shift 命令。该批处理文件将一列文件复制到特定的目录。批处理参数由目录和文件名参数表示
@echo off
rem MYCOPY.BAT copies any number of files
rem to a directory.
rem The command uses the following syntax:
rem mycopy dir file1 file2 ...
set todir=%1
:getfile
shift
if "%1"=="" goto end
copy %1 %todir%
goto getfile
:end
set todir=
echo All done


2.%~加批处理参数修改符:
在批处理中也可以使用批处理参数修改符,修改符使用当前的驱动器和目录信息将批处理参数作为部分或完整的文件或目录名进行扩展.要使用修改符,请键入%~+合适的修改符,同样的可以使用批处理参数值来代替这些参数修改符.常见的修改符如下:
%*:扩展批处理文件中传递的所有参数的修改符,这个参数修改符号不能和其他参数修改符组合使用
%~1:扩展 %1 并删除任何外围引号 ("");
%~f1:将 %1 扩展到完全限定的路径名。
%~d1:将 %1 扩展到驱动器盘符。
%~p1:将 %1 扩展到路径。
%~n1:将 %1 扩展到文件名。
%~x1:将 %1 扩展到文件扩展名。
%~s1:扩展的路径仅包含短名称。
%~a1:将 %1 扩展到文件属性。
%~t1:将 %1 扩展到文件日期和时间。
%~z1:将 %1 扩展到文件大小。
%~$PATH:1:搜索 PATH 环境变量中列出的目录,并将 %1 扩展到第一个找到的目录的完全限定名称。如果没有定义环境变量名称,或没有找到文件,则此修改符扩展成空字符串。
%~dp1:将 %1 扩展到驱动器盘符和路径。
%~nx1:将 %1 扩展到文件名和扩展名。
%~dp$PATH:1:在 PATH 环境变量列出的目录中搜索 %1,并扩展到第一个找到的目录的驱动器盘符和路径。
%~ftza1:将 %1 扩展到类似 dir 的输出行。
3.其他问题:在批处理文件中,单个%将作为NUL处理,如ECHO A%B将显示为AB,ECHO A%B%C 将显示AC,这里的%B%被看做变量,如果没有设置则为NUL,如果要正确显示%则使用两个%%,如5%在批处理中表示为%%5,这就是在FOR语句中为什么要使用两个%%来表示变量的原因


2007-2-4 05:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
anqing
高级用户




积分 859
发帖 413
注册 2006-8-14
状态 离线
『第 4 楼』:  

三楼好帖,谢谢

2007-2-4 06:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: