Я новичок в программировании пакетных файлов Windows и изо всех сил пытаюсь получить этот код для обработки амперсандов.
Пакетный файл предназначен для создания превью из изображений в одном дереве папок в другое дерево папок с помощью imagemagick.
Все работает хорошо, пока на пути нет амперсанда. Двойные кавычки сортируют это для большинства команд, но когда он нажимает «если не существует«% thumbpath% »», он падает, если в% thumbpath% есть амперсанд.
Я пытался использовать краткую версию пути 8.3, и, хотя он не падает, он также не возвращает true, если файл не существует.
@echo off
setlocal enableextensions
cd /D "%~dp0"
call :processFiles
pause
goto :eof
:processFiles
for /R %%f in (*.jpg) do call :processFile "%%f", "%%~nxf", "%%~pf", "%%~df"
:processFile
:: parameters 1=full path, 2=filename, 3=path(no drive no file), 4=drive
setlocal ENABLEDELAYEDEXPANSION
set "source=%~1"
set fileName=%~2
set "folder=%~4%~3"
:: replace media path with thumbs folder
set "folder=%folder:\media\=\media\thumbs\%"
:: create the directory tree if required
if not exist "%folder%" md "%folder%"
set "thumbpath=%folder%%fileName%"
:: the following line causes an error when there is an ampersand in %thumbpath%
if not exist "%thumbpath%" (
magick "%source%" -resize 250x250 -unsharp 0x6+0.5+0 "%thumbpath%"
)
exit /b