创build一个可以处理拖放多个文件的batch file

我试图通过batch file运行它们来处理几个文件。 我希望batch file能够获取所有文件(又称转储;或拖放)并处理它们。

目前我可以使用下面的批处理命令分别处理这些文件:

"C:\Program Files\Wireshark\tshark.exe" -r %1 -Y "filter" -o "uat:user_dlts:\"User 8 (DLT=155)\",\"pxt\",\"0\",\"\",\"0\",\"\"" -o "gui.column.format:\"Info\",\"%%i\""> %1".filter.txt" 

我正在做同样的事情,但能够简单地将文件拖放到batch file进行处理。

对于那些对上述batch file感到困惑的人:
-r读取input文件,其全文件地址(包括扩展名)被%1捕获
-Y过滤掉拖放文件的某些部分
-o为运行可执行文件设置首选项(由“”s中的东西定义):tshark.exe
– >将结果redirect到stdout
– %1“.filter.txt”将结果输出到一个名为“draggedfilename.filter.txt”的新文件

请不要在其他地方使用此代码,除非帮助我使用此代码(由于它正在使用的应用程序)。 为了保密,我在这个版本的代码中改了几个标志。 让我知道如果你有任何问题!

Solutions Collecting From Web of "创build一个可以处理拖放多个文件的batch file"

你可以使用goto进行循环,并像这样转换(详见rem注释):

 :LOOP rem check first argument whether it is empty and quit loop in case; rem `%1` is the argument as is; `%~1` removes surrounding quotes; rem `"%~1"` therefore ensures that the argument is always enclosed within quotes: if "%~1"=="" goto :END rem the argument is passed over to the command to execute (`"%~1"`): "C:\Program Files\Wireshark\tshark.exe" -r "%~1" -Y "filter" -o "uat:user_dlts:\"User 8 (DLT=155)\",\"pxt\",\"0\",\"\",\"0\",\"\"" -o "gui.column.format:\"Info\",\"%%i\""> "%~1.filter.txt" rem `shift` makes the second argument (`%2`) to be the first (`%1`), the third (`%3`) to be the second (`%2`),...: shift rem go back to top: goto :LOOP :END 

使用%*而不是%1

例如:

 @echo off for %%a in (%*) do ( "C:\Program Files\Wireshark\tshark.exe" -r "%%a" -Y "filter" -o "uat:user_dlts:\"User 8 (DLT=155)\",\"pxt\",\"0\",\"\",\"0\",\"\"" -o "gui.column.format:\"Info\",\"%%i\""> "%%a"".filter.txt" ) 

用正确的变量替换%%i