在 windows 脚本中检测拖放调用并取消主要操作

detect drag&Drop invocation in a windows script and cancel main operation

我有一个脚本文件 centercrop50.bat 主要对文件夹中的所有 jpg 图像进行裁剪:

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

convert 是我用 imagemagick 安装的 CLI 命令。

实际上我 select 从一个大的 pic 目录中处理一些文件,用这个脚本将它们复制到 workbench 文件夹,然后我想在这些文件上启动脚本workbench 目录。

现在我在测试使用时了解到,当我不小心将文件直接拖放到脚本而不是目录时,该脚本也会触发。差异取决于文件的放置区并且可能很细微。

出乎意料的是,在这种情况下,所有照片都是拖动操作的源文件夹,将由for循环处理。

这意味着该脚本将适用于我的原始图片库 [原文如此!天啊!!]
这对我来说风险很大,而且这不是我打算脚本执行的操作。

因此我需要一些信封编码来检测脚本是否试图处理脚本源路径之外的文件并在这种情况下完全跳过裁剪。

我发现脚本的源路径可以用 %~dp0 求值,但后来我有点卡住了,因为我在 CMD 脚本方面不是很熟练。

你能提供帮助吗?

所以你需要检测你的脚本是带参数调用还是直接调用。

在 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