【问题标题】:Batch file executed from context menu - different behaviour between 'open' and 'open with'从上下文菜单执行的批处理文件 - “打开”和“打开方式”之间的不同行为
【发布时间】:2015-06-20 00:39:32
【问题描述】:

我有一个问题,取决于创建的批处理文件(通过上下文菜单在文件上运行 - 右键单击​​)是否会导致不同的结果。

如果选择批处理文件作为默认程序(不需要设置)来打开文件,它可以正常工作。 IE。右键>'打开'或双击

如果批处理文件只能从“打开方式”菜单中选择,但默认程序不同(所需设置),则批处理文件启动但不产生结果

批处理文件非常简单,执行一个需要两个参数的程序 - 输入文件和目标文件夹:

@echo off
"PCAP Generator.exe" %~dpnx1 %cd%
DEL *.log /q

您能帮忙解释一下为什么这种行为会有所不同吗? 如果可以通过右键单击>“打开方式”菜单选择批处理文件并且不是打开文件的默认程序,请您帮忙更正批处理文件以使其正常运行。

提前致谢

【问题讨论】:

  • 将第一行 @echo off 更改为 @echo on 并使用命令 pause 在底部再添加一行。然后你可以看到批处理文件做了什么。顺便说一句:%~f1%~dpnx1 的缩写。并且很可能您需要将两个参数括在双引号中,因为 ~ 删除了双引号,但两个参数都可以包含 1 个或多个空格或其他需要双引号的字符。所以使用"PCAP Generator.exe" "%~f1" "%cd%"

标签: windows batch-file


【解决方案1】:

最有可能更好的是:

@echo off
if not "%~1" == "" (
    "PCAP Generator.exe" "%~f1" "%~dp1"
    del /Q "%~dp1*.log" 2>nul
)

如果在没有参数的情况下调用批处理文件,则进行一个简单的测试。

%~dp1 引用传递给此批处理文件的第一个参数的驱动器号和路径。此字符串以反斜杠结尾。

日志文件的删除是在安静模式下完成的,在目录中没有日志文件的情况下会抑制错误消息。

有关使用命令的详细信息,请打开命令提示符窗口并在那里执行:

  • call /? ...输出帮助解释%~dp1%~f1
  • del /? ...输出帮助解释选项/Q

通常,在命令提示符窗口中运行带有参数 /? 的命令或控制台应用程序会导致在 1 个或多个窗口页面中获得此命令或控制台应用程序输出的帮助。

还有一个命令 help 列出 Windows 标准命令,如果在运行 help 时不带任何参数执行,使用类似 help call 的命令名称会产生与运行 call /? 时相同的帮助输出。

【讨论】:

    【解决方案2】:

    问题是:

    如果使用“打开方式”,则 %cd% 位置设置为 C:\Windows\system32

    C:\Windows\system32>ECHO cd "C:\Windows\system32"
    

    如果脚本设置为默认并通过“打开”运行,则 %cd% 位置正确设置为输入文件所在的文件夹。

    C:_LOGS>ECHO cd "C:_LOGS"
    

    避免这个问题的解决办法是:

    @echo off
    "PCAP Generator.exe" "%~f1" C:%~p1
    del C:%~p1*.log
    

    非常感谢您的帮助

    【讨论】:

      猜你喜欢
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 2018-11-15
      • 2013-08-09
      相关资源
      最近更新 更多