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

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

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

  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创建图标需要关闭自带防火墙

TOP

本帖最后由 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

评分人数

TOP

本帖最后由 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
复制代码

TOP

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

TOP

回复 3# WHY

bat运行了,界面显示的东西都对,但是退出后什么操作也没有进行,不知道怎么回事,就差临门一脚了。

TOP

回复 6# shiworkstation


    “临门一脚”你自己去踢吧。把 copy、del 前面的命令删掉。

TOP

回复 7# WHY
谢谢,已经搞定了,非常感谢!

TOP

回复 3# WHY

不把它放入目录该怎么改?能否赐教?
我弄了个echo它到目标目录并增加删除自身,然后再start它,也能解决了问题。

TOP

回复 9# 窄口牛


    "%~dp0" 表示批处理所在的目录,你把它改成其它目录名称,比如:call :getLnkFile "E:\Test\"
那么,批处理放到任意地方都能处理 E:\Test 目录中的 Lnk 文件了。

TOP

好的,我再理解理解。

TOP

返回列表