1

ディレクトリ内で.log拡張子のファイルを再帰的に検索したい。バッチファイルで以下のコマンドのようにしようとしています。

for /R  %%A in (*.log) do echo %%A >> All_logs.txt

私もこれを試しました:

for /R  %%A in (*.log) do echo %%~nxA >> All_logs.txt

しかし、私は次のようにフルパスを取得しています:

D:\Folder1\sub_folder1\bootmicro.log
D:\Folder1\sub_folder2\debug.log 

また

bootmicro.log
debug.log

それぞれ。

パス D:\Folder1 でバッチ ファイルを実行しているので、検索結果は次のようになります。

sub_folder1\bootmicro.log
sub_folder2\debug.log

さらに、同じバッチ ファイルで、以下のような結果のファイル名を使用してフォルダーを作成します。

sub_folder1_bootmicro_log_Analysis
sub_folder2_debug_log_Analysis

また

sub_folder1_bootmicro.log_Analysis
sub_folder2_debug.log_Analysis

どうすればこれをすべて行うことができますか?

4

2 に答える 2

3

相対パスで呼び出すxcopyと、相対パスでコピーするファイルのリストを取得します (/lつまり、リストのみを取得します)。

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "tokens=1,* delims=\" %%a in ('
        xcopy /l /s .\*.log "%temp%"
    ') do if not "%%b"=="" echo(%%b

for /fループは、リスト内の各ファイルの先頭を (区切り記号としてバックスラッシュを使用して) 削除するリストを処理します.\

からの出力xcopyにはファイル数の終了行が含まれ、この行には 2 番目のトークンがないifため、末尾に空の行を避けるために が含まれています。

フォルダーの作成では、文字列の置換を処理するために遅延展開が必要になります!が、ファイル/フォルダー名に含まれる問題を防ぐために、必要に応じて有効/無効にする必要があります。

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "tokens=1,* delims=\" %%a in ('
        xcopy /l /s .\*.log "%temp%"
    ') do if not "%%b"=="" (
        echo(%%b
        set "target=%%b"
        setlocal enabledelayedexpansion
        for %%c in ("!target:\=_!") do (
            endlocal
            md "%%~c_Analysis"
        )
    )
于 2015-09-14T09:12:04.903 に答える
0

forfiles と同様

for /F "usebackq delims=" %%a in (`forfiles /s /m *.txt /C "cmd /c echo @relpath"`) do (
  set "myfile=%%~a"
  setlocal EnableDelayedExpansion
  set "myfile=!myfile:~2!
  for %%c in ("!myfile:\=_!") do (
    endlocal
    echo md "%%~c_Analysis"
  )
)
Exit /B
于 2015-09-14T17:23:28.923 に答える