Windows 对文件夹中的每个文件运行命令,然后保存输出
我刚开始编写批处理脚本,希望能得到一些帮助 我有一个图像文件夹。我想把这些图像一张一张地卷曲到我在网上制作的图像分类器上。这将向我发送一个结果 然后,我想将服务器的响应保存到一个文件中-让我们保持简单,例如CSV,格式如下:Windows 对文件夹中的每个文件运行命令,然后保存输出,windows,powershell,csv,batch-file,Windows,Powershell,Csv,Batch File,我刚开始编写批处理脚本,希望能得到一些帮助 我有一个图像文件夹。我想把这些图像一张一张地卷曲到我在网上制作的图像分类器上。这将向我发送一个结果 然后,我想将服务器的响应保存到一个文件中-让我们保持简单,例如CSV,格式如下: File, Response 因此,我知道要在每个文件夹上运行批处理,我可以执行以下操作- for /f %%f in ('dir /b c:\') do echo curl -X POST -F "images_file=@%%f" "https://gateway-a
File, Response
因此,我知道要在每个文件夹上运行批处理,我可以执行以下操作-
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%都是批处理脚本的新手。您可以在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
}
我只是给了你出发的路。我没有检查完整的批次代码。
希望对您有所帮助。如果您想使用batch,可以执行以下操作:
@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命令的正确性,也无法让在它之前回音。但我知道,您实际上可以在Windows中使用-o
标志指定要将输出写入的文件。
命令(不带任何标志/选项)是在目录中循环文件的另一种方式。如果您仍然希望使用for/f%%f in('dir/b…')do
-样式(可能是因为您希望处理图像的顺序),您只需将%%G in(“%imagedir%*”)do(
替换为for/f%%f in('dir/b”%imagedir%”)do(
。我将目录保存在变量imagedir
中,这样更容易更改。但是如果您更改它,请不要忘记末尾的\
(如果您使用my for命令),也不要添加双引号(我将它们添加到for
命令中)。请注意,这将处理目录中的所有文件。如果需要,您可以使用%imagedir%\*.jpg”“%imagedir%\*.gif”
指定扩展名。最后我要说的是,我添加了
setlocalenabledelayedexpansion
以供使用。实际上,这只是因为我将curl
操作的结果保存在文件名的变量resultfile
中。在批处理中,将用于块(用于…(…)
),以及其他用()
(如IF
-blocks)分隔的块,被解析为一个命令(就好像它们是在行上写入的一样)。如果不使用一些特殊的“技巧”,就不可能更改变量的值并在同一命令(或同一行)中读取新值。延迟扩展就是其中之一。当您对变量使用延迟扩展时,您会使用!
而不是%
。由于resultfile
将在每次迭代中更改,因此我使用!resultfile!
而不是%resultfile%
如果不想将outputfile的名称保存在变量中,可以删除变量的使用和延迟扩展(也可以删除末尾的EndLocal
)
祝你好运