Batch file 如何拖放多个文件?

Batch file 如何拖放多个文件?,batch-file,cmd,drag-and-drop,command-line-arguments,Batch File,Cmd,Drag And Drop,Command Line Arguments,我正在制作一个batch 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 &&

我正在制作一个batch 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%
将在循环的所有迭代中保持不变。您需要启用延迟扩展并使用
!随机的取而代之。但我甚至不会这么做,因为
!随机的可以提供重复的值。不太可能,但可能。如果不可能重复,那么它就不是随机的

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

您不需要FINDSTR来过滤页眉/页脚。有

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

由于参数将是一系列文件名(路径),因此您只需使用FOR迭代
%*

@echo off
for %%F in (%*) do certutil -encodehex -f %%F %%F.b64 1
上面的另一个好结果是,您可以使用通配符在命令行上调用脚本,FOR循环将迭代所有匹配的文件

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

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


如果您愿意,代码要复杂得多。

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

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

您不需要FINDSTR来过滤页眉/页脚。有

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

由于参数将是一系列文件名(路径),因此您只需使用FOR迭代
%*

@echo off
for %%F in (%*) do certutil -encodehex -f %%F %%F.b64 1
上面的另一个好结果是,您可以使用通配符在命令行上调用脚本,FOR循环将迭代所有匹配的文件

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

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


如果您愿意,代码要复杂得多。

使用并查看以下内容:使用并查看以下内容:是否有一种方法可以使用GB或5MB之类的大文件而不是文本文件之类的小文件?我有这些5 MB或1 GB的文件,我想编码,我们是否可以达到32位的限制?错误:输入长度=147058392 EncodeToFile返回的算术结果超过32位。0x80070216(WIN32:534错误\u算术\u溢出)CertUtil:-encodehex命令失败:0x80070216(WIN32:534错误\u算术\u溢出)CertUtil:算术结果超过32位。大小的生成限制是什么?@unknownunknown-CertUtil大小限制未记录。其他人已经测试并确定base64编码源限制为74472684字节。十六进制编码限制小于21510272字节。Powershell能够对base64和hex进行编码/解码,但我不知道大小限制。如果这对你不起作用,我想你需要找一个第三方实用程序。我已经将它缩小到29个文件,而不是一个文件,这样它就可以工作了,谢谢你的工作。有没有办法使用像GB或5MB这样的大文件,而不是像文本文件这样的小文件?我有这些5 MB或1 GB的文件,我想编码,我们是否可以达到32位的限制?错误:输入长度=147058392 EncodeToFile返回的算术结果超过32位。0x80070216(WIN32:534错误\u算术\u溢出)CertUtil:-encodehex命令失败:0x80070216(WIN32:534错误\u算术\u溢出)CertUtil:算术结果超过32位。大小的生成限制是什么?@unknownunknown-CertUtil大小限制未记录。其他人已经测试并确定base64编码源限制为74472684字节。十六进制编码限制小于21510272字节。Powershell能够对base64和hex进行编码/解码,但我不知道大小限制。如果这对你不起作用,我想你需要找一个第三方实用程序。我已经把它缩小到29个文件,而不是一个,这样它就可以工作了,谢谢你的工作。