检测阻力&;删除windows脚本中的调用并取消主操作

检测阻力&;删除windows脚本中的调用并取消主操作,windows,cmd,scripting,imagemagick,Windows,Cmd,Scripting,Imagemagick,我有一个脚本文件centercrop50.bat,它主要对文件夹中的所有jpg图像进行裁剪: for %%i in (*.jpg) do convert %%i -gravity Center -crop 50%%x+0+0 cc50_%%i convert是我随imagemagick安装的CLI命令 实际上,我从一个大的pic目录中选择了几个要处理的文件,用这个脚本将它们复制到一个工作台文件夹中,然后我想在工作台目录中的这些文件上启动脚本 现在我在测试using时了解到,当我不小心将文件直

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

for %%i in (*.jpg) do convert %%i -gravity Center -crop 50%%x+0+0  cc50_%%i
convert是我随imagemagick安装的CLI命令

实际上,我从一个大的pic目录中选择了几个要处理的文件,用这个脚本将它们复制到一个工作台文件夹中,然后我想在工作台目录中的这些文件上启动脚本

现在我在测试using时了解到,当我不小心将文件直接放到脚本中而不是目录中时,该脚本也会触发。差异取决于文件的dropzone,可能很微妙

出乎意料的是,在这种情况下,所有的foto都是drag操作符的sourcefolder,它们将由for循环处理

这意味着脚本将在我的原始图片库[sic!,omg!!]上运行
这对我来说是一个很大的风险,这不是我想要脚本做的

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

我发现脚本的sourcepath可以用%%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

您可以使用mogrify而不是脚本循环来处理ImageMagick中文件夹中的所有图像。我不知道这对你是否有帮助。查看
-crop 50%%x+0+0
中的
%%x
部分是什么?另一个
for
variable reference?拖放执行脚本时可能使用
C:\Windows\System32
或类似的工作目录。是,
%~dp0
指向包含脚本的目录。因此,在(“%~dp0*.jpg”)中对%%i使用
,并转换“%%~i”。。。“%%~dpicc50_%%~nxi”
(假设最后一部分指定了输出文件的新名称)…除了Quickfix的解决方案之外,这似乎是一个优雅的替代方案。谢谢你的解决方案。谢谢,这很优雅。这就是我要找的。