最近Mavenを使っているとjarパッケージのダウンロードに失敗し、一度削除して再度ダウンロードする必要があるのですが、時々ファイルが多すぎて一つ一つ削除するのに時間がかかりすぎるので、バットバッチ処理を非常に快適に使用できます。
これまでバットの構文に出会ったことがなかったので、学習して実験し、バッチ ファイルの粗いバージョンを作成しました。
私の思考回路は次のとおりです。
- 1. ターゲットフォルダーをスキャンします。
- 2. ターゲット ファイルを見つけたら、フォルダーを削除します (ダウンロードに失敗した jar を観察すると、サフィックス sha1-in-progress を持つファイルが表示されると、ファイルのダウンロードが失敗することがわかります)。
仕事に役立つバッチ スクリプトの作成から多くの知識を学びました– フォルダーの横断と文字列の処理このブログを共有していただき、誠にありがとうございます。
フォルダを走査する
フォルダーを走査するための for ループ
注文:for [参数] %%变量名 in (匹配符) do (执行的命令)
パラメータは次のように分けることができます/d,/r,/l,/f,无参
- パラメーターなし: 現在のフォルダー内のファイルをスキャンします。
- /d : 現在のフォルダーの下のサブフォルダーを移動します。
- /r : 現在のフォルダー内のすべてのファイルを詳しく調べます
- /l : 反復変数を使用して開始値を設定し、値の範囲を反復し、値が設定された終了値を超えるまで範囲内の一連の値をステップ実行します。
- /f : ファイルの内容を解析するため
例えば:
for /r C:\Users\Panlf\.m2\repository %%i in (*.sha1-in-progress) do (
echo %%i
)
上記の意味は、C:\Users\Panlf\.m2\repository
ファイルの下にあるすべてのファイルを深く調べ、sha1-in-progress
ファイル接尾辞名を持つファイルを見つけて、それを印刷することです。
もちろん、ファイルに出力することもできます。
for /r C:\Users\Panlf\.m2\repository %%i in (*.sha1-in-progress) do (
echo %%i >> E:\m.txt
)
E
結果をディスク上のファイルに出力できますm.txt
が、使用しないように注意してください>
。使用しない場合は、結果がファイルに出力されるだけなので、使用する必要があります>>
。
フォルダを削除する
上記はファイルを走査することであり、今度はフォルダーを削除することです。
Bat delete には rd、del という 2 つのコマンドがあります。
命令:rd,删除目录
参数:/s
说明:用于删除目录树,即删除目录及目录下的所有子目录和文件。
参数:/q XP中的增强DOS命令
说明:进行删除操作时将取消确认。
命令:del,删除文件或目录
参数:/f
说明:使用此参数可删除只读文件。
参数:/s、/q
说明:即删除目录及目录下的所有子目录和文件。同时使用参数/Q,可取消删除操作时的系统确认。
参数:/a
说明:删除指定属性或指定属性以外的文件,/AR、/AH、/AS、/AA表示删除只读、隐藏、系统、存档文件,
/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。
最終的には粗雑なバージョンになりました。
@echo off
setlocal enabledelayedexpansion
set /p input_path=请输入要要操作的文件夹:
echo 获取到的地址:%input_path%
for /r %input_path% %%i in (*.sha1-in-progress) do (
set pan_name=%%~di
set del_name=%%~pi
set true_name=!pan_name!!del_name!
echo !true_name!
rd /s /q !true_name!
)
pause
知らせ
1.使用方法%%i
が異なるとfor
、内容も異なります。
%%~fi:表示获取该文件的绝对路径信息
%%~di:表示获取该文件所在的盘符
%%~pi:表示获取该文件的路径,不包含盘符的信息
%%~ni:表示获取该文件的文件名,不包含扩展名信息
%%~xi:表示获取该文件的扩展名
%%~ti:表示获取该文件的上次修改时间
%%~zi:表示获取该文件的大小
2. forループ内で一時変数を定義する場合
在for循环定义set pan_name=%%~di,如果直接echo pan_name会报echo关闭状态,不能使用。
所以需要第一启用变量延迟功能:setlocal enabledelayedexpansion,第二调用变量的时候使用!pan_name!
3. 文字列の連結
set true_name=!pan_name!!del_name!