Board logo

标题: [文件操作] 批处理如何将快捷方式自动替换为原文件? [打印本页]

作者: shiworkstation    时间: 2019-7-27 08:37     标题: 批处理如何将快捷方式自动替换为原文件?

工作中经常出现如下问题,特别麻烦,但是一直不知道怎么办?
因为很多文件夹有相同的内容,指向同一个文件,为了保持同步,所以用快捷方式。某个文件夹,里面有一些真实文件,还有许多快捷方式,如果用批处理将该文件夹下的快捷方式自动替换为原文件。这样就可以打包该文件夹发送老板了。
作者: smss    时间: 2019-7-27 11:11

  1. mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(a.SpecialFolders(""Desktop"") & ""\应用名称.lnk""):b.TargetPath=""%~dp0相对路径"":b.WorkingDirectory=""%~dp0"":b.Save:close")
复制代码
注意WIN10创建图标需要关闭自带防火墙
作者: WHY    时间: 2019-7-27 12:44

本帖最后由 WHY 于 2019-7-27 20:16 编辑
  1. @echo off
  2. call :getLnkFile "%~dp0"
  3. echo del /q /f /s *.Lnk
  4. pause & exit
  5. :getLnkFile
  6. if not exist "%~1*.Lnk" goto :next
  7. set "p=%~pnx1"
  8. for /f "delims=" %%i in ('wmic Path Win32_ShortCutFile where "Path='%p:\=\\%' and Drive='%~d1' and Extension='Lnk'" get Target /format:Table^|find ":"') do (
  9.     for /f "delims=" %%j in ("%%i") do echo copy "%%~fj" "%~1"
  10. )
  11. :next
  12. for /d %%i in ("%~1*") do call :getLnkFile "%%i\"
复制代码

作者: WHY    时间: 2019-7-27 12:47

本帖最后由 WHY 于 2019-7-27 18:44 编辑
  1. $obj = New-Object -Com Shell.Application;
  2. forEach( $a In (dir . -Filter *.Lnk -Recurse -File) ){
  3.     $Lnk = $obj.NameSpace($a.DirectoryName).ParseName($a.Name).GetLink;
  4.     cp $Lnk.Target.Path -Dest ($a.DirectoryName+'\') -Force -WhatIf;
  5.     del $a.FullName -Force -WhatIf
  6. }
  7. pause
复制代码

作者: WHY    时间: 2019-7-27 18:46

  1. for /f "delims=" %%i in ('find ":\" *.Lnk ^| findstr /i /b "[a-z]:"') do echo copy "%%i"
复制代码

作者: shiworkstation    时间: 2019-7-27 19:34

回复 3# WHY

bat运行了,界面显示的东西都对,但是退出后什么操作也没有进行,不知道怎么回事,就差临门一脚了。
作者: WHY    时间: 2019-7-27 20:21

回复 6# shiworkstation


    “临门一脚”你自己去踢吧。把 copy、del 前面的命令删掉。
作者: shiworkstation    时间: 2019-7-27 20:26

回复 7# WHY
谢谢,已经搞定了,非常感谢!
作者: 窄口牛    时间: 2019-8-11 06:48

回复 3# WHY

不把它放入目录该怎么改?能否赐教?
我弄了个echo它到目标目录并增加删除自身,然后再start它,也能解决了问题。
作者: WHY    时间: 2019-8-11 20:12

回复 9# 窄口牛


    "%~dp0" 表示批处理所在的目录,你把它改成其它目录名称,比如:call :getLnkFile "E:\Test\"
那么,批处理放到任意地方都能处理 E:\Test 目录中的 Lnk 文件了。
作者: 窄口牛    时间: 2019-8-11 20:20

好的,我再理解理解。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2