複数のディレクトリからファイルを削除するバッチファイルを作成するにはどうすればよいですか?
D:\L1\asdasda\L3\*.txt
D:\L1\dfghfghfh\L3\*.txt
D:\L1\tyutyugj\L3\*.txt
D:\L1\ytrtyrty\L3\*.txt
お気に入り:
D:
del "d:\L1\*\L3\*.txt"
barlop-questionerによる注記-
私はそれらのディレクトリを約100個持っています。フォルダは削除せず、ファイルのみを削除します。それらはすべてL3フォルダーを持っており、すべて同じ拡張子のファイルがいくつか含まれています。これらは単なる一時ファイルですが、自動的に削除されるわけではありません。
ワイルドカードフォルダからファイルを削除するバッチファイル
これは、このタイプのタスクを常に完了するために使用する簡単で単純なバッチスクリプトの例です。説明するように、ニーズに合わせて可変フォルダーパスをプラグインしました。
(変数ルートフォルダーとサブフォルダーを一番上に設定すると、それに応じてFOR /D
ループとFOR
ループが繰り返され、ロジックが指定するようにディレクトリをトラバースする残りの魔法が実行されます。 DEL /Q /F
ファイルの*.txt
コマンドを完了します)
@ECHO ON
SET SourceDir=D:\L1
SET SourceSubDir=L3
:: --// note the asterisk wildcard after SourceDir in the first FOR /D loop using X as the variable
:: --// note the X variable appended to the beginning of the second FOR (no /D switch here) loop in the SET part using Y as the variable
FOR /D %%X IN ("%SourceDir%\*") DO FOR %%Y IN ("%%~X\%SourceSubDir%\*.txt") DO DEL /Q /F "%%~Y"
GOTO EOF
注:コマンドプロンプトで手動でコピーアンドペーストしてこれを実行する場合は、FOR
の変数ループでは、すべての部分でパーセント記号の1つを削除する必要があるため、バッチスクリプトではなくコピーアンドペーストを使用して手動で実行し、それを実行する場合は、その部分に以下を使用してくださいこれが上記の例の仕組みです。
FOR /D %X IN ("%SourceDir%\*") DO FOR %Y IN ("%~X\%SourceSubDir%\*.txt") DO DEL /Q /F "%~Y"
(この詳細を表示するには、WindowsコマンドプロンプトでFOR /?
と入力してください)
FOR(スイッチなし)
Runs a specified command for each file in a set of files.
FOR %variable IN (set) DO command [command-parameters]
%variable Specifies a single letter replaceable parameter.
(set) Specifies a set of one or more files. Wildcards may be used.
command Specifies the command to carry out for each file.
command-parameters
Specifies parameters or switches for the specified command.
To use the FOR command in a batch program, specify %%variable instead
of %variable. Variable names are case sensitive, so %i is different
from %I.
If Command Extensions are enabled, the following additional
forms of the FOR command are supported:
FOR/D
FOR /D %variable IN (set) DO command [command-parameters]
If set contains wildcards, then specifies to match against directory
names instead of file names.
行\ L1\*\L3\*を解釈します。 As:特定のディレクトリL1について、サブディレクトリL3を持つすべてのサブディレクトリを検索し、その中のすべてのファイルを削除します。
ディレクトリ構造をウォークするためのスクリプトを作成する必要があります。バッチファイルとしては簡単に実行できません。ディレクトリまたはファイルのリストを取得し、それらに対して繰り返しアクションを実行する方法があるPerlまたはPowerShellを使用する必要がある場合があります。
擬似コードで
Get list directories
For each dir
Cd into it
Check if The dir L3 exists
If it does then del .\L3\*.*
Go back up a level
Next dir
違いを確認するためだけにPowerShellでやり直すことを考えていますが、これについて考え、バッチファイルコードで実行します。
考えてみました
このバッチファイルは、isが実行されている場所からディレクトリ構造をウォークし、「L3」という名前のディレクトリのコンテンツを削除します。
@echo off
for /r %%d in (*) do call :process "%%d"
goto :eof
:process
pushd "%~dp1"
for /f "delims=" %%A in ('cd') do (
set foldername=%%~nxA
)
if "%foldername%"=="L3" del/q *.*
popd
goto :eof
簡単にすることも可能かもしれませんが、現在のディレクトリ名だけを取得するアクションは面倒です(プロセスセクションのforループ)
ディレクトリがこのように始まる場合
└───L1
│ 1.dat
│
├───Alice
│ │ 9.dat
│ │
│ └───L3
│ c.dat
│ d.dat
│
├───Bob
│ 6.dat
│
├───Carole
│ │ 2.dat
│ │
│ └───L3
│ a.dat
│ b.dat
│
└───Ted
6.dat
cleantreeを実行すると、次のようになります。
└───L1
│ 1.dat
│
├───Alice
│ │ 9.dat
│ │
│ └───L3
├───Bob
│ 6.dat
│
├───Carole
│ │ 2.dat
│ │
│ └───L3
└───Ted
6.dat
_for /f %G in ('dir /ad /b D:\L1\') do del D:\L1\%G\L3\*.txt
_
_for /f
_は、セット内のすべてのファイルに対して次のdoコマンドを実行します
%G in ('dir /ad /b D:\L1\')
変数は指定されたディレクトリ内の各フォルダのベアフォーマットとして設定されます
ディレクトリに%G値とワイルドカードを設定してコマンドを削除します
最初にテストを実行
echoを使用して実行し、実際に実行せずにコマンドをテストするために実行するコマンドをコンソールに出力します。
_for /f %G in ('dir /ad /b D:\L1\') do echo del D:\L1\%G\L3\*.txt
_