中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 13:40
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [出题] 让批处理自行判断是否被双击运行 查看 3,035 回复 20
楼 主 [出题] 让批处理自行判断是否被双击运行 发表于 2008-11-12 18:35 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
出题目的:了解批处理运行机制。

加分规则:
思路新颖8分
无临时文件3分
代码简洁3分
完美代码15分

题目内容:
让批处理自行判断是否被双击运行还是在CMD中手动输入运行。
如同tasklist.exe、net.exe、ping.exe,当我们双击这些文件时,会一闪而过,看不到这些命令的帮助信息。只有在CMD中手动输入之后才能看到。现在的题目是编写一个批处理文件,当我们双击运行时(不带任何参数),显示“双击运行”并暂停,如果是在CMD中手动输入运行(同样不带任何参数),显示“CMD中手动输入运行”之后不暂停,直接返回到命令提示符。
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
HAT +4 2008-11-12 20:40
523066680 +15 2009-10-12 17:43
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2 发表于 2008-11-12 19:49 ·  中国 湖北 武汉 联通
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
@echo off
wmic process where "name='cmd.exe'" get commandline | findstr /ric:"^cmd /c.*%~n0" >nul&& echo/双击运行 || echo/命令行运行
pause

这样可以吗?
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pusofalse +15 2008-11-12 20:13
3 发表于 2008-11-12 20:13 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
赞佩!
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
4 发表于 2008-11-12 20:29 ·  中国 广东 江门 电信
中级用户
★★
积分 338
发帖 175
注册 2007-10-21 15:30
18年会员
UID 100351
性别 男
状态 离线
lxmxn够牛的
5 多cmd会…… 发表于 2008-11-12 22:39 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>"C:\Documents and Settings\Administrator
\桌面\123.bat"
双击运行
CommandLine
"C:\WINDOWS\system32\cmd.exe"
cmd /c ""C:\Documents and Settings\Administrator\桌面\123.bat" "
cmd /c ""C:\Documents and Settings\Administrator\桌面\123.bat" "
"C:\WINDOWS\system32\cmd.exe"

请按任意键继续. . .
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
6 re slore: 发表于 2008-11-13 11:00 ·  中国 湖北 武汉 联通
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
呵呵,特殊情况自然就没考虑那么多啦。
7 发表于 2008-12-06 01:01 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
@echo off
if "%~1"=="" (
if "%~0"=="%~nx0" (
echo CMD中手动输入运行
) else (
echo 双击运行 & pause
)
)


利用:双击会显示批处理自身的完整路径,而在命令提示符窗口中只显示文件名。
(当然,如果在命令提示符窗口中输入完整路径就会误判了)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
523066680 +15 2009-10-10 19:45
8 发表于 2009-10-10 19:46 ·  中国 广东 广州 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
18年会员
UID 110072
性别 男
状态 离线
会变成经典的!虽然我不是刚来,不过还是灌水顶一下。
9 发表于 2009-10-10 21:56 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
除非命令行输入时带上双引号,并且还注意有时大写,有时小写,
否则应该不会误判了吧!

@echo off&setlocal enabledelayedexpansion
set a0=%0
set a1="%cd%\%~nx0"

if !a0! equ !a1! (echo 双击运行) else (echo 命令行运行)
echo !a0!
echo !a1!
pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
523066680 +9 2009-10-12 17:50
精简
=> 个人网志
10 发表于 2009-10-11 18:19 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
re:netbenton

兄的代码还稍欠考虑,系统变量cd有一个特殊情况就是根目录下最后一个字符不带"\",看来这点还是被不少人忽略啊

其实用cmdcmdline变量判断比较正统些。
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
11 发表于 2009-10-11 19:42 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
再加一点呢?
@echo off&setlocal enabledelayedexpansion

set a0=%0
set a1="%cd%\%~nx0"
set a1=!a1:\\=\!

if !a0! equ !a1! (echo 双击运行) else (echo 命令行运行)
echo !a0!
echo !a1!
pause
精简
=> 个人网志
12 发表于 2009-10-12 17:26 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
这个代码的健壮性大家测试后我再下结论

@if "%cmdcmdline:~0,9%"=="cmd /c """ (echo 双击) else (echo 非双击)
@pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
523066680 +9 2009-10-12 17:43
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
13 发表于 2009-10-12 17:42 ·  中国 广东 广州 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
18年会员
UID 110072
性别 男
状态 离线
cmd下调用……


C:\Documents and Settings\liubo\桌面>call a.bat
此时不应有 /c。

C:\Documents and Settings\liubo\桌面>@if ""C:\WINDO"=="cmd /c " (echo 双击) els
(echo 非双击)

C:\Documents and Settings\liubo\桌面>

(温馨提示,liubo不是我的名字,我不叫刘波…… 别恶搞我哈)

[ Last edited by 523066680 on 2009-10-12 at 17:49 ]
14 发表于 2009-10-12 18:17 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
健壮性待大家测试


@echo off
echo %cmdcmdline%|findstr/bc:"cmd /c """>nul&&echo 双击||echo 非双击
pause
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
15 发表于 2009-10-12 18:35 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
Originally posted by pusofalse at 2008-11-12 06:35 PM:
出题目的:了解批处理运行机制。

加分规则:
思路新颖8分
无临时文件3分
代码简洁3分
完美代码15分

题目内容:
让批处理自行判断是否被 ...


不知道是不是这个意思

http://bbs.bathome.cn/viewthread.php?tid=4725
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
论坛跳转: