次の方法で共有

バッチが上手いこと動作しません

Anonymous
2022-03-15T02:45:03+00:00

以下のコマンドを実行すると、

rem リストを昇順でソートして重複していない行を抽出

PowerShell -command "Get-Content %LOGDIR%%TMPFILE2% | Sort-Object | Get-Unique -i -w 7 do echo %%C" >> %LOGDIR%%TMPFILE3%

のところで、

文字列に終端記号 " がありません。

+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException

+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

文字列に終端記号 " がありません。

+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException

+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

というエラーが出てしまいます。

おそらく、すごく基本的なことが問題になっているものかと思いますが、原因と解決法などご教授できましたらうれしいです。

よろしくお願いいたします。

rem @echo off

setlocal

set Y=%date:~0,4%

set M=%date:~5,2%

set D=%date:~8,2%

set LOGDIR="C:\temp\ESS-REC\Server\Log"

set RECFILE="E:\ESS REC\Server\Data%Y%%M%"

set TMPFILE1="tmpfile1.txt"

set TMPFILE2="tmpfile2.txt"

set TMPFILE3="tmpfile3.txt"

set TMPFILE4="tmpfile4.txt"

PAUSE

rem ファイルからz081490を除くファイル名のリストを抽出

for /f "delims=" %%A in ('dir /B %RECFILE%\*.rec ^| find /v "z081490"') do echo %%A >> %LOGDIR%%TMPFILE1%

PAUSE

rem 当日の日付でファイル名のリストを検索し、該当するもののリストを抽出

for /f %%B in ('find "_%Y%%M%%D%" ^< %LOGDIR%%TMPFILE1%') do echo %%B >> %LOGDIR%%TMPFILE2%

PAUSE

rem リストを昇順でソートして重複していない行を抽出

PowerShell -command "Get-Content %LOGDIR%%TMPFILE2% | Sort-Object | Get-Unique -i -w 7 do echo %%C" >> %LOGDIR%%TMPFILE3%

PAUSE

rem リストの行数をカウントし抽出

for /f %%C in ('find /c /v ""^< %LOGDIR%%TMPFILE3%') do echo %%C >> %LOGDIR%%TMPFILE4%

PAUSE

家庭向け Windows | Windows 10 | インターネットと接続

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

7 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2022-03-15T08:53:40+00:00

    © ウィンドウズスクリプトプログラマ - Windows Script Programmer 2022


    「これについては、「%LOGDIR%%TMPFILE2%」で引き渡された文字列に**「”」が入っていないかを確認**」

    につきましては、

    z080987_S_CWBPO4_20220315090545493_L.rec

    という記載が、zの後の数字やサーバーが違ったり、時間が違ったりするだけで

    特に「"」は含まれていませんでした。

    これは何なの。

    rem @echo off

    だから、見れば分かるはず。

    PowerShell -command "Get-Content %LOGDIR%%TMPFILE2% | Sort-Object | Get-Unique -i -w 7 do echo %%C" >> %LOGDIR%%TMPFILE3%

    は、powershellには、こう渡る。

    PowerShell -command "Get-Content "C:\temp\ESS-REC\Server\Log""tmpfile2.txt" | Sort-Object | Get-Unique -i -w 7 do echo %C"

    こんな風に"~"が解釈される。 powershellでは、"は"のエスケープ。(%%はバッチで%のエスケープ。) 結果、

    文字列に終端記号 " がありません。

    となる。

    set LOGDIR="C:\temp\ESS-REC\Server\Log"

    set RECFILE="E:\ESS REC\Server\Data%Y%%M%"

    set TMPFILE1="tmpfile1.txt"

    set TMPFILE2="tmpfile2.txt"

    set TMPFILE3="tmpfile3.txt"

    set TMPFILE4="tmpfile4.txt"

    ふつう、"で囲まないでしょう。やめたほうがよい。

    でも、そうするなら、外し方を知らないでどうする。

    %LOGDIR:"=%%TMPFILE2:"=%

    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Anonymous
    2022-03-15T05:48:45+00:00

    ゴメン

    >文字列に終端記号 " がありません。

    これについては、「%LOGDIR%%TMPFILE2%」で引き渡された文字列に「”」が入っていないかを確認

    返答で「do echo %%C」を削除していますが、forでの繰り返し処理が必要なければ・・・

    というか、私はPowerShellがわからないので、間違ってれば他の方からコメントくるかもしれない

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2022-03-15T05:16:57+00:00

    ありがとうございます。

    PowerShell -command "Get-Content %LOGDIR%%TMPFILE2% | Sort-Object | Get-Unique -i -w 7" > %LOGDIR%%TMPFILE3%

    に記載を変更すればいかがでしょうか。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2022-03-15T04:41:40+00:00

    そのエラーが発生する行に「%%C」がありますが、行頭にforなどがないんですが?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  5. 削除済み

    この回答は当社の行動規範に違反したため削除されました。 アクションを実行する前にこの回答を手動で報告したか、自動検出機能により特定しました。 詳細については、当社の行動規範を参照してください。


    コメントはオフになっています。 詳細情報