例えば、私は私の区切り文字として\
で、このような単一の行を解析したいと思います:見た目 - なぜトークン= *私のために働かないのですか?
c:\some directory\another directory\filename.ext
だから私は、変数を設定します。
set mydir=c:\some directory\another directory\filename.ext
このディレクトリには、すべての時間を変更します私はスクリプトを実行するので、どれくらいのトークンが文字列に入るのか分からないかもしれませんが、最終的には最後のトークンを差し引いた全体を収集したいと思います。問題は、すべてのトークンを使って構文解析をテストしようとするときにも、私が期待した結果を返すことができないということです。
私は
c: some directory
を取得しかし、私は
For /F "delims=\ tokens=*" %a in ("%mydir%") do echo %a %b
を使用する場合、私は
c:\some directory\another directory\filename.ext b%
を取得
For /F "delims=\ tokens=1-2" %a in ("%mydir%") do echo %a %b
使用する場合0
なぜこれが起こっていますか? tokens=*
を使用すると、区切り記号を無視しているようです。あなたがしたいと主張する(しかし、私は必要とされて%
Sを倍増してきたように、私はそれが
c: some directory
'*'手段へのラインの残りの部分は、1つのトークンにすべてをかけます。通常のメソッド 'echo%〜dp1'では何が問題になっていますか? 'call /? 'を参照してください。 –
FORコマンドのヘルプを参照してください。特に最後のセクション。 – Squashman
**絶対に 'for/F'とその' tokens'/'delims'を使ってパスを操作/変更/分割することは絶対にしないでください!前のコマンドが指摘しているように、すべてのパスを正しく処理するより良い方法があります(特殊パス(相対パス、ドライブのルートディレクトリ、 '。\ sub \ .. \ *' ...など)しても!ところで、あなたのコードフラグメントにはいくつかのタイプミスがあります - それらを修正してください(それらを再入力するのではなく、コピー/ペーストしてください)... – aschipfl