我正试图通过批处理文件来处理多个文件。我希望批处理文件能够获取所有给定的文件(也称为转储文件;或拖放文件)并进行处理。
目前,我可以使用以下批处理命令单独处理文件:
"C:Program FilesWiresharktshark.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"
我想做与上面相同的事情,但可以简单地将文件拖放到要处理的批处理文件上。
对于那些对上述批处理文件感到困惑的人:
-r读取输入文件,其完整文件地址(包括扩展名)由%1捕获
-Y过滤掉拖动的&删除的文件
-o设置运行可执行文件的首选项(由"中的内容定义):tshark.exe
->将结果重定向到stdout
-%1".filter.txt"将结果输出到一个名为"draggedfilename.filter.txt"的新文件
请不要在其他任何地方使用此代码,除非帮助我使用此代码(由于它所用于的应用程序)。出于隐私考虑,我更改了此版本代码中的几个标志。如果你有任何问题,请告诉我!
使用%*
而不是%1
。
示例:
@echo off
for %%a in (%*) do (
"C:Program FilesWiresharktshark.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
替换为右侧变量。
您可以像这样使用goto
和shift
进行循环(有关详细信息,请参阅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 FilesWiresharktshark.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