问题描述
所以我有这个脚本来创建我必须检查的文件的快捷方式,问题是它会在文件存在或不存在的情况下创建快捷方式。有什么方法可以阻止它为还不存在的文件创建快捷方式?
@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
目录已经存在于用户的桌面上,则可以使用for-loop。在以下示例中,我使用了三个不同的目标,"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%
部分,但我认为{{1 }},将来会需要它,并且已经与生成的随机名称匹配。