编辑脚本以便它只为存在的文件创建快捷方式?
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
目录已经存在于用户的桌面上,则可以使用 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%
部分,我认为您不太可能拥有现有的 .vbs
文件在 %TEMP%
中,您将来会需要它,并且已经匹配生成的随机名称。
所以我有这个脚本来为我必须检查的文件创建快捷方式,问题是它创建了文件存在或不存在的快捷方式。有什么方法可以阻止它为尚不存在的文件创建快捷方式?
@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%
部分,我认为您不太可能拥有现有的 .vbs
文件在 %TEMP%
中,您将来会需要它,并且已经匹配生成的随机名称。