我是编写批处理脚本的新手,希望得到一些帮助。
我有一个图像文件夹。我想逐一将这些图像逐个转换为我在网上制作的图像分类器。然后这会给我一个结果。
然后我想将服务器的响应保存到文件中 - 让我们保持简单,比如说CSV,格式如下:
File, Response
所以我知道在每个文件夹上运行Batch,我可以执行以下操作 -
for /f %%f in ('dir /b c:\') do echo curl -X POST -F "images_file=@%%f" "https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify?api_key=abcdefgh&version=2016-05-20"*
我知道,我可以使用“>>”以某种方式将结果传输到输出文件中。
我不知道如何将它们放在一起,以及如何在运行批处理脚本时创建CSV。有人可以帮忙吗?我认为我90%只是批处理脚本的新手。
答案 0 :(得分:0)
你可以在powershell中做这样的事情: 根据您的要求更改占位符。
$dir_files=Get-ChildItem "C:\"
foreach($file in $dir_files)
{
$result=Invoke-WebRequest 'https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify?api_key=abcdefgh&version=2016-05-20' -Method Post -Headers 'images_file=@%%f'
$result | ConvertTo-Csv | Out-File "D:\outputfile.csv" -Append -Force
}
我刚刚给你出发的方式。我没有查看完整的批处理代码。 希望它可以帮到你。
答案 1 :(得分:0)
如果您想使用批处理,可以执行以下操作:
@echo
SetLocal EnableDelayedExpansion
set imagedir=C:\
set csvfile="C:\results.csv"
FOR %%G IN ("%imagedir%*") DO (
set resultfile=%%G.out
echo curl -X POST -F "images_file=@%%G" "https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify?api_key=abcdefgh&version=2016-05-20"* -o "!resultfile!"
echo %%G, !resultfile! >> %csvfile%
)
EndLocal
exit /b 0
我对curl
没有经验,所以我无法验证您的curl命令的正确性,并让echo
在它之前。但我知道您实际上可以使用-o
标志指定一个文件来将输出写入Windows
FOR
命令(没有任何标志/选项)是循环遍历目录中文件的另一种方法。如果您仍想使用for /f %%f in ('dir /b ...') do
- 样式(可能是因为您希望处理图片的顺序),则只需将行FOR %%G IN ("%imagedir%*") DO (
替换为for /f %%f in ('dir /b "%imagedir%"') DO (
即可。我将目录保存在变量imagedir
中,然后更容易更改。但是如果你改变它,不要忘记最后的\
(如果你使用我的for-command)并且不要添加双引号(我将它们添加到FOR
中命令)。请注意,这将处理目录中的所有文件。如果需要,您可以指定扩展程序,例如仅使用"%imagedir%\*.jpg" "%imagedir%\*.gif"
GIF和JPEG图像。
最后我说我添加了SetLocal EnableDelayedExpansion
来使用delayed expansion。实际上只需要它,因为我在变量curl
中保存了将保存resultfile
操作结果的文件名。在批处理中,FOR
-block(FOR ... ( ... )
)以及用( )
(作为IF
- 块)分隔的其他块被解析为单个命令(就像它们一样)写在线)。实际上不可能更改变量的值并在同一命令(或同一行)中读取该新值而不使用某些特殊的"技巧"。延迟扩张就是其中之一。当您对变量使用延迟展开时,请使用!
而不是%
将其包围。由于resultfile
会在每次迭代中发生变化,因此我使用!resultfile!
代替%resultfile%
如果您不想将输出文件的名称保存在变量中,则可以删除变量的使用和延迟扩展(也可以删除末尾的EndLocal
)。