楼主: 527907615
收起左侧

[系统] 请问大家有见过创建快捷方式的批处理不

[复制链接]
527907615
 楼主| 发表于 2017-11-29 23:44:09 | 显示全部楼层
随便注册 发表于 2017-11-29 15:32
那可以更简单啊,按F12就行了,也不用转成exe,AHK的exe+同名ahk即可,随时可改。比如脚本是1.ahk,就把A ...

遗憾小白不会玩那个自动热键。对了怎么卡饭好像不支持移动光纤访问了?要开启DAI LI才能正常访问
527907615
 楼主| 发表于 2017-11-29 23:49:41 | 显示全部楼层
kfk 发表于 2017-11-29 12:50
既然还要拖放到文件上,那用基本操作不就可以了吗:

发送到桌面:

像我这种情况还是创建快捷方式比较合适的因为事后还要用多种修图工具对快捷方式所指向的对象进行多次编辑。

刚试了下那个VBS的确好用,如果能记录上次输入的路径是不是会更好呢
527907615
 楼主| 发表于 2017-11-29 23:57:43 | 显示全部楼层
kfk 发表于 2017-11-29 12:50
既然还要拖放到文件上,那用基本操作不就可以了吗:

发送到桌面:

突然想起以前在坛里找到的一个VBS “自动将剪贴板内容进行文件重命名”但有点小问题,假如剪贴板带有特殊字符会命名失败,不知有没有能修改的地方
    Dim objArgs,fso,f,strText,fileName,extName

    Set objArgs = WScript.Arguments
    If objArgs.Count = 0 Then WScript.Quit

    strText = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")

    '剪贴板的内容为空就退出
    If strText = "" Then WScript.Quit

    Set fso = CreateObject("SCripting.FileSystemObject")

    If fso.FileExists(objArgs.Item(0)) Then
            extName = fso.GetExtensionName(objArgs.Item(0))
            If fso.FileExists(strText & "." & extName) Then
                    fileName = strText & "1." & extName
            Else
                    fileName = strText & "." & extName
            End If
            Set f = fso.GetFile(objArgs.Item(0))
            f.Name = fileName
    ElseIf fso.FolderExists(objArgs.Item(0)) Then
            If fso.FolderExists(strText) Then
                    fileName = strText & "1"
            Else
                    fileName = strText
            End If
            Set f = fso.GetFolder(objArgs.Item(0))
            f.Name = fileName
    End If

    Set fso = Nothing
    Set f = Nothing
    Set objArgs = Nothing
随便注册
发表于 2017-11-30 00:29:57 | 显示全部楼层
527907615 发表于 2017-11-29 23:44
遗憾小白不会玩那个自动热键。对了怎么卡饭好像不支持移动光纤访问了?要开启DAI LI才能正常访问

指定个键就行了,此键之下、return之前就是想干的活,F1~F12特殊点,前面需加*,具体看我前面上传的帮助文件

换DNS试试,https之后好几人有问题都是移动用户
移动网络打开卡饭奇慢_会员服务_站务管理专区 卡饭论坛 - 互助分享 - 大气谦和!
https://bbs.kafan.cn/thread-2107632-1-1.html
kfk
发表于 2017-11-30 16:28:42 | 显示全部楼层
刚试了下那个VBS的确好用,如果能记录上次输入的路径是不是会更好呢

好的,我先按自己的想法改一下,你再看。
今天忙,请等待。

突然想起以前在坛里找到的一个VBS “自动将剪贴板内容进行文件重命名”但有点小问题,假如剪贴板带有特殊字符会命名失败,不知有没有能修改的地方

是检查问题 而不是要我用到我的vbs中去吧?
vbs好像不支持Unicode,这可能就是问题所在。我会再细看一下。
小老虎t
发表于 2017-11-30 20:31:44 | 显示全部楼层
alt加拖放不就好了嘛,windows系统全都支持这个吧
527907615
 楼主| 发表于 2017-12-1 19:09:36 | 显示全部楼层
kfk 发表于 2017-11-30 16:28
好的,我先按自己的想法改一下,你再看。
今天忙,请等待。

不是,搭车问问而己,年代久远估计找不到原作者了
527907615
 楼主| 发表于 2017-12-1 19:10:35 | 显示全部楼层
小老虎t 发表于 2017-11-30 20:31
alt加拖放不就好了嘛,windows系统全都支持这个吧

看图软件里好像是不能这样操作的
kfk
发表于 2017-12-31 14:13:27 | 显示全部楼层
本帖最后由 kfk 于 2017-12-31 14:21 编辑

本人还魂回来了……
楼主还健在吗?

后来发现上次的vbs不能处理Unicode(路径/文件名),发奋重写,今日重发。呃……竟已拖了一个月……

新版说明:

◆若无参数(即 双击空运行),则提示:
--------------------------------------------------
(批量)创建快捷方式到指定文件夹

用法:
将 (多个)文件(夹) 发送/拖放 到此文件(或其快捷方式):
...(本脚本的路径\文件名)

支持Unicode(路径/文件名)的命令行(可用在快捷方式中,以便[发送/拖放]):
WScript "脚本路径" //u

▲是否创建这样的快捷方式?(之后您可以将它移到需要的位置去)
---------------------------
确定 取消
--------------------------------------------------

◆默认保存20个[历史路径](数量可自改,详见脚本开头注释)。
▲[历史路径]保存在 本vbs所在夹中(同名txt),最好不要人为编辑,以免vbs读取时出问题。
▲本vbs会自动清理[历史路径](删重,调序)。

◆询问路径时:
▲可以输入或粘贴(会自动创建);
▲也可以输入/转用[浏览]进行选择(默认/,可自改,详见脚本开头注释);
▲[历史路径]则可用(显示在左首的)代号来选择(代号是单个字符,默认是字母A-T(输入时大小写随意),可自改,详见脚本开头注释);
▲每条[历史路径]单行显示(因为折行看起来乱),然而窗宽有限,所以长路径中段用...省略。

发现问题我再改。
两个对话框,麻烦截图上来,让我看看在你那里的显示有没毛病。

以下代码仅供阅读(因为可能有些字符被网页转换了),运行请下载附件。
  1. '==============================
  2. 'CreateShortcut(s)To.vbs
  3. 'kfk 2017-12-29 @bbs.kafan.cn
  4. '============================================================
  5. '支持Unicode(路径/文件名)的命令行写法:WScript "脚本路径" //u
  6. '============================================================



  7. '▼可以是任意字符,但要避免:重复/大小写/两者冲突
  8. sK = "ABCDEFGHIJKLMNOPQRST"        '[历史路径]的代号&数量
  9. sB = "/"        '转向[浏览]



  10. Set oFSO = CreateObject("Scripting.FileSystemObject")
  11. Set oShellApp = CreateObject("Shell.Application")



  12. Set oArgs = WScript.Arguments

  13. If oArgs.Count = 0 Then
  14.         sCommandLine = "WScript ""脚本路径"" //u"

  15.         sPrompt =_
  16.                 "(批量)创建快捷方式到指定文件夹" & vbCr & vbCr &_
  17.                 "用法:" & vbCr &_
  18.                 "将 (多个)文件(夹) 发送/拖放 到此文件(或其快捷方式):" & vbCr &_
  19.                 WScript.ScriptFullName & vbCr & vbCr &_
  20.                 "支持Unicode(路径/文件名)的命令行(可用在快捷方式中,以便[发送/拖放]):" & vbCr &_
  21.                 sCommandLine & vbCr & vbCr &_
  22.                 "▲是否创建这样的快捷方式?(之后您可以将它移到需要的位置去)"
  23.         If MsgBox(sPrompt, vbOkCancel) = vbCancel Then WScript.Quit

  24.         sFolder = oFSO.GetParentFolderName(WScript.ScriptFullName)
  25.         sLnk = WScript.ScriptName & " (此lnk支持Unicode路径文件名).lnk"
  26.         sLnkPath = sFolder & "\" & sLnk
  27.         oArgs = Array("WScript")
  28.         Dim oFolderItem, oLnk
  29.         sub_CreateLnk
  30.         oLnk.Arguments = """" & WScript.ScriptFullName & """ //u"
  31.         oLnk.Description = "命令行:" & vbCr & sCommandLine
  32.         oLnk.Save

  33.         Set oShell = WScript.CreateObject("WScript.Shell")
  34.         oShell.Run "%WinDir%\explorer /n,/select,""" & sFolder & "\" & sLnk & """"

  35.         WScript.Quit
  36. End If



  37. '▼读取[历史路径]:
  38. Const cReading = 1, cWriting = 2, cAppending = 8, cCreate = True, cUnicode = True
  39. sHistoryFile = WScript.ScriptFullName & ".txt"
  40. If oFSO.FileExists(sHistoryFile) Then
  41.         Set oFile = oFSO.OpenTextFile(sHistoryFile, cReading, Not(cCreate), cUnicode)
  42.         '▼文件为空时避免ReadAll出错:
  43.         If Not oFile.AtEndOfStream Then sHistoryOld = oFile.ReadAll
  44.         oFile.Close

  45.         If sHistoryOld >"" Then
  46.                 aPath = Split(sHistoryOld, vbNewLine)
  47.                 sHistory = "|"
  48.                 For i = 0 To UBound(aPath)
  49.                         If aPath(i)>"" Then        '跳过空行
  50.                                 '▼清理重复数据(删旧留新):
  51.                                 sHistory = Replace(sHistory, "|" & aPath(i) & "|", "|") & aPath(i) & "|"
  52.                         End If
  53.                 Next
  54.                 aPath = Split(Mid(sHistory,2,Len(sHistory)-2), "|")

  55.                 '▼显示[历史路径]:
  56.                 For i = 0 To UBound(aPath)
  57.                         nLenB = fx_LenB(aPath(i))
  58.                         bSameLen = (nLenB = Len(aPath(i)))
  59.                         '▼窗宽所限,保证单行显示(清晰),避免折行(杂乱):
  60.                         If nLenB>36 Then
  61.                                 If bSameLen Then
  62.                                         sRight = Right(aPath(i), 30)
  63.                                 Else
  64.                                         nChar = 0
  65.                                         Do
  66.                                                 sRight = Right(aPath(i), 15 + nChar)
  67.                                                 nLenB = fx_LenB(sRight)
  68.                                                 nChar = nChar + 1
  69.                                         Loop Until nLenB>28
  70.                                 End If

  71.                                 sPath = Left(aPath(i),3) & "..." & sRight
  72.                         Else
  73.                                 sPath = aPath(i)
  74.                         End If
  75.                         j=j+1
  76.                         sPrompt = sPrompt & Mid(sK,j,1) & "> " & sPath & vbCr
  77.                 Next
  78.                 sFolder = aPath(i-1)
  79.         End If
  80. End If

  81. If j>3 Then j=3        '▼若[历史路径]数量<4,使提示文字下降接近输入栏
  82. sPrompt = sPrompt & String(5-j, vbCr) &_
  83.         "创建快捷方式到:(会自动建夹,输" & sB & "转浏览)"
  84. Do
  85.         sFolder = InputBox(sPrompt, WScript.ScriptName, sFolder)
  86.         If sFolder = "" Then WScript.Quit

  87.         If sFolder = sB Then        '▼转向[浏览]
  88.                 Set oFolder = oShellApp.BrowseForFolder(0, "创建快捷方式到:", 1)
  89.                 If oFolder Is Nothing Then WScript.Quit
  90.                 sFolder = oFolder.Self.Path
  91.                 Exit Do
  92.         ElseIf Len(sFolder) = 1 Then        '[历史路径]代号
  93.                 nK = InStr(UCase(Left(sK,UBound(aPath)+1)), UCase(sFolder))
  94.                 If nK>0 Then
  95.                         sFolder = aPath(nK-1)
  96.                 Else
  97.                         WScript.Echo "代号不存在!"
  98.                 End If
  99.         End If

  100.         If Len(sFolder)>1 Then
  101.                 On Error Resume Next
  102.                         Set oFolder = oShellApp.NameSpace(Left(sFolder,3))
  103.                         oFolder.NewFolder Mid(sFolder,4)
  104.                 If Err<>0 Then WScript.Echo "路径有错误!"
  105.                 On Error GoTo 0
  106.         End If
  107. Loop Until oFSO.FolderExists(sFolder)

  108. '▼清理重复数据(删旧留新):
  109. If sHistory>"" Then
  110.         sHistory = Replace(sHistory, "|" & sFolder & "|", "|") & sFolder
  111.         sHistory = Mid(sHistory,2)
  112.         aPath = Split(sHistory,"|")
  113.         nDel = UBound(aPath) - Len(sK)
  114.         For i = 0 To nDel
  115.                 aPath(i) = "*"
  116.         Next
  117.         sHistoryNew = Join(Filter(aPath,"*",False), vbNewLine)
  118. Else
  119.         sHistoryNew = sFolder
  120. End If

  121. If sHistoryNew >< sHistoryOld Then
  122.         Set oFile = oFSO.OpenTextFile(sHistoryFile, cWriting, cCreate, cUnicode)
  123.         oFile.Write sHistoryNew
  124.         oFile.Close
  125. End If



  126. For i = 0 To oArgs.Count - 1
  127.         sTarget = oFSO.GetFileName(oArgs(i))
  128.         j=1 : sN=""
  129.         Do
  130.                 If j>1 Then sN = "  {" & j
  131.                 sLnk = sTarget & sN & ".lnk"
  132.                 sLnkPath = sFolder & "\" & sLnk
  133.                 j=j+1
  134.         Loop While oFSO.FileExists(sLnkPath)

  135.         sub_CreateLnk
  136. Next



  137. Sub sub_CreateLnk
  138.         oFSO.CreateTextFile sLnkPath        ', bOverwrite, bUnicode
  139.         '▲支持Unicode路径\文件名
  140.         Set oFolderItem = oShellApp.NameSpace(sFolder).ParseName(sLnk)
  141.         '▲不支持创建Unicode名,但可读取

  142.         Set oLnk = oFolderItem.GetLink
  143.         oLnk.Path = oArgs(i)
  144.         oLnk.WorkingDirectory = oFSO.GetParentFolderName(oArgs(i))
  145.         'oLnk.Arguments = ""
  146.         'oLnk.Hotkey = 0
  147.         'oLnk.ShowCommand = 1
  148.         'oLnk.Description = ""
  149.         'oLnk.SetIconLocation oArgs(i), 0
  150.         oLnk.Save
  151. End Sub



  152. '▼利用JScript得到双字节字符个数,以调整字符串显示宽度:
  153. Function fx_LenB(str)
  154.         Set oSC = CreateObject("MSScriptControl.ScriptControl")
  155.         oSC.Language = "JScript"
  156.         sJS = Replace(str, "\", "*")
  157.         sJS = "'" & sJS & "'.replace(/[^\x00-\xff]/g, '**').length"
  158.         fx_LenB = oSC.Eval(sJS)
  159. End Function
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
kfk
发表于 2017-12-31 14:46:39 | 显示全部楼层
527907615 发表于 2017-12-1 19:10
看图软件里好像是不能这样操作的

是你的图软不行,
ACDSee支持所有基本操作。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-11-25 21:39 , Processed in 0.109546 second(s), 14 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表