2017-09-08 10 views
0

ルートフォルダ「ROOT」 その中に日付とそれぞれのフォルダにサブフォルダがあります 私は各フォルダのリストを取得したいそれらのサブフォルダはパスがなくてもcsvのtxtファイルに保存されますが、ファイル名はフォルダ名になります。たとえば、フォルダが "1.1" "2.1"で、内部のサブフォルダが "sub1、sub2、co"の場合 は1.1.txtという名前の1.1.txtという名前のテキストファイルを持っています。 このフォルダとサブフォルダを別々のリストに一覧表示するバッチ

1.1

  • サブfolder1aよう
  • サブfolder2a

2.1

1.Subが、これは私がこれまで

for %%G in (.) do set curpath=%%~nxG 
dir /b /s /a:d >%curpath%.txt 

はので、私は現在のフォルダ名を持つファイルとすべてのサブフォルダが、とを取得しなければならないものである

folder2b

1.Subをfolder1b私が望んでいない道。 また、私は1つのファイルでそれを望んでいません。私は正確に各フォルダのどのサブフォルダを知りたいのですか?それはフォルダは、各フォルダにあるかの列に秀でるためにいくつかの方法でそれを保存することを考え は、私が本当に単一のドット(.)

答えて

1
:: Q:\Test\2017\09\08\SO_46118986.cmd 
@Echo off 

CD /D A:\Root 

for /R %%A in (.) Do (
    PushD "%%A" 
    Del "%%~nxA.txt" >Nul 2>&1 
    For /F "delims=" %%B in (
     'Dir /B/AD 2^>Nul ^|Find /V ""' 
    ) Do Echo:%%~nxB >>"%%~nxA.txt" 
    PopD 
) 
  • For /rを必要とするものである本当の助けであるサブ(すべて列挙します)ディレクトリにあります。 for /?またはfor /rをご覧ください。
  • ​​ディレクトリにステップインし、スタック上の場所を保存するか、前の場所に復元します。
  • dirはファイルに追加されるので、それが空であることを確認する必要があります。それ以外の場合は、連続して実行されると大きくなります。したがって、ファイルは最初に削除されます。 >NUL 2>&1は、ファイルが存在しない場合に起こり得るエラーメッセージと、このコマンドの通常の出力を抑制します。
  • For /f( 'command')を指定すると、コマンドの出力が解析されます。 for /?またはfor /fをご覧ください。
  • "delims="は、デフォルトの区切り文字のスペースで分割しません。

シミュレートされたツリー構造上のサンプル出力:

> tree . /F 
ROOT 
│ root.txt 
│ 
├───1.1 
│ │ 1.1.txt 
│ │ 
│ ├───Sub folder 1a 
│ └───Sub folder 2a 
└───2.1 
    │ 2.1.txt 
    │ 
    ├───Sub folder 1b 
    └───Sub folder 2b 

> for /r %A in (*.txt) Do type %A 
> type .\root\root.txt 
1.1 
2.1 

> type .\root\1.1\1.1.txt 
Sub folder 1a 
Sub folder 2a 

> type .\root\2.1\2.1.txt 
Sub folder 1b 
Sub folder 2b 
+0

クールうわー:)あなたがそう病気私は、現在のディレクトリ内のすべてのテキストファイルを持って変更する必要があるものも、理解していないそれぞれの行を説明することができます各フォルダに? – JJJ

+0

拡張答えを参照、現在のフォルダ内のすべてのテキストファイルを出力するには、コマンドライン '%A for(* .txt)で@type"%A "'を実行します。 – LotPings

+0

私はまだ1行目と2行目を理解していません。2 ^> Nul^| Find/V "" ' – JJJ

関連する問題