batch-file - 如何拖放多个文件?
问题描述
我正在制作批处理 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 来过滤页眉/页脚。有一些选项可以控制 CERTUTIL 输出的格式。
我假设您希望编码的输出文件与源文件位于同一目录中。
由于参数将是一系列文件名(路径),因此您可以简单地%*
使用 FOR 进行迭代。
@echo off
for %%F in (%*) do certutil -encodehex -f %%F %%F.b64 1
上面的另一个不错的结果 - 您可以在命令行上使用通配符调用脚本,并且 FOR 循环将迭代所有匹配的文件。
但是拖放时存在一个潜在问题 - 如果文件有空格,Windows 会正确地将文件括在引号中。&
但如果名称没有任何空格,它不会将文件括在引号中。
因此,如果您拖放任何&
不包含空格的文件名,那么上面的简单解决方案将失败。
如果您想处理名称中的拖放,&
则代码要复杂得多。
推荐阅读
- ruby - Ruby 错误:`calcular_valor_final':未定义的方法`*'
- entity-framework - 如何在实体框架代码第一个迁移文件中生成默认sql值
- c++ - dart 和 c++ 之间的套接字加密和解密
- jmeter - 通过命令行值触发条件
- apache-kafka - Kafka在产生新主题时复制了已删除的主题
- objective-c - 为什么alloc返回nil?(目标-C)
- r - 在r中格式化日时分第二列
- r - 在R中乘以相似的命名合并列
- python - Keras Transfer-Learning 设置 layers.trainable 为 True 没有效果
- sql - REGEXP_SUBSTR:正则表达式错误中的括号不匹配