编辑脚本以便它只为存在的文件创建快捷方式?

Edit script so it only creates shortcuts for files that exist?

所以我有这个脚本来为我必须检查的文件创建快捷方式,问题是它创建了文件存在或不存在的快捷方式。有什么方法可以阻止它为尚不存在的文件创建快捷方式?

@echo off

set SCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"

echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT%
echo sLinkFile = "%USERPROFILE%\Desktop\check\file_shortcut.lnk" >> %SCRIPT%
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %SCRIPT%
echo oLink.TargetPath = "C:\Firm\F1000\file_to_check.pdf" >> %SCRIPT%
echo oLink.Save >> %SCRIPT%

cscript /nologo %SCRIPT%
del %SCRIPT%

可能最简单的实现方式如下:

@Set "TARGET=C:\Firm\F1000\file_to_check.pdf"
@If Not Exist "%TARGET%" GoTo :EOF
@Set "SCRIPT=%TEMP%\%RANDOM%-%RANDOM%.vbs"
@(  Echo Set objShell = WScript.CreateObject("WScript.Shell"^)
    Echo strLinkFile = "%USERPROFILE%\Desktop\check\file_shortcut.lnk"
    Echo Set objLink = objShell.CreateShortcut(strLinkFile^)
    Echo objLink.TargetPath = "%TARGET%"
    Echo objLink.Save) 1> "%SCRIPT%"
@"%__AppDir__%cscript.exe" //B //NoLogo "%SCRIPT%"
@Del "%SCRIPT%"

如果您要创建多个快捷方式,并且知道 check 目录已经存在于用户的桌面上,则可以使用 。在下面的示例中,我使用了三个不同的目标,"C:\Firm\F1000\file_to_check.pdf""C:\Somewhere\ADirectory\somefile.ext""D:\Elsewhere\filename.ext"。您可以按照以下相同的方式列出您的:

@Set "SCRIPT=%TEMP%\%RANDOM%-%RANDOM%.vbs"
@(  Echo Set objShell = WScript.CreateObject("WScript.Shell"^)
    Echo strLinkFile = "%USERPROFILE%\Desktop\check\"+Wscript.Arguments(1^)+".lnk"
    Echo Set objLink = objShell.CreateShortcut(strLinkFile^)
    Echo objLink.TargetPath = Wscript.Arguments(0^)
    Echo objLink.Save
) 1> "%SCRIPT%"
@For %%G In (
    "C:\Firm\F1000\file_to_check.pdf"
    "C:\Somewhere\ADirectory\somefile.ext"
    "D:\Elsewhere\filename.ext"
) Do @If Exist %%G "%__AppDir__%cscript.exe" //B //NoLogo "%SCRIPT%" %%G "%%~nG"
@Del "%SCRIPT%"

在这两个示例中,我都删除了字符串的某些 %RANDOM% 部分,我认为您不太可能拥有现有的 .vbs 文件在 %TEMP% 中,您将来会需要它,并且已经匹配生成的随机名称。