テキストファイルを開かないcmdバッチFOR / Fコマンド


2

以下の表面的にシンプルなスクリプトが機能するように、2日間試してきました。

for /F "eol=*" %%A in  (c:/users/SCTMP000/server.txt) do (echo %%A)

これ自体が目的のコードの削減であり、各ドメインに対してPING/ TRACERTコマンドを発行し、出力を別のテキストファイルにパイプするために、ドメインのリストである上記のテキストファイルをスクロールするつもりでした。しかし、この単純なワンライナーでさえファイルを処理しません。

MSDN、StackOverflow、このサイト、および多くの個人開発者ブログで上記の無数のバリエーションを見てきましたので、私は正しい球場にいると感じますが、私のものは機能しません!ファイル名とそのパスのレンダリング方法(つまり、引用符なし、単一引用符でラップ、二重引用符でラップ)に応じて、次のように表示されます。

[引用なし]-なし:ファイルを開くアクティビティがないため、行ごとにECHOがありません

[二重引用符]-ECHOされたフルパス名、つまりc:/users/SCTMP000/server.txt

[単一引用符]-完全なファイルが実際にメモ帳で開きます!!

したがって、パスは正しいですが、スクリプトをバッチファイルとして実行したり、コマンドをインタラクティブに実行したりしても、実際にテキストファイルを開いてスクロールすることはできません。また、DELIMS、TOKENS、EOLなど、多くのラインオプションを試してみましたが、成功していません。

私は何を間違えていますか?前もって感謝します。


for /fDOSにはありません。CMDとDOSは全く異なるものです
phuclv

ご回答ありがとうございます。はい、私は私の年齢の遺産を恐れています-1989年以来CMDのようなツールを使用しており、新しいツールがロールアウトされることを時々忘れます!これは確かにCMD.EXEです。現在、他の2台のWin 10マシンでコマンドを試行しています。
-robgoch

あなたの行は、Windows 10でうまく機能します。あなたの問題は別の場所にあると思います。おそらく、アクセス許可の問題、ExplorerまたはNotepadファイルにアクセスすることができますが、あなたのCMDインスタンスはできないのですか?問題を特定することをお勧めします。ファイルを別の場所に移動し、その場所に同じ名前で新しいファイルを作成し、別の場所で別のファイルを完全に試してください。問題は存在します(ファイル、パス、格納フォルダーなど)。
トマーゴディンガー

考えてみると、おそらくファイルの内容を16進数のビューアー/エディターで確認し、それが本当に単なるテキストであり、最初は疑わしいものがないことを確認する必要があります。ファイルの値がゼロ(0x00など)で始まる場合、説明したとおりの動作が得られます。FORループは何も出力しませんがNotepad、ファイルを正常に開くことができます(先頭にスペースなどが表示される場合があります) 、ただし、すべて同じように開きます)。
トマーゴディンガー

ありがとう、トマー。かなり予想どおり、自宅のWin 10ラップトップの1つでうまく動作しているので、私の職場にはCMDに関して奇妙な権限があると推測しています:シニアネットワークの人々は非常にPowerShell指向です(おそらく同じですか!管理者にユーザーを確認してもらいます。
-robgoch

回答:


1

リストに配置したドメイン名を含むサンプルリストファイルを使用して、これを説明した結果で動作させることができました。私はFOR /F "USEBACKQ TOKENS=*" %%A IN ("filelist")そのようなものを使用しました。

私が使用しようUSEBACKQTOKENS=*してFOR / Fの Iは、以下にリストアップしました理由のために、ファイルの一覧から読み取るループスクリプトロジックの説明ので、オーバー読み、確認するためにそれをテストセクションを。


作業バッチの例

FOR /F "USEBACKQ TOKENS=*" %%A IN ("c:\users\SCTMP000\server.txt") DO (ECHO %%~A)

スクリプトロジックの説明

  • USEBACKQで使用されるオプションFORループは、ファイルリストの名前またはそれはパスだ場合、ファイルリストはまだ読むことができるようになりますそれにスペースを持って、あなたは、ファイルリストのパスを引用倍にする必要があります

    • 例えば SET FileList=C:\Folder Name\File List.txt
      • ないとFORのループは、このような場合にはアウトエラーうUSEBACKQ
  • TOKENS=*で使用されるオプションFORループは、その値がそれはあなたがそれを使うだろう、なぜこれがドメインに適用すべきではないにもかかわらず、それにスペースが含まれている場合でも、ファイルリストから読みだと全体の値が返されたことを確認します

    • たとえば、ファイルリストにはの値がある"test my file.txt"ため、値には行にスペースがあります

      • ないとFORの予想通りループにのみ(すなわち、第1のスペースではなく値の前に、その行の値部分を返します)TOKENS=*"test"

不要な場合でもこれらのオプションを使用しても害はないようであり、そのような値または変数をスクリプトの組み合わせに導入した場合、そのようなケースを適切に処理できます。


さらなるリソース

  • / F
  • タスクスケジューラタスクのトラブルシューティング
  • FOR /?

        tokens=x,y,m-n  - specifies which tokens from each line are to
                          be passed to the for body for each iteration.
                          This will cause additional variable names to
                          be allocated.  The m-n form is a range,
                          specifying the mth through the nth tokens.  If
                          the last character in the tokens= string is an
                          asterisk, then an additional variable is
                          allocated and receives the remaining text on
                          the line after the last token parsed.
        usebackq        - specifies that the new semantics are in force,
                          where a back quoted string is executed as a
                          command and a single quoted string is a
                          literal string command and allows the use of
                          double quotes to quote file names in
                          file-set.
    
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.