首页 > 解决方案 > 如何拖放多个文件?

问题描述

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

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

标签: batch-filecmddrag-and-dropcommand-line-arguments

解决方案


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

我会简单地附加.b64到原始名称。

您不需要 FINDSTR 来过滤页眉/页脚。有一些选项可以控制 CERTUTIL 输出的格式

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

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

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

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

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

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

如果您想处理名称中的拖放,&则代码要复杂得多。


推荐阅读