【问题标题】:mklink: symlink to batch file not running batch filemklink:到批处理文件的符号链接未运行批处理文件
【发布时间】:2013-02-20 15:17:30
【问题描述】:

这里的问题是,在创建到批处理文件的符号链接后,该链接不会运行批处理文件。示例:

mklink x x.cmd

单击x 时,它会在记事本中打开x.cmd!普通快捷方式(.lnk 文件)按预期工作。

> ftype cmdfile
cmdfile="%1" %*
> assoc .cmd
.cmd=cmdfile

所以每个 .cmd 文件都应该自己运行。

有解决办法吗?

【问题讨论】:

  • 以编程方式创建 .lnk 文件的方法是否是可接受的解决方案?
  • 事实上我正在使用批处理文件中的mklink 来创建一些链接。我可以使用 Cygwin 的 mkshortcut,甚至创建一个中间 .cmd 文件,starts 是实际的 .cmd 文件。但是,mklink 将是自然的解决方案。
  • 是的,当双击我通过mklink 创建的任何内容时,我会得到一个Open With 对话框,无论是软的还是硬的。除非您将链接创建为硬链接并为其提供 .cmd 或 .bat 扩展名,否则我能想到的唯一解决方案是创建一个 .lnk 文件而不是符号链接。不过,它不必与 cygwin 的 mkshortcut 一起使用。可以用vbscript来完成。
  • 似乎MS没有注意文件链接。 start x 也打开记事本,运行 .\x 表示找不到命令。有趣的是,Windows 上最简单的功能是如何行为不端的。尽管mklink 是一个期待已久的重要功能,但似乎只有单独的快捷方式文件才能提供工作文件链接。
  • 同意。好吧,如果您正在考虑制作 .lnk 文件而不是符号链接,请参阅此 how to make a shortcut from CMD 页面以获取想法。

标签: windows batch-file cmd mklink


【解决方案1】:

一种方法是建立硬链接 (mklink /H)。但既然我认为你只需要某种捷径,试试这个:

1) 像这样制作一个 shell 脚本 *.vbs (shortcut_helper.vbs):

set WshShell = WScript.CreateObject("WScript.Shell" )
set oShellLink = WshShell.CreateShortcut(Wscript.Arguments.Named("shortcut") & ".lnk")
oShellLink.TargetPath = Wscript.Arguments.Named("target")
oShellLink.Arguments = Wscript.Arguments.Named("arg")
oShellLink.WindowStyle = 1
oShellLink.Save

2) 让您的批处理脚本从批处理文件中像这样启动它:

path_to_vbs\shortcut_helper /target:"file_path\file.bat" /shortcut:"shortcut_name" /arg:"optional_arguments"

现在 2) 为您创建快捷方式 (*.lnk),然后您可以将它们移动到任何您喜欢的位置 =)

但请注意,*.vbs 文件在某些​​情况下可能需要管理员权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 2015-05-12
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2013-06-03
    相关资源
    最近更新 更多