@echo off
setlocal enabledelayedexpansion
rem Following 4 lines are the powershell command
set pscommand=^&{^
$sh= New-Object -ComObject WScript.Shell;^
ForEach ($lnk in Get-ChildItem '!AppData!\Microsoft\Windows\Recent\*.lnk'^) {^
ForEach ($target in $sh.CreateShortcut($lnk^).TargetPath^) {Write-Host $lnk'^|'$target}}}
for /f "tokens=1-2 delims=|" %%A in ('powershell -noprofile -command "!pscommand!"') do (
rem Disable delayed expansion as can remove exclaimation marks in paths.
setlocal disabledelayedexpansion
for %%C In (
odt pdf txt doc docx wpd wps csv swd vor
uot uof pdb psw xls xlsx xlm wk1 wks 123
dif rtf sdc vor dbf slkppt pps pptx
) do (
if /i "%%~xB" == ".%%~C" if exist "%%~B" (
echo(Link: "%%~A"& echo(Target: "%%~B"
rem Attach .lnk file to mail
MailAlert -s "my PC MEDION" -r first.last@yahoo.be -b "recente" -a "%%~A"
if errorlevel 1 (
rem Shortcut not to be deleted
rem Backup errorlevel using call set to resolve the doubled percent signs.
call set "error_level=%%errorlevel%%"
rem Enable delayed expansion to echo the backup of errorlevel
setlocal enabledelayedexpansion
echo An error was found w/ error code of: !error_level!
endlocal
echo inFile: "%%~B"
) else (
rem Shortcut to be deleted
echo del "%%~A"
echo isSend: "%%~B"
)
echo(
)
)
endlocal
)
Здесь показано, как сделать резервную копию errorlevel
в другой переменной и использовать ее после установки setlocal
, так как setlocal
может установить errorlevel
.
Если echo
изerrorlevel
важно, я бы пропустил его, так как это единственная именованная переменная, которая нуждается в расширении в цикле for
.Без этого не потребовалось бы расширение, требующее включения отложенного расширения, или call set
, или call echo
.Код показывает только 1 вариант для echo
из errorlevel
.
. Пути могут иметь восклицательные знаки, поэтому включение отложенного расширения, когда пути раскрываются как текст, может привести к исчезновению восклицательных знаков на пути,что делает затронутые пути недействительными.Чтобы избежать этого, включите и отключите отложенное расширение по мере необходимости.
Я нашел wmic
довольно медленным, поскольку он выполняет поиск по всей системе и не дал результатов с вашим кодом, поэтому я использую powershell
для чтения целей из.lnk
файлы.Если необходимо, это замена wmic
.
Переменные for
:
%%A
- это путь ссылки %%B
целевой путь %%C
- это расширения для сравнения с расширениями целевого пути
Просмотр if /?
для получения информации об обработке errorlevel
.Обратите внимание на проверку if errorlevel 1
, которая не требует расширения переменных.