2016-12-19 10 views
2

私はバッチスクリプトを初めて作成して助けを求めていました。フォルダ内のすべてのファイルに対してコマンドを実行し、出力を保存する

私は画像のフォルダを持っています。これらの画像のそれぞれを、ウェブ上で作成した画像分類子に1つずつコピーしたいと思います。これは私に結果を送るでしょう。

私は、ファイルにサーバーの応答を保存したい - レッツは、それが簡単なこの形式で、CSVを言う保つ:

File, Response 

だから私は、各フォルダにバッチを実行するために知って、私は次を行うことができます -

for /f %%f in ('dir /b c:\') do echo curl -X POST -F "[email protected]%%f" "https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify?api_key=abcdefgh&version=2016-05-20"* 

私はどういうわけか ">>"を使用して結果ファイルを出力することができます。

私はバッチスクリプトを実行しているので、これをまとめて、CSVを作成する方法がわかりません。誰も助けることができますか?私は、90%の人がバッチスクリプティングを始めたばかりだと思う。

答えて

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 '[email protected]%%f' 
$result | ConvertTo-Csv | Out-File "D:\outputfile.csv" -Append -Force 
} 

私はちょうどあなたに方法を与えました。私は完全なバッチコードを実行しませんでした。 あなたのお役に立てば幸いです。

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 "[email protected]%%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コマンドの正しさを検証し、その前にechoを聞かせすることはできませんよcurlで経験したことないです。しかし、私はあなたが実際に-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 forコマンドを使用する場合)、二重引用符を追加しないでください(私はFORコマンドで追加します)。これはディレクトリ内のすべてのファイルを処理することに注意してください。たとえば、"%imagedir%\*.jpg" "%imagedir%\*.gif"をGIFやJPEG画像のみに使用したい場合、を指定すると、を指定できます。
最後に、SetLocal EnableDelayedExpansionを追加してdelayed expansionを使用したとします。実際には必要なのは、操作の結果が保存されるファイルの名前を変数resultfileに保存したからです。バッチでは、FOR-ブロック(FOR ... (...))、および()IF -block)で区切られた他のブロックは、1行のコマンドとして解析されます(行内に書かれているかのように)。特別な "トリック"を使用せずに、同じコマンド(または同じ行)で変数の値を変更し、その新しい値を読み取ることは実際には不可能です。遅延拡張もその1つです。変数に遅延拡張を使用すると、%ではなく、!で囲みます。各反復でresultfileが変更されるため、%resultfile%の代わりに!resultfile!を使用します。
出力ファイルの名前を変数に保存しない場合は、変数の使用と遅延拡張を削除できます(末尾のEndLocalも削除してください)。

幸運を祈る!