2017-03-29 7 views
2

"index"という名前のtxtファイルを作成しようとしています。これには一連のファイル名のリストが含まれています。ファイルは同じ命名フォーマットに従います。01 - aaa; 02 - bbb; 03 - ccc etcここで、文字はファイルの名前を表します。次のように私は名前でTXTファイルを作成したい:forループのトークンとワイルドカード

AAA

BBB

CCCを

つまり、私はその後、別の場所にコピーすることができ、垂直リスト内の数字、ハイフンと拡張子を削除します。

これは私がこれまでに書いたコードです:これは正しくファイルをループし、index.batを無視します(私が実行しているファイルである)が、それは唯一の第三のトークンを出力

@echo off & setlocal EnableDelayedExpansion 
for /f "tokens=3* delims= " %%g in ('dir /b /o:n') do (
    if not %%~nxg==index.bat (
     echo %%g >> index.txt 
    ) 
) 
endlocal 

をし、後続のすべてのトークンではありません。 *ワイルドカードは文字列の残りの部分全体を出力するが、動作しないように見えるはずです。

その他の一般的な改善点は評価されます。

EDIT:Magooとnpocmakaの答えは以下のとおりです。 %% hにはワイルドカード情報が含まれています。 "tokens=2* delims= "は、2番目のトークンを%% gに、3番目のトークンを%% hに割り当てます。次のように

作業コードは次のとおりです。

@echo off & setlocal EnableDelayedExpansion 
for /f "tokens=2* delims= " %%g in ('dir /b /o:n') do (
    if not %%~nxg==%%~nx0 (
     set name=%%h 
     echo !name:~0,-4! >> index.txt 
    ) 
) 
endlocal 

if not %%~nxg==%%~nx0は、私は拡張子を削除するには、サブストリングを行うことができるようにset name=%%hは、新しい変数を作成し、ループからバッチファイルを除外します。 echo !name:~0,-4!は部分文字列であり、ファイル拡張子を除外するために最後の4文字を除く文字列全体を選択し、次に>> index.txtは、同じディレクトリに必要な文字だけを含む新しいテキストファイルを作成します。

+0

'*'は別のトークンです。 'echo %% g %% h 'で試すことができます – npocmaka

+0

デフォルトではpowershellがインストールされていなければなりません。 –

+0

@npocmakaその出力は何でしょうか。申し訳ありませんが、私のPCから離れているので、動作確認ができません。 %% hの値は何ですか? –

答えて

0

コードでは、%%hには残りの行が含まれます。

%%hに3番目以降のトークンが含まれる場合は、tokens=2*に変更することを検討してください。

dir/a-dを追加して、遭遇したディレクトリ名を無視することができます。

+0

%% hの値はどのように使用しますか? forループに%% gを設定してエコーすることはできますか?申し訳ありませんが、私が知っている基本的な質問。まだ勉強してる。 –

+0

'tokens = 3 * ... %% g 'の構文は、"トークン3を '%% g'に、トークン3の後の行を' %% h 'に代入することを意味します。 '' tokens = 1' 2,3 ... %% a'の場合、トークン1は「%% a」、2は「%% b」、3は「%% c」に割り当てられる。選択されたメタ変数 '%% g'が割り当てられた最も低いトークン番号を有するので、トークンリストから選択された各トークンはアルファベット順に次のメタ変数に割り当てられるので、元のコードによって '%% h'が設定される。誤って解釈される可能性がある場合、トークンリストには '、'のような区切り文字が含まれていなければなりません。例えば ​​'12 *'は1,2と*または12と*を意味するかもしれないので、1,2 *は二番目に必要です – Magoo

+0

ありがとう、これは動作します! 将来、この質問に出てくる人のために、私の作業コードは上の質問の編集です。 –

0

これは私のために働く、ちょうど変更:

"tokens=2* delims=-" 

をあなたが唯一のプリインストールのアプリを使用することができた場合は、これはいいPowerShellの1つのライナーです:

gci C:\folder -Exclude "index" | % {($_ -split "-")[1]} | out-file C:\index.txt 

それはに応じて修正が必要な場合がありますあなたのニーズ。

+0

複数の単語を含むファイル名で試してみませんか?すなわち、ファイル名 "01 - a a a"に "tokens = 3 * delims ="と表示されます。ハイフンの後ろには複数のトークンがあり、*ワイルドカードはそれらをキャプチャしていないようです。ありがとう。 –