找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30650|回复: 10

[文件操作] 批处理如何将快捷方式自动替换为原文件?

[复制链接]
发表于 2019-7-27 08:37:17 | 显示全部楼层 |阅读模式
工作中经常出现如下问题,特别麻烦,但是一直不知道怎么办?
因为很多文件夹有相同的内容,指向同一个文件,为了保持同步,所以用快捷方式。某个文件夹,里面有一些真实文件,还有许多快捷方式,如果用批处理将该文件夹下的快捷方式自动替换为原文件。这样就可以打包该文件夹发送老板了。
发表于 2019-7-27 11:11:50 | 显示全部楼层
  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创建图标需要关闭自带防火墙
发表于 2019-7-27 12:44:01 | 显示全部楼层
本帖最后由 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"
复制代码

评分

参与人数 1技术 +1 收起 理由
shiworkstation + 1 乐于助人

查看全部评分

发表于 2019-7-27 12:47:57 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2019-7-27 18:46:26 | 显示全部楼层
  1. for /f "delims=" %%i in ('find ":" *.Lnk ^| findstr /i /b "[a-z]:"') do echo copy "%%i"
复制代码
 楼主| 发表于 2019-7-27 19:34:08 | 显示全部楼层
回复 3# WHY

bat运行了,界面显示的东西都对,但是退出后什么操作也没有进行,不知道怎么回事,就差临门一脚了。
发表于 2019-7-27 20:21:36 | 显示全部楼层
回复 6# shiworkstation


    “临门一脚”你自己去踢吧。把 copy、del 前面的命令删掉。
 楼主| 发表于 2019-7-27 20:26:04 | 显示全部楼层
回复 7# WHY
谢谢,已经搞定了,非常感谢!
发表于 2019-8-11 06:48:54 | 显示全部楼层
回复 3# WHY

不把它放入目录该怎么改?能否赐教?
我弄了个echo它到目标目录并增加删除自身,然后再start它,也能解决了问题。
发表于 2019-8-11 20:12:09 | 显示全部楼层
回复 9# 窄口牛


    "%~dp0" 表示批处理所在的目录,你把它改成其它目录名称,比如:call :getLnkFile "E:\Test\"
那么,批处理放到任意地方都能处理 E:\Test 目录中的 Lnk 文件了。
发表于 2019-8-11 20:20:22 | 显示全部楼层
好的,我再理解理解。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 09:37 , Processed in 0.012491 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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