标题: [出题] 让批处理自行判断是否被双击运行
[打印本页]
作者: pusofalse
时间: 2008-11-12 18:35
标题: [出题] 让批处理自行判断是否被双击运行
出题目的:了解批处理运行机制。
加分规则:
思路新颖8分
无临时文件3分
代码简洁3分
完美代码15分
题目内容:
让批处理自行判断是否被双击运行还是在CMD中手动输入运行。
如同tasklist.exe、net.exe、ping.exe,当我们双击这些文件时,会一闪而过,看不到这些命令的帮助信息。只有在CMD中手动输入之后才能看到。现在的题目是编写一个批处理文件,当我们双击运行时(不带任何参数),显示“双击运行”并暂停,如果是在CMD中手动输入运行(同样不带任何参数),显示“CMD中手动输入运行”之后不暂停,直接返回到命令提示符。
作者: lxmxn
时间: 2008-11-12 19:49
@echo off
wmic process where "name='cmd.exe'" get commandline | findstr /ric:"^cmd /c.*%~n0" >nul&& echo/双击运行 || echo/命令行运行
pause
这样可以吗?
作者: pusofalse
时间: 2008-11-12 20:13
赞佩!
作者: BC
时间: 2008-11-12 20:29
lxmxn够牛的
作者: slore
时间: 2008-11-12 22:39
标题: 多cmd会……
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"
请按任意键继续. . .
作者: lxmxn
时间: 2008-11-13 11:00
标题: re slore:
呵呵,特殊情况自然就没考虑那么多啦。
作者: tireless
时间: 2008-12-6 01:01
@echo off
if "%~1"=="" (
if "%~0"=="%~nx0" (
echo CMD中手动输入运行
) else (
echo 双击运行 & pause
)
)
利用:双击会显示批处理自身的完整路径,而在命令提示符窗口中只显示文件名。
(当然,如果在命令提示符窗口中输入完整路径就会误判了)
作者: 523066680
时间: 2009-10-10 19:46
会变成经典的!虽然我不是刚来,不过还是灌水顶一下。
作者: netbenton
时间: 2009-10-10 21:56
除非命令行输入时带上双引号,并且还注意有时大写,有时小写,
否则应该不会误判了吧!
@echo off&setlocal enabledelayedexpansion
set a0=%0
set a1="%cd%\%~nx0"
if !a0! equ !a1! (echo 双击运行) else (echo 命令行运行)
echo !a0!
echo !a1!
pause
作者: plp626
时间: 2009-10-11 18:19
re:netbenton
兄的代码还稍欠考虑,系统变量cd有一个特殊情况就是根目录下最后一个字符不带"\",看来这点还是被不少人忽略啊
其实用cmdcmdline变量判断比较正统些。
作者: netbenton
时间: 2009-10-11 19:42
再加一点呢?
@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
作者: plp626
时间: 2009-10-12 17:26
这个代码的健壮性大家测试后我再下结论
@if "%cmdcmdline:~0,9%"=="cmd /c """ (echo 双击) else (echo 非双击)
@pause
作者: 523066680
时间: 2009-10-12 17:42
cmd下调用……
Quote: |
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 ]
作者: plp626
时间: 2009-10-12 18:17
健壮性待大家测试
@echo off
echo %cmdcmdline%|findstr/bc:"cmd /c """>nul&&echo 双击||echo 非双击
pause
作者: plp626
时间: 2009-10-12 18:35
Quote: |
Originally posted by pusofalse at 2008-11-12 06:35 PM:
出题目的:了解批处理运行机制。
加分规则:
思路新颖8分
无临时文件3分
代码简洁3分
完美代码15分
题目内容:
让批处理自行判断是否被 ... |
|
不知道是不是这个意思
http://bbs.bathome.cn/viewthread.php?tid=4725
作者: netbenton
时间: 2009-10-12 19:10
还是不能完美,12楼的被破解了:
cmd /c ""D:\myfiles\Desktop\bat\test3.bat" "
作者: plp626
时间: 2009-10-12 19:16
Quote: |
Originally posted by netbenton at 2009-10-12 07:10 PM:
还是不能完美,12楼的被破解了:
cmd /c ""D:\myfiles\Desktop\bat\test3.bat" " |
|
14楼的有更新,你测试下
作者: netbenton
时间: 2009-10-12 19:38
14楼的也破解了
你按16楼方法,在命令行输入试试看,
结果:
“双击”
作者: plp626
时间: 2009-10-12 20:23
Quote: |
Originally posted by netbenton at 2009-10-12 07:38 PM:
14楼的也破解了
你按16楼方法,在命令行输入试试看,
结果:
“双击” |
|
我服了,你专门找bug
可话说回来,谁会这样输入,cmd/c 不说,还要在文件明前带""
作者: szweiw
时间: 2009-10-14 14:57
Quote: |
Originally posted by plp626 at 2009-10-12 20:23:
我服了,你专门找bug
可话说回来,谁会这样输入,cmd/c 不说,还要在文件明前带"" |
|
不是和你抬杠哈,但有个实例就是:
我在启动项里面加了个A.vbs脚本,作用就只是隐藏窗口调用B.bat,因为B.bat在programfiles目录下,目录名带空格,所以调用的时候我习惯加上双引号。
刚看到这个帖子的时候我就在想,可不可以借鉴来加强B.bat的安全性,即只能通过A.vbs来调用B.bat,甚至直接在CMD下面也不能执行。
作者: RuiIsRui
时间: 2009-10-23 22:26
I 服了 you 2楼的。