プロが教えるわが家の防犯対策術!

サーバー上のフォルダのlogファイルをforで処理したいのですができません。

遅延環境変数設定済みです。

バッチファイルで
Logをソフトを使って同じサーバー上フォルダに、
CSVファイルとして連続出力処理したいのですが、
できません。

ソフトですが、
引数は、1)LOG名2)出力CSV名で動きます。

たぶんディレクトリ引き渡しがうまくできていないと思いますが、

cd /d %~dp0 使ってます。

PC上でなら可能なのですが、
ファイルは、*.Log指定でfor処理しています。
OSはWindows7Proです。

それなりにgoogle見ましたがうごかないので、
よろしくお願いいたします。

質問者からの補足コメント

  • バッチファイル後で、追加します。

      補足日時:2019/06/27 18:30
  • うーん・・・

    @echo off

    setlocal enabledelayedexpansion

    set num=1

    cd /d %~dp0

    copy nul %~dp0log999.csv

    for %%i in (*.log) do(

    call %~dp0Hoge.exe %%i hoge!num!.csv

    type %dp0hoge!num!.csv >> %~dp0log999.csv

    set /a num=!num!+1

    )

    CMDでは、UNCパスは現在のディレクトリとしてサポートできない
    →%%iが渡せない。
    であってるのか?
    かといって、直し方がわからない。

      補足日時:2019/06/27 22:35

A 回答 (2件)

こちらで動作確認してみましたが、以下のような感じにすると動作するかと思います。



――――――――――――――

@echo off

cls

setlocal enabledelayedexpansion

set num=1

pushd "%Temp%"

pushd "%~dp0"

if not "%ErrorLevel%"=="0" exit /b

copy nul log999.csv

for %%i in (*.log) do (

call "%~dp0Hoge.exe" %%i hoge!num!.csv

type "%~dp0hoge!num!.csv" >> "%~dp0log999.csv"

set /a num=!num!+1

)

popd

――――――――――――――

「cls」は、最初に出るメッセージを消す為のものです。特に処理的な意味はありません。

「pushd」は、「cd /d」と同じようにカレントディレクトリを変更するコマンドですが、UNCパスを指定すると、自動で空きドライブに対象フォルダがマップされ、アクセス出来るようになります。

その後、「popd」を実行すると、カレントディレクトリは以前のフォルダへ戻り、ドライブのマップも解除されます。

ただ、「popd」が実行される前にコマンドプロンプトを右上の「×」ボタン等で閉じてしまうと、対象フォルダがドライブとしてマップされたままになりますので、その場合は、「コンピューター」を開き、対象ネットワークドライブを右クリックし、「切断」をクリックするとドライブの割り当てが解除出来ます。

ネットワークドライブの切断をコマンドプロンプトやバッチファイルで実行する場合は、「net use ドライブレター: /delete」という書式で実行します。例えば、Xドライブを切断したい場合は「net use X: /delete」を実行します。

「pushd "%Temp%"」は、カレントディレクトをTempフォルダに変更する処理です。Windowsフォルダがカレントディレクトリだと不安なので、念のための変更です。

「if not "%ErrorLevel%"=="0" exit /b 」は、「もし、エラーレベルが0でない(正常終了ではない)場合は、このバッチファイルを終了する」という処理です。つまり、カレントディレクトリの変更に失敗した場合です。これも念の為の処理です。

ざっと動作確認しただけなので、完璧ではないかも知れませんが、ご自身の環境や用途に合わせて手直しして使ってみてください。
    • good
    • 1
この回答へのお礼

ありがとう

素晴らしくわかりやすい回答、ありがとうございます。

pushd,popdについては、勉強させていただきます。

サーバー上で動いてます。

解決です。

驚きと達成感を与えてくれたこの回答、ベストアンサーとさせていただきます。

お礼日時:2019/06/28 22:04

出来れば、バッチファイルの内容をこちらに補足した方が的確な回答が付くかと思います。

エラーが確認出来るのであれば、簡略化した内容でも構いません。アドレスも適当なものに変えて構いません。

ソフトにつきましても、自作されたものではなく、フリーウェアやシェアウェアであれば、ソフト名を記載すると良いかと思います。
    • good
    • 1
この回答へのお礼

返信どうもです。

お礼日時:2019/06/27 18:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!