[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【练习-032】让批处理自行判断是否被双击运行

出题目的:了解批处理运行机制。

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

题目内容:
让批处理自行判断是否被双击运行还是在CMD中手动输入运行。
如同tasklist.exe、net.exe、ping.exe,当我们双击这些文件时,会一闪而过,看不到这些命令的帮助信息。只有在CMD中手动输入之后才能看到。现在的题目是编写一个批处理文件,当我们双击运行时(不带任何参数),显示“双击运行”并暂停,如果是在CMD中手动输入运行(同样不带任何参数),显示“CMD中手动输入运行”之后不暂停,直接返回到命令提示符。
心绪平和,眼藏静谧。

我不知道 这样符不符合题意

  1. @echo off
  2. tasklist | find /i "ping.exe">nul && echo 双击运行 &&pause>nul&&exit|| echo CMD中手动输入运行&&ping /n 3 127.1>nul&&cmd
复制代码

[ 本帖最后由 qingfengzhixia 于 2008-11-13 10:02 编辑 ]
1

评分人数

TOP

回复 2楼 的帖子

双击时不会先运行PING命令,所以tasklist |findstr的结果总是失败的,所以不管如何运行,总是输出“CMD中手动输入运行”。
心绪平和,眼藏静谧。

TOP

  1. @IF NOT DEFINED DEBUG @ECHO OFF
  2. FINDSTR ":\\" %~0 >NUL 2>&1 && (
  3.         ECHO 双击运行
  4.         PAUSE
  5.         EXIT
  6.         ) || (
  7.         ECHO CMD中手动输入运行
  8.         PAUSE
  9.         )
复制代码
不是很好的做法,要命令行打完整路径文件名称就失效

[ 本帖最后由 sylovanas 于 2008-11-13 11:04 编辑 ]
1

评分人数

TOP

回复楼主 [ 很难 ]

这个题目我个人觉得不是一般的难阿!

TOP

回复 6楼 的帖子

也是着实想了好一阵,就是钻了%0、%~n0的空子。我的代码也不通用,同4楼一样的问题。
心绪平和,眼藏静谧。

TOP

回复 5楼 的帖子

可以把不垃圾的程序发来看下吗?、、、我想delphi的精髓你已经学到了吧。
心绪平和,眼藏静谧。

TOP

还是lxmxn的方法强大,可惜需要用到wmic

TOP

异同之处在于cmd的启动参数
双击时是/c参数启动的,而手动输入时是默认工作状态,也就是没参数或参数为/k

TOP

  1. @ECHO OFF
  2. title 标题
  3. For /f "tokens=2" %%i in ('tasklist /fi "windowtitle eq 标题" /nh') Do set handle=%%i
  4. wmic process where handle='%handle%' get commandline|findstr /i /c:"cmd \/c"&&set HH=PAUSE
  5. %HH%
复制代码
1

评分人数

TOP

双击时是/c参数启动的,而手动输入时是默认工作状态,也就是没参数或参数为/k


原来start/?中的 command/program 是这个意思。。。

TOP

麻烦……

不管是路径,标题的都是有空钻的……多开的话,检测就有问题。

如何能得到当前cmd的pid是关键。

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>"C:\Documents and Settings\Administrator
\桌面\1.bat"
C:\Documents and Settings\Administrator>"C:\Documents and Settings\Administrator
\桌面\1.bat"
cmd /c ""C:\Documents and Settings\Administrator\桌面\1.bat" "

TOP

原帖由 everest79 于 2008-11-13 18:41 发表
@ECHO OFF
title 标题
For /f "tokens=2" %%i in ('tasklist /fi "windowtitle eq 标题" /nh') Do set handle=%%i
wmic process where handle='%handle%' get commandline|findstr /i /c:"cmd \/c"&&set HH=PAUSE ...




有没有人能解释一下。
两处不懂
1。“'tasklist /fi "windowtitle eq 标题" /nh'
2。wmic

TOP

有没有人能解释一下。
两处不懂
1。“'tasklist /fi "windowtitle eq 标题" /nh'
2。wmic

1.请运行下面的代码
  1. @echo off
  2. title 标题
  3. echo 以下是加上/nh的结果:
  4. tasklist /fi "windowtitle eq 标题" /nh
  5. echo.&echo 以下是不加/nh的结果:
  6. tasklist /fi "windowtitle eq 标题"
  7. echo.&pause
复制代码
2.wmic不懂?==>看教程

TOP

各位试试行吗?我在本机上试符合要求了
  1. @echo off
  2. if "%0"=="%~0" (echo CMD中手动输入运行) else (echo 双击运行)
  3. pause
  4. exit
复制代码

[ 本帖最后由 shqf 于 2008-11-14 22:41 编辑 ]
1

评分人数

TOP

返回列表