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

[文件操作] [已解决]批处理如何获取lnk快捷方式文件指向的目标程序的路径及其附带的参数

本帖最后由 adan1 于 2016-12-7 13:49 编辑

请问这批处理怎样转成单行?
不知为何我的账号被删了,帖子也没了,原本的帖子是获取lnk快捷文件指向的文件路径及其附带的参数。
原贴的答案,不知如何贴回来了,就剩下这个问题。加括号跟&,都会出错。
  1. @echo off
  2. set "p=%1"
  3. if /i %p:~-3% neq LNK (C:\a.exe %1 /L) &exit
  4. mshta VBScript:Execute("set wsh=CreateObject(""WScript.Shell""): set lnk=wsh.CreateShortcut(""%1""): wsh.run ""C:\a.exe"" &"" """"""& lnk.TargetPath &"""""" """"""& lnk.Arguments &"""""" ""& ""/L"": close")
  5. pause
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 2# CommandBatCmd


感谢,你的单行算是起作用了。其实我想写的就是把文件拖到批处理里运行,直接双击运行肯定有问题的。那么这样还必须要用变量延迟吗?如果可以不用,我就尽可能省略它。
我这边试着搞,感觉双引号很容易出问题,用cmd去执行批处理+文件路径(分别加双引号和不加),老是出一些不明错误 什么“此处不应该有xxx”

TOP

本帖最后由 adan1 于 2016-12-6 17:03 编辑

回复 4# CommandBatCmd

我算是把它改好了
  1. @echo off & setlocal EnableDelayedExpansion &
  2. set "pg=C:\a.exe" & set "LID=/L" & set "p=%~1" &
  3. if /i !p:~-4! neq .LNK ((start "" /i !pg! %1 !LID!)&echo exit
  4. ) else mshta VBScript:Execute("set wsh=CreateObject(""WScript.Shell""): set lnk=wsh.CreateShortcut(""%~1""): wsh.run ""!pg!"" &"" """"""& lnk.TargetPath &"""""" """"""& lnk.Arguments &"""""" ""& ""!LID!"":  close")
复制代码
拖文件到批处理执行是完全正常的,而CMD中执行批处理是有部分不正常。
  1. final.bat C:\Users\Adan\Desktop\TEST\1_2_3\notepad.exe
  2. final.bat "C:\Users\Adan\Desktop\TEST\1_2_3\notepad.exe"
  3. final.bat C:\Users\Adan\Desktop\TEST\1_2_3\notepad.exe.lnk
  4. final.bat "C:\Users\Adan\Desktop\TEST\1_2_3\notepad.exe.lnk"
  5. final.bat C:\Users\Adan\Desktop\TEST\1 2 3\notepad.exe                        <- 失效
  6. final.bat "C:\Users\Adan\Desktop\TEST\1 2 3\notepad.exe"
  7. final.bat C:\Users\Adan\Desktop\TEST\1 2 3\notepad.exe.lnk                    <- 失效
  8. final.bat "C:\Users\Adan\Desktop\TEST\1 2 3\notepad.exe.lnk"
复制代码

TOP

回复 5# pcl_test


    那是因为不知道怎样截取%1之类参数,才用了个新变量临时办法 。

TOP

回复 10# CommandBatCmd


    有点强迫症,也想要把这个给修复,就是VBS里的双引号转义实在蛋疼。

TOP

回复 9# 老刘1号


    感谢提示

TOP

回复 13# CommandBatCmd

我用进程管理器看了下,CMD下执行那两条命令,不加双引号就是只认空格前的路径,而拖文件的方式是会自动加双引号的,所以CMD下是无解的。
附最终代码结贴好了。
  1. @echo off & setlocal EnableDelayedExpansion &
  2. set "pg=%windir%\a.exe" & set "LID=/L" &
  3. if /i "%~x1" neq ".LNK" ((start "" /i !pg! %1 !LID!)&echo exit
  4. ) else mshta VBScript:Execute("set wsh=CreateObject(""WScript.Shell""): set lnk=wsh.CreateShortcut(""%~1""): wsh.run ""!pg!"" &"" """"""& lnk.TargetPath &"""""" """"""& lnk.Arguments &"""""" ""& ""!LID!"": close")
  5. :pause
复制代码

TOP

返回列表