如何拖放多个文件?

how to drag and drop multiple files?

我正在制作一个批处理的 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

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

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

我只是将 .b64 附加到原始名称。

您不需要 FINDSTR 来过滤掉 header/footer。有options to control the format of the CERTUTIL output.

我假设您希望编码输出文件与源文件位于同一目录中。

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

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

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

但是当您拖放时有一个潜在的问题 - 如果文件有 space,Windows 会正确地将文件括在引号中。但如果名称有 & 而没有任何 spaces.

,它不会将文件括在引号中

因此,如果您拖放任何名称为 & 但不包含 space 的文件,那么上面的简单解决方案将失败。

如果要handle drag and drop with & in the name,代码就复杂多了。