[size=16.002px]在批处理脚本中,! 是延迟变量扩展的特殊字符。如果路径中包含 !,会导致脚本解析错误或意外行为。为了避免这个问题,可以在脚本中临时禁用延迟变量扩展,或者在处理路径时对 ! 进行转义。 [size=16.002px]以下是改进后的脚本,它会检测路径中是否包含 !,如果包含则跳过处理并提示用户: - @echo off
- setlocal disabledelayedexpansion
- REM 设置要检查的目录
- set "target_dir=D:\579"
- REM 创建一个临时的 VBScript 文件来获取快捷方式的目标路径
- set "vbs_script=%temp%\get_target_path.vbs"
- (
- echo Set objShell = CreateObject("WScript.Shell"^)
- echo Set lnk = objShell.CreateShortcut(WScript.Arguments(0^)^)
- echo WScript.Echo lnk.TargetPath
- ) > "%vbs_script%"
- REM 遍历目录中的所有.lnk文件
- for %%f in ("%target_dir%\*.lnk") do (
- REM 检查路径中是否包含 !
- echo %%f | find "!" >nul
- if errorlevel 1 (
- REM 如果不包含 !,继续处理
- setlocal enabledelayedexpansion
- for /f "tokens=*" %%a in ('cscript //nologo "%vbs_script%" "%%f"') do (
- set "target_path=%%a"
- )
- REM 检查目标路径是否存在
- if exist "!target_path!" (
- echo 有效: %%f - !target_path!
- ) else (
- echo 无效: %%f - !target_path!
- )
- endlocal
- ) else (
- REM 如果包含 !,跳过并提示
- echo 跳过: %%f - 路径中包含 ! 号
- )
- )
- REM 删除临时 VBScript 文件
- del "%vbs_script%"
- pause
复制代码
|