我有一个小的Windows批处理脚本,它只是打印出所有的命令行参数(proba.bat)。
@echo off
:loop
if "%~1"=="" goto cont
echo %1
shift & goto loop
:cont
我希望这个脚本能够打印所有 .mp4 文件,如果我像这样调用它:
proba *.mp4
但实际上它只是字面打印了“*.mp4”。在Linux上这很容易,但我在这里无法让它正常工作。我做错了什么?
谢谢。
我有一个小的Windows批处理脚本,它只是打印出所有的命令行参数(proba.bat)。
@echo off
:loop
if "%~1"=="" goto cont
echo %1
shift & goto loop
:cont
我希望这个脚本能够打印所有 .mp4 文件,如果我像这样调用它:
proba *.mp4
以下是您试图执行的模拟操作:
@echo off
for %%a in ("%~1") do echo "%%a"
%~1
。该链接中带有波浪号的变量完全不同。ssnobody 写道:“根据 For 命令的文档,这是有效的,因为在 For 循环内部,%~1 "扩展" %1,并产生与传统通配符扩展非常相似的结果。 - foxidrive"%~1"
中起到了这个作用,原因是为了处理长文件名和路径以及批处理文件中的毒瘤字符。正如你在上面看到的那样,在for
命令中它没有其他的功能。 - foxidrive%~1
中的 ~
会从 %1
的值中去掉任何引号。B) "%~1"
中的引号会重新添加本地引号。这种组合确保您只有一个值上的一组引号。C) for %%a in ("%~1")
会展开 "%~1"
值中的任何通配符,然后将每个值作为 %%a
的值传递到 for 循环的主体中。 - Jesse Chisholm
dir %1
而不是echo %1
,如果你想要一个简单的列表,请使用/b
。否则,请查看for
命令。 - AjV Jsy*.mp4
,而不是文件列表。 - Stephan