обнаружить вызов перетаскивания в сценарии Windows и отменить основную операцию - PullRequest
0 голосов
/ 13 июня 2018

У меня есть файл сценария centercrop50.bat, который в основном выполняет обрезку всех jpg-изображений в папке:

for %%i in (*.jpg) do convert %%i -gravity Center -crop 50%%x+0+0  cc50_%%i

convert - это команда CLI, которую я установил с помощью imagemagick.

На самом деле я выбираю несколько файлов для обработки из большого каталога pic, копирую их в папку рабочей среды с помощью этого сценария, а затем хочу запустить сценарий для этих файлов в каталоге рабочей среды.

Теперь яВо время тестирования использования я узнал, что этот сценарий также запускается, когда я случайно помещаю файлы непосредственно в сценарий, а не в каталог.Разница зависит от зоны сброса файлов и может быть незначительной.

Неожиданно в этом случае все фотографии исходной папки операции перетаскивания будут обрабатываться циклом for.

Это означает, что скрипт будет работать с моей исходной библиотекой изображений [sic !, omg !!]
Это очень большой риск для меня, и я не собираюсь делать этот скрипт.

Таким образом, мне нужно некоторое кодирование конверта, чтобы определить, не склонен ли скрипт работать с файлами за пределами исходного пути сценария, и в этом случае вообще пропустить обрезку.

Я обнаружил, что исходный путь сценарияможно оценить с помощью% ~ dp0, но я немного застрял, так как я не очень опытен в CMD-скриптинге.

Можете ли вы предложить помощь?

1 Ответ

0 голосов
/ 13 июня 2018

Итак, вам нужно определить, был ли ваш скрипт вызван с параметрами или напрямую.

В cmd параметры, передаваемые в скрипт, называются% 1% 2 ... или у вас есть% *, чтосодержит все параметры.

Вот скрипт, который ничего не делает, если он вызывается с параметрами:

@echo off
if not "%*"=="" goto errorparams
for %%i in (*.png) do convert %%i -gravity Center -crop 50%%x+0+0  cc50_%%i
goto end
:errorparams
echo script must be launched directly
:end
pause
...