【问题标题】:how to drag and drop multiple files?如何拖放多个文件?
【发布时间】:2019-10-26 05:55:57
【问题描述】:

我正在制作批量 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-file cmd drag-and-drop command-line-arguments


【解决方案1】:

%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,代码要复杂得多。

【讨论】:

  • 有没有办法使用像 GB 或 5 MB 这样的大文件,而不是像文本文件这样的小文件?我有这些 5 MB 或 1 GB 的文件要编码,我们是否可以达到 32 位限制?错误:输入长度 = 147058392 EncodeToFile 返回的算术结果超过 32 位。 0x80070216 (WIN32: 534 ERROR_ARITHMETIC_OVERFLOW) CertUtil: -encodehex 命令失败: 0x80070216 (WIN32: 534 ERROR_ARITHMETIC_OVERFLOW) CertUtil: 算术结果超过 32 位。
  • 还有什么是尺寸限制?
  • @unknownunknown - CERTUTIL 大小限制未记录。其他人已经测试并确定 base64 编码源限制为 74,472,684 字节。十六进制编码限制较小,为 21,510,272 字节。 Powershell 能够编码/解码 base64 和十六进制,但我不知道大小限制。如果这对您不起作用,我认为您将需要找到第 3 方实用程序。
  • 我已将其缩小为 29 个文件,而不是只有一个,因此它可以正常工作,感谢您的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 2019-07-20
  • 2011-07-08
  • 2013-10-28
相关资源
最近更新 更多