Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 对文件夹中的每个文件运行命令,然后保存输出_Windows_Powershell_Csv_Batch File - Fatal编程技术网

Windows 对文件夹中的每个文件运行命令,然后保存输出

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

我刚开始编写批处理脚本,希望能得到一些帮助

我有一个图像文件夹。我想把这些图像一张一张地卷曲到我在网上制作的图像分类器上。这将向我发送一个结果

然后,我想将服务器的响应保存到一个文件中-让我们保持简单,例如CSV,格式如下:

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

祝你好运