如何拖放多个文件?

时间:2019-06-11 18:44:59

标签: batch-file cmd drag-and-drop command-line-arguments

我正在制造批处理base64解码器和编码器,但我希望能够拖放多个文件,而不仅仅是一次拖放一个文件。

我已经尝试过了

if "%~1" == "" goto :EOF

for %%I in ("%~1\*.tex") do certutil -encode %* tmp.b64 && findstr /v /c:- tmp.b64 > %random%.b64

这是仅一个文件拖放的工作代码

certutil -encode %~1 tmp.b64 && findstr /v /c:- tmp.b64 > %random%.b64

该批处理不会一次对所有文件进行编码。

1 个答案:

答案 0 :(得分:2)

%random%在循环的所有迭代中将保持不变。您将需要启用延迟扩展并使用!random!。但是我什至不会这样做,因为!random!可以给出重复的值。不太可能,但可能。如果不可能重复,则不会是随机的。

我只需在原始名称后附加.b64

您不需要FINDSTR即可过滤出页眉/页脚。有options to control the format of the CERTUTIL output

我假设您希望将编码后的输出文件与源文件放在同一目录中。

由于参数将是一系列文件名(路径),因此您可以简单地使用FOR迭代%*

@echo off
for %%F in (%*) do certutil -encodehex -f %%F %%F.b64 1

上述方法的另一个不错的结果-您可以在命令行中使用通配符调用脚本,并且FOR循环将迭代所有匹配的文件。

但是当您拖放时,存在一个潜在的问题-如果文件中有空格,Windows会将其正确地括在引号中。但是,如果名称中的&没有空格,则不会将文件括在引号中。

因此,如果您用&拖放任何不包含空格的文件名,则上面的简单解决方案将失败。

如果您想handle drag and drop with & in the name,则代码要复杂得多。