"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
は、同じディレクトリに必要な文字だけを含む新しいテキストファイルを作成します。
'*'は別のトークンです。 'echo %% g %% h 'で試すことができます – npocmaka
デフォルトではpowershellがインストールされていなければなりません。 –
@npocmakaその出力は何でしょうか。申し訳ありませんが、私のPCから離れているので、動作確認ができません。 %% hの値は何ですか? –