1

xml ファイルを生成するバッチ スクリプトを作成しようとしています。私が苦労している部分は、テキスト「@isTest」を含むディレクトリ内のファイルの名前(拡張子なし)をリストし、名前の前に特定の文字を追加することです。たとえば、ファイルのあるディレクトリで

a.cls
b.cls

このようなxmlファイルを取得したい

<runTest>a</runTest>
<runTest>b</runTest>

ファイルを一覧表示することはできましたが、名前を取得し、拡張子を削除し、余分な文字を追加する方法がわかりません。

findstr /s /i /m "@isTest" *.cls >> file.xml

どんな助けでも大歓迎です

4

2 に答える 2

1

FOR /F を使用して、任意のコマンドの結果を反復します (反復ごとに 1 行)。詳細については、コマンドプロンプトからHELP FORまたはFOR /?を入力してください。

再帰的な FINDSTR /Sオプションを使用しているため、出力にはパス情報も含まれる場合があります。

パスや拡張子なしで本当に名前だけが必要な場合は、次のようにします。

for /f "eol=: delims=" %%F in (
  'findstr /s /i /m "@isTest" *.cls'
) do (echo ^<runTest^>%%~nF^</runTest^>) >>output.xml

修飾子は値の~n名前だけを保持し、パスと拡張子の情報を破棄します。<特殊文字をエスケープした方法に注意してください>。したがって、それらはリダイレクト演算子として扱われません。

パスと名前を保持し、拡張子のみを削除する場合は、次のようにします~dpn

for /f "eol=: delims=" %%F in (
  'findstr /s /i /m "@isTest" *.cls'
) do (echo ^<runTest^>%%~dpnF^</runTest^>) >>output.xml

上記は、FINDSTR によって提供される相対パスを完全なパスに展開します。

相対パスのみを保持する場合は、FOR 変数修飾子を使用する代わりに、部分文字列操作を行う必要があります。ループ内で遅延拡張のオンとオフを切り替えて!、ファイル名に表示される可能性のあるものを保持します。

for /f "eol=: delims=" %%F in (
  'findstr /s /i /m "@isTest" *.cls'
) do (
  set "file=%%F"
  setlocal enableDelayedExpansion
  (echo ^<runTest^>!file:~0,-4!^</runTest^>)
  endlocal
) >>output.xml
于 2013-01-24T01:30:53.697 に答える
0
set noext=%file:~0,-4%
echo %noext% >> output.xml
于 2013-01-24T00:29:12.087 に答える