root.attributes('-topmost', True)
:这行代码将窗口设置为始终置顶。
root.overrideredirect(True)
:这行代码隐藏窗口边框。
root.attributes('-topmost', True)
:这行代码将窗口设置为始终置顶。
root.overrideredirect(True)
:这行代码隐藏窗口边框。
因为要网上一个个查询bt种子的tacker列表,所以我自己弄了一个用来存储tracker的工具。
默认用户名:admin,密码:admin,没有存在数据库中,改成自己需要的即可
增删查都写好了,不需要改什么。信息不是太多,直接删除不需要的tracker链接,重新添加即可
用的sqlite数据库,需要移动项目的时候直接把文件夹复制走即可
templates\trackers_index.html
–
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>trackers</title>
</head>
<body>
{% if session.logged_in %}
<form action="/logout" method="get">
<input type="submit" value="登出">
</form>
{% else %}
<form action="/login" method="post">
<input type="text" name="username" placeholder="用户名">
<input type="password" name="password" id="password" placeholder="密码">
<input type="submit" value="登录">
</form>
{% endif %}
<main>
<!-- flask的flash函数专用固定代码 专门用来显示内容的 -->
{% for message in get_flashed_messages() %}
<div class="alert">{{ message }}</div>
{% endfor %}
</main>
<p>tracker总数量:{{count}}</p>
<form action="/trackers_search" method="post">
<input type="text" name="trackers_name" placeholder="请输入tracker关键字">
<input type="submit" value="搜索">
</form>
{% if session.logged_in %}
<!-- 登录表单,实际上用户已经登录,所以可以显示欢迎信息或其他内容 -->
<form action="/trackers_add" method="post">
<label for="trackers_name">trackers_add:</label>
<input type="text" name="trackers_name" placeholder="请输入完整的tracker链接">
<input type="submit" value="提交">
</form>
<form action="/trackers_delete" method="post">
<label for="trackers_name">trackers_delete:</label>
<input type="text" name="trackers_name" placeholder="请输入完整的tracker链接">
<input type="submit" value="删除">
</form>
{% endif %}
<hr>
<div class="tracker_box scrollable-div">
<form action="/get_trackers_as_text" method="get">
<input type="submit" value="去复制,请使用Ctrl+A和Ctrl+C复制">
</form>
{% for i in trackers %}
<ul style="list-style-type: none">
<li>{{i.name}}</li>
</ul>
{% endfor %}
</div>
</body>
</html>
<style>
* {
margin:0;
padding:0;
}
.scrollable-div {
height: 800px; /* 或者你需要的高度 */
overflow-y: auto; /* 内容超出时在 y 轴方向显示滚动条 */
overflow-x: auto; /* 内容超出时在 x 轴方向显示滚动条 */
}
</style>
–
app.py
–
from flask import Flask, request, render_template, redirect, url_for, flash, session
from flask_sqlalchemy import SQLAlchemy
import os
from datetime import datetime
from flask_cors import CORS
import secrets
'''
待实现:
flash错误提示显示红色,警告信息显示黄色,成功显示绿色,使用div画出来
'''
app = Flask(__name__)
# 为整个应用启用 CORS
CORS(app)
# 启用 CORS 并设置特定的域名
#CORS(app, resources={r"/some_route": {"origins": "http://example.com"}})
# 或者,允许所有域名访问所有路由
CORS(app, resources={r"*": {"origins": "*"}})
# 获取当前文件的路径
basedir = os.path.abspath(os.path.dirname(__file__))
# 设置数据库文件的路径为当前目录下的 data.db
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.db')
#app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////data.db'
app.secret_key = secrets.token_urlsafe() # 用于保持会话安全,字符串随机即可
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False#模型修改的跟踪
db = SQLAlchemy(app)
class Trackers(db.Model):
__tablename__= 'trackers'
id = db.Column(db.Integer, unique=True, comment='id')
name = db.Column(db.String(64), primary_key=True, comment='Trackers,主键')
is_usable = db.Column(db.String(64), unique=False, comment='Tracker是否可用')
create_date = db.Column(db.DateTime, unique=False, default=datetime.now(), comment='Tracker创建日期')
update_date = db.Column(db.DateTime, unique=False, comment='Tracker更新日期')
def __repr__(self):
return '<Trackers %r>' % self.name
def create_tables():
with app.app_context():
db.create_all()
@app.route('/')
@app.route('/trackers_index')
def trackers_index():
trackers = Trackers.query.order_by(Trackers.create_date.desc()).all()#倒序输出所有
count = Trackers.query.count()#tracker总数量
return render_template('trackers_index.html', trackers=trackers, count=count)
@app.route('/get_trackers_as_text')
def get_trackers_as_text():
trackers = Trackers.query.all()
lines = [f"{tracker.name}" for tracker in trackers]
text = "<br>".join(lines)
return text
@app.route('/trackers_add', methods=['POST'], endpoint='add_announcement')
def announcement_add():
trackers_name = request.form['trackers_name']
# 关键词列表
keywords = ['announce', 'http', 'udp', 'https', 'wss']
# 检查字符串是否包含列表中的任意关键词
if contains_keywords(trackers_name, keywords) or trackers_name.endswith('announce'):
print("提交信息中包含关键字")
else:
flash("你提交的可能不是tracker链接")
return redirect(url_for('trackers_index'))
exists = Trackers.query.filter_by(name=trackers_name).first() is not None
if exists:
flash('tracker 已经存在.')
else:
flash('tracker 不存在,已插入.')
new_tracker = Trackers(name=trackers_name)
db.session.add(new_tracker)
db.session.commit()
return redirect(url_for('trackers_index'))
def contains_keywords(s, keywords):
return any(keyword in s for keyword in keywords)
@app.route('/trackers_delete/<int:trackers_name>', methods=['POST'], endpoint='delete_announcement_specific')
def delete_announcement_specific(trackers_name):
data = Trackers.query.filter_by(name=trackers_name).first()
if data:
db.session.delete(data)
db.session.commit()
flash(f'【{data}】已删除')
return redirect(url_for('trackers_index'))
else:
return 'Tracker not found'
@app.route('/trackers_delete', methods=['POST'], endpoint='delete_announcement')
def delete_announcement():
trackers_name = request.form.get('trackers_name') or request.view_args.get('trackers_name')
if not trackers_name:
return '什么都没输入,你删除啥呢!!!'
data = Trackers.query.filter_by(name=trackers_name).first()
if data:
db.session.delete(data)
db.session.commit()
flash(f'{data}已删除')
return redirect(url_for('trackers_index'))
else:
return f'数据库中不存在该数据!!!{trackers_name}'
@app.route('/trackers_update/<int:trackers_name>', methods=['POST'], endpoint='update_announcement')
def announcement_update(trackers_name):
data = Trackers.query.filter_by(name=trackers_name).first()
if data:
data.name = request.form.get('name')
data.is_usable = request.form.get('description')
db.session.commit()
flash('Data has been updated successfully.', 'success')
else:
flash('Data not found.', 'error')
return redirect(url_for('trackers_index'))
@app.route('/trackers_search', methods=['GET', 'POST'])
def announcement_search():
if request.method == 'POST':
trackers_name = request.form.get('trackers_name')
trackers = Trackers.query.filter(Trackers.name.like(f'%{trackers_name}%')).all()
return render_template('trackers_index.html', trackers=trackers)
return render_template('trackers_index.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if username == 'admin' and password == 'admin':
session['logged_in'] = True
session['username'] = username
flash("登陆成功")
return redirect(url_for('trackers_index'))
else:
return '无效的用户名或密码'
return redirect(url_for('trackers_index'))
@app.route('/logout', methods=['GET', 'POST'])
def logout():
session.pop('logged_in', None)
session.pop('username', None)
return redirect(url_for('trackers_index'))
if __name__ == '__main__':
# 创建数据库
create_tables()
app.run(debug=True, host='0.0.0.0', port=5000)
–
跨域资源共享(CORS)是一种安全机制,它允许或限制网页上哪些域名可以访问资源。在 Flask 应用中,你可以使用 Flask-CORS 扩展来处理跨域请求。
以下是如何在 Flask 应用中启用 CORS 的步骤:
首先,你需要安装 Flask-CORS:
pip install flask-cors
然后,在你的 Flask 应用中启用 CORS。你可以为整个应用或特定的路由启用 CORS。
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
# 为整个应用启用 CORS
CORS(app)
# 或者,只为特定的路由启用 CORS
@app.route('/some_route')
def some_route():
# 你的处理逻辑
pass
# 启用 CORS 并设置特定的域名
CORS(app, resources={r"/some_route": {"origins": "http://example.com"}})
# 或者,允许所有域名访问所有路由
CORS(app, resources={r"*": {"origins": "*"}})
你可以设置不同的选项来控制 CORS 的行为,例如允许的头部、方法和最大年龄。
CORS(app, resources={r"/api/*": {
"origins": "http://example.com",
"methods": ["GET", "POST", "PUT", "DELETE"],
"allow_headers": ["Content-Type", "Authorization"],
"max_age": 21600
}})
CORS 预检请求(OPTIONS 请求)通常用于检查实际请求是否安全。Flask-CORS 会自动处理 OPTIONS 请求,所以你不需要手动编写处理逻辑。
通过使用 Flask-CORS,你可以轻松地管理 Flask 应用中的跨域请求,确保应用的安全性和灵活性。
模型字段
db.Integer
db.String(64)
在 Flask 应用中,当你设置 SQLALCHEMY_DATABASE_URI
配置项为 'sqlite:////data.db'
时,你告诉 SQLAlchemy 使用 SQLite 数据库,并且数据库文件名为 data.db
。SQLite 的数据库是一个单一的文件,因此你不需要像其他数据库那样设置主机名、用户名或密码。
'sqlite:////data.db'
中的四个斜杠意味着:
如果你想要确保数据库文件创建在 Flask 应用的当前目录下,你可以使用以下配置:
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 使用 url_for 时需要设置静态文件夹
app.config['STATIC_FOLDER'] = 'static'
# 获取当前文件的路径
basedir = os.path.abspath(os.path.dirname(__file__))
# 设置数据库文件的路径为当前目录下的 data.db
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.db')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
# 确保在应用上下文中创建数据库
with app.app_context():
db.create_all()
# 其余的代码...
在这个示例中,我们使用 os.path.abspath
和 os.path.dirname
来获取当前文件(通常是你的 Flask 应用的主模块文件)的绝对路径,然后使用 os.path.join
来构建数据库文件的完整路径。这样,无论应用在哪里运行,数据库文件 data.db
都会被创建在应用的当前目录下。
请注意,app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
这一行是用来关闭 SQLAlchemy 的修改跟踪,这可以避免在生产环境中记录不必要的信息,从而提高性能。
flask_sqlalchemy-3.0.5
flask-2.2.5
flask-sqlalchemy-3.0.5
sqlalchemy-2.0.36
Collecting flask-sqlalchemy
Downloading flask_sqlalchemy-3.0.5-py3-none-any.whl.metadata (3.3 kB)
Collecting flask>=2.2.5 (from flask-sqlalchemy)
Downloading Flask-2.2.5-py3-none-any.whl.metadata (3.9 kB)
Collecting sqlalchemy>=1.4.18 (from flask-sqlalchemy)
Downloading SQLAlchemy-2.0.36-cp37-cp37m-win_amd64.whl.metadata (9.9 kB)
Requirement already satisfied: Werkzeug>=2.2.2 in c:\program files\python37\lib\site-packages (from flask>=2.2.5->flask-sqlalchemy) (2.2.3)
Requirement already satisfied: Jinja2>=3.0 in c:\program files\python37\lib\site-packages (from flask>=2.2.5->flask-sqlalchemy) (3.1.4)
Requirement already satisfied: itsdangerous>=2.0 in c:\program files\python37\lib\site-packages (from flask>=2.2.5->flask-sqlalchemy) (2.1.2)
Requirement already satisfied: click>=8.0 in c:\program files\python37\lib\site-packages (from flask>=2.2.5->flask-sqlalchemy) (8.1.7)
Requirement already satisfied: importlib-metadata>=3.6.0 in c:\program files\python37\lib\site-packages (from flask>=2.2.5->flask-sqlalchemy) (6.7.0)
Requirement already satisfied: typing-extensions>=4.6.0 in c:\program files\python37\lib\site-packages (from sqlalchemy>=1.4.18->flask-sqlalchemy) (4.7.1)
Requirement already satisfied: greenlet!=0.4.17 in c:\program files\python37\lib\site-packages (from sqlalchemy>=1.4.18->flask-sqlalchemy) (3.1.1)
Requirement already satisfied: colorama in c:\program files\python37\lib\site-packages (from click>=8.0->flask>=2.2.5->flask-sqlalchemy) (0.4.6)
Requirement already satisfied: zipp>=0.5 in c:\program files\python37\lib\site-packages (from importlib-metadata>=3.6.0->flask>=2.2.5->flask-sqlalchemy) (3.15.0)
Requirement already satisfied: MarkupSafe>=2.0 in c:\program files\python37\lib\site-packages (from Jinja2>=3.0->flask>=2.2.5->flask-sqlalchemy) (2.1.5)
Downloading flask_sqlalchemy-3.0.5-py3-none-any.whl (24 kB)
Downloading Flask-2.2.5-py3-none-any.whl (101 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 101.8/101.8 kB 279.2 kB/s eta 0:00:00
Downloading SQLAlchemy-2.0.36-cp37-cp37m-win_amd64.whl (2.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 1.8 MB/s eta 0:00:00
Installing collected packages: sqlalchemy, flask, flask-sqlalchemy
Attempting uninstall: flask
Found existing installation: Flask 2.2.3
Uninstalling Flask-2.2.3:
Successfully uninstalled Flask-2.2.3
Successfully installed flask-2.2.5 flask-sqlalchemy-3.0.5 sqlalchemy-2.0.36
杜比视界扩展包
vscode-代码编辑器
emueditor-大文本编辑器
potplay-视频播放器
geek-可卸载预装的uwp应用
UninstallTool
Windows Install Clean Up-能完全卸载一些软件,不会影响一些软件的重新安装.比如sql server数据库
Dbeaver-数据库连接工具
Navicat Premium Lite 17-数据库连接工具。导出数据库结构和数据成sql文件很好用
向日葵-远程桌面链接软件。
clash verge-科学上网工具
VMware Workstation-虚拟机工具。可以在win系统上安装多个操作系统
谷歌浏览器-网页浏览工具。可导出网站账号密码
SEC-极语言编程工具。中国编程语言的编译器,依赖于Windows。
zerotier-远程局域网组成网络工具。若是玩局域网联机游戏的话,都不在一个地区,可以通过zerotier加入同一个zerotier网络,组成异地的局域网。也可用于其他用途。
python-python编译器。编程可以解决很多问题。
finallshell-linux系统连接工具。官网:https://www.hostbuf.com/
需要卸载的软件:
我的手机-微软自带的uwp应用,英文是phont link。国内没啥用途
flask-3.0.3
Jinja2-3.1.4
MarkupSafe-2.1.5
Werkzeug-3.0.5
blinker-1.8.2
click-8.1.7
colorama-0.4.6
flask-3.0.3
importlib-metadata-8.5.0
itsdangerous-2.2.0 zipp-3.20.2
Collecting flask
Downloading flask-3.0.3-py3-none-any.whl (101 kB)
|████████████████████████████████| 101 kB 125 kB/s
Collecting blinker>=1.6.2
Downloading blinker-1.8.2-py3-none-any.whl (9.5 kB)
Collecting Jinja2>=3.1.2
Downloading jinja2-3.1.4-py3-none-any.whl (133 kB)
|████████████████████████████████| 133 kB 145 kB/s
Collecting itsdangerous>=2.1.2
Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB)
Collecting importlib-metadata>=3.6.0; python_version < “3.10”
Downloading importlib_metadata-8.5.0-py3-none-any.whl (26 kB)
Collecting click>=8.1.3
Downloading click-8.1.7-py3-none-any.whl (97 kB)
|████████████████████████████████| 97 kB 97 kB/s
Collecting Werkzeug>=3.0.0
Downloading werkzeug-3.0.5-py3-none-any.whl (227 kB)
|████████████████████████████████| 227 kB 56 kB/s
Collecting MarkupSafe>=2.0
Downloading MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl (17 kB)
Collecting zipp>=3.20
Downloading zipp-3.20.2-py3-none-any.whl (9.2 kB)
Collecting colorama; platform_system == “Windows”
Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Installing collected packages: blinker, MarkupSafe, Jinja2, itsdangerous, zipp, importlib-metadata, colorama, click, Werkzeug, flask
Successfully installed Jinja2-3.1.4 MarkupSafe-2.1.5 Werkzeug-3.0.5 blinker-1.8.2 click-8.1.7 colorama-0.4.6 flask-3.0.3 importlib-metadata-8.5.0 itsdangerous-2.2.0 zipp-3.20.2
WARNING: You are using pip version 20.1.1; however, version 24.2 is available.
You should consider upgrading via the ‘c:\application\python\python385\python.exe -m pip install –upgrade pip’ command.
创建变量并赋值
set 变量名1=张三
set 变量名2=李四
字符串拼接
echo %变量名1%%变量名2%
@echo off
set name1=张三
set name2=李四
echo %name1%%name2%
pause
这段代码的解释如下:
@echo off
:关闭命令回显,这样在执行命令时它们就不会显示在屏幕上。set name1=张三
:设置变量 name1
并赋值为 “张三”。set name2=李四
:设置变量 name2
并赋值为 “李四”。echo %name1%%name2%
:使用 echo
命令输出变量 name1
和 name2
的值,它们之间没有空格,所以 “张三” 和 “李四” 会紧挨着显示。pause
:在脚本执行完毕后暂停,以便你可以看到输出结果。如果你希望在两个名字之间有一个空格,可以修改 echo
命令如下:
echo %name1% %name2%
这样 “张三” 和 “李四” 之间就会有一个空格。
获取当前用户名并显示到屏幕上
echo %username%
获取当前用户名拼接到一个路径字符串里形成新的路径变量
@echo off
setlocal
:: 获取当前用户名
set CURRENT_USER=%USERNAME%
:: 定义基本路径
set BASE_PATH=C:\Users\
:: 拼接用户名到路径中,形成新的路径变量
set FULL_PATH=%BASE_PATH%%CURRENT_USER%\Desktop
:: 输出新的路径变量
echo The full path is: %FULL_PATH%
endlocal
pause
这段代码的解释如下:
@echo off
:关闭命令回显,这样在执行命令时它们就不会显示在屏幕上。setlocal
:开始局部变量环境,这样在脚本结束时不会影响全局环境变量。set CURRENT_USER=%USERNAME%
:设置一个变量 CURRENT_USER
并赋值为当前登录的用户名。set BASE_PATH=C:\Users\
:定义一个基本路径变量 BASE_PATH
。set FULL_PATH=%BASE_PATH%%CURRENT_USER%\Desktop
:将基本路径和用户名拼接起来,形成一个新的路径变量 FULL_PATH
,这里假设你想要将路径指向用户的桌面。echo The full path is: %FULL_PATH%
:输出新的路径变量。endlocal
:结束局部变量环境,这样在脚本结束时不会影响全局环境变量。pause
:在脚本执行完毕后暂停,以便你可以看到输出结果。这个脚本将输出当前用户的桌面路径,例如 C:\Users\张三\Desktop
,其中 张三
是当前登录的用户名。
批处理执行一个exe
start
命令@echo off
start "" "C:\path\to\your\executable.exe"
这里的 ""
是可选的,用来设置窗口的标题,如果不需要可以省略。"C:\path\to\your\executable.exe"
是 .exe
文件的完整路径。
@echo off
"C:\path\to\your\executable.exe"
在这两种方法中,你需要将 "C:\path\to\your\executable.exe"
替换为你的 .exe
文件的实际路径。
.exe
文件需要在特定的目录下运行,确保你的批处理脚本也在那个目录下,或者使用 cd
命令先切换到那个目录。.exe
文件需要管理员权限,你可能需要以管理员身份运行你的批处理脚本。下面是一个完整的示例,包括了路径切换和执行 .exe
文件:
@echo off
cd /d "C:\path\to\directory"
start "" "C:\path\to\directory\executable.exe"
在这个示例中,cd /d
命令用于切换当前目录到指定的目录,然后使用 start
命令执行 .exe
文件。
批处理 删除带有pycharm的文件夹
在批处理脚本中删除带有特定字符串(如 “pycharm”)的文件夹,你可以使用 dir
命令结合 for
循环来查找并删除这些文件夹。以下是一个示例脚本,它会在指定的根目录下搜索所有包含 “pycharm” 的文件夹,并删除它们:
@echo off
setlocal
:: 设置要搜索的根目录
set ROOT_DIR=C:\
:: 使用dir命令查找所有包含"pycharm"的文件夹
for /d %%i in ("%ROOT_DIR%*pycharm*") do (
echo Found folder: %%i
echo Deleting folder: %%i
rmdir /s /q "%%i"
)
echo Done.
endlocal
pause
这段代码的解释如下:
@echo off
:关闭命令回显,这样在执行命令时它们就不会显示在屏幕上。setlocal
:开始局部变量环境,这样在脚本结束时不会影响全局环境变量。set ROOT_DIR=C:\
:设置一个变量 ROOT_DIR
作为搜索的根目录。for /d %%i in ("%ROOT_DIR%*pycharm*") do
:使用 for
循环遍历根目录下所有包含 “pycharm” 的文件夹。echo Found folder: %%i
:输出找到的文件夹路径。echo Deleting folder: %%i
:输出即将删除的文件夹路径。rmdir /s /q "%%i"
:使用 rmdir
命令删除文件夹,/s
表示删除指定目录及所有子目录,/q
表示静默模式,不提示确认。echo Done.
:完成删除操作后输出提示信息。endlocal
:结束局部变量环境。pause
:在脚本执行完毕后暂停,以便你可以看到输出结果。警告:这个脚本会删除所有包含 “pycharm” 的文件夹,这可能会删除重要文件。在运行此脚本之前,请确保你完全理解它的作用,并已经备份了所有重要数据。你可能还想在删除之前先运行脚本而不带 rmdir
命令,以确认哪些文件夹会被删除。
此外,如果文件夹内有正在使用的文件,或者文件夹权限设置不允许删除,那么 rmdir
命令可能会失败。确保你有足够的权限来删除这些文件夹,并且没有文件正在使用它们。
批处理 删除带有pycharm的文件夹,删除带有Verysync的文件夹,删除带有Verysync的文件夹ZeroTier等等
要创建一个批处理脚本,删除包含特定字符串(如 “pycharm”、”Verysync” 和 “ZeroTier”)的文件夹,你可以使用 for
循环结合 dir
命令来查找和删除这些文件夹。以下是一个示例脚本,它会在指定的根目录下搜索所有包含这些字符串的文件夹,并删除它们:
@echo off
setlocal
:: 设置要搜索的根目录
set ROOT_DIR=C:\
:: 删除包含 "pycharm" 的文件夹
echo Deleting folders containing "pycharm"...
for /d %%i in ("%ROOT_DIR%*pycharm*") do (
echo Found and deleting folder: %%i
rmdir /s /q "%%i"
)
:: 删除包含 "Verysync" 的文件夹
echo Deleting folders containing "Verysync"...
for /d %%i in ("%ROOT_DIR%*Verysync*") do (
echo Found and deleting folder: %%i
rmdir /s /q "%%i"
)
:: 删除包含 "ZeroTier" 的文件夹
echo Deleting folders containing "ZeroTier"...
for /d %%i in ("%ROOT_DIR%*ZeroTier*") do (
echo Found and deleting folder: %%i
rmdir /s /q "%%i"
)
echo All specified folders have been deleted.
endlocal
pause
这段代码的解释如下:
@echo off
:关闭命令回显,这样在执行命令时它们就不会显示在屏幕上。setlocal
:开始局部变量环境,这样在脚本结束时不会影响全局环境变量。set ROOT_DIR=C:\
:设置一个变量 ROOT_DIR
作为搜索的根目录。for /d %%i in ("%ROOT_DIR%*pycharm*") do
:使用 for
循环遍历根目录下所有包含 “pycharm” 的文件夹。echo Found and deleting folder: %%i
:输出找到并即将删除的文件夹路径。rmdir /s /q "%%i"
:使用 rmdir
命令删除文件夹,/s
表示删除指定目录及所有子目录,/q
表示静默模式,不提示确认。echo All specified folders have been deleted.
:完成删除操作后输出提示信息。endlocal
:结束局部变量环境。pause
:在脚本执行完毕后暂停,以便你可以看到输出结果。警告:这个脚本会删除所有包含指定字符串的文件夹,这可能会删除重要文件。在运行此脚本之前,请确保你完全理解它的作用,并已经备份了所有重要数据。你可能还想在删除之前先运行脚本而不带 rmdir
命令,以确认哪些文件夹会被删除。
此外,如果文件夹内有正在使用的文件,或者文件夹权限设置不允许删除,那么 rmdir
命令可能会失败。确保你有足够的权限来删除这些文件夹,并且没有文件正在使用它们。
批处理删除AndroidStudio残余文件
@echo off
cd /d "C:\Users\rkey\AppData\Local\Google\"
for /d %%i in (*AndroidStudio*) do (
rd "%%i" /s /q
)
echo Done.
pause
批处理删除chrome残余文件
rd /s/q "C:\Program Files (x86)\Google"
rd /s/q "D:\Program Files (x86)\Google"
rd /s/q "E:\Program Files (x86)\Google"
rd /s/q "F:\Program Files (x86)\Google"
rd /s/q "C:\Users\%username%\AppData\Local\ChromeExtensionCache"
"C:\ProgramData\Google"
reg delete HKEY_CURRENT_USER\SOFTWARE\Google /va /f
reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Google /va /f
reg delete HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Google /va /frd /s/q "C:\Program Files (x86)\Google"
rd /s/q "D:\Program Files (x86)\Google"
rd /s/q "E:\Program Files (x86)\Google"
rd /s/q "F:\Program Files (x86)\Google"
"C:\ProgramData\Google"
reg delete HKEY_CURRENT_USER\SOFTWARE\Google /va /f
reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Google /va /f
reg delete HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Google /va /f
PyAutoGUI-0.9.54
Pillow-9.5.0
mouseinfo-0.1.3
pyautogui-0.9.54
pygetwindow-0.0.9
pymsgbox-1.0.9
pyperclip-1.9.0
pyrect-0.2.0
pyscreeze-1.0.1
pytweening-1.2.0
Collecting pyautogui
Downloading PyAutoGUI-0.9.54.tar.gz (61 kB)
—————————————- 61.2/61.2 kB 232.9 kB/s eta 0:00:00
Installing build dependencies … done
Getting requirements to build wheel … done
Installing backend dependencies … done
Preparing metadata (pyproject.toml) … done
Collecting pymsgbox (from pyautogui)
Downloading PyMsgBox-1.0.9.tar.gz (18 kB)
Installing build dependencies … done
Getting requirements to build wheel … done
Installing backend dependencies … done
Preparing metadata (pyproject.toml) … done
Collecting pytweening>=1.0.4 (from pyautogui)
Downloading pytweening-1.2.0.tar.gz (171 kB)
—————————————- 171.2/171.2 kB 644.0 kB/s eta 0:00:00
Installing build dependencies … done
Getting requirements to build wheel … done
Installing backend dependencies … done
Preparing metadata (pyproject.toml) … done
Collecting pyscreeze>=0.1.21 (from pyautogui)
Downloading pyscreeze-1.0.1.tar.gz (27 kB)
Installing build dependencies … done
Getting requirements to build wheel … done
Preparing metadata (pyproject.toml) … done
Collecting pygetwindow>=0.0.5 (from pyautogui)
Downloading PyGetWindow-0.0.9.tar.gz (9.7 kB)
Installing build dependencies … done
Getting requirements to build wheel … done
Installing backend dependencies … done
Preparing metadata (pyproject.toml) … done
Collecting mouseinfo (from pyautogui)
Downloading MouseInfo-0.1.3.tar.gz (10 kB)
Installing build dependencies … done
Getting requirements to build wheel … done
Installing backend dependencies … done
Preparing metadata (pyproject.toml) … done
Collecting pyrect (from pygetwindow>=0.0.5->pyautogui)
Downloading PyRect-0.2.0.tar.gz (17 kB)
Installing build dependencies … done
Getting requirements to build wheel … done
Installing backend dependencies … done
Preparing metadata (pyproject.toml) … done
Collecting Pillow>=9.2.0 (from pyscreeze>=0.1.21->pyautogui)
Downloading Pillow-9.5.0-cp37-cp37m-win_amd64.whl.metadata (9.7 kB)
Collecting pyperclip (from mouseinfo->pyautogui)
Downloading pyperclip-1.9.0.tar.gz (20 kB)
Installing build dependencies … done
Getting requirements to build wheel … done
Installing backend dependencies … done
Preparing metadata (pyproject.toml) … done
Downloading Pillow-9.5.0-cp37-cp37m-win_amd64.whl (2.5 MB)
—————————————- 2.5/2.5 MB 3.6 MB/s eta 0:00:00
Building wheels for collected packages: pyautogui, pygetwindow, pyscreeze, pytweening, mouseinfo, pymsgbox, pyperclip, pyrect
Building wheel for pyautogui (pyproject.toml) … done
Created wheel for pyautogui: filename=PyAutoGUI-0.9.54-py3-none-any.whl size=37597 sha256=c1abe82b817f0466cc775863beb035dd6edf939b709c33b2d807b6e171d73ef3
Stored in directory: c:\users\rkey\appdata\local\pip\cache\wheels\ae\77\f1\c71436322c6e5e634523ea92f7e64ffbca2f1851b08d126193
Building wheel for pygetwindow (pyproject.toml) … done
Created wheel for pygetwindow: filename=PyGetWindow-0.0.9-py3-none-any.whl size=11080 sha256=aa154c2c924acaf3b397f7593dbf1b86b5c2275ed068452607ac26c916019288
Stored in directory: c:\users\rkey\appdata\local\pip\cache\wheels\91\7e\35\62d9062a06cfc46fea39e26860253da36f258b3f3fd96c91c3
Building wheel for pyscreeze (pyproject.toml) … done
Created wheel for pyscreeze: filename=PyScreeze-1.0.1-py3-none-any.whl size=14384 sha256=6ae8f717a83b3ce3fc4d6722a0694986b6d7a284d2cff1e9550df8456ecfefac
Stored in directory: c:\users\rkey\appdata\local\pip\cache\wheels\de\29\9f\92d5ceb93cbfcc465a154537bc16c0703b1d7955821fc2584c
Building wheel for pytweening (pyproject.toml) … done
Created wheel for pytweening: filename=pytweening-1.2.0-py3-none-any.whl size=8031 sha256=c6b10ca8de4e48e3a1aef16ccca2d8d3503bc48d4b8d72c153dc442bf5a38d01
Stored in directory: c:\users\rkey\appdata\local\pip\cache\wheels\9b\f6\cc\79ee5a508c9438397ef23111f30241ab0749ef93aebb077761
Building wheel for mouseinfo (pyproject.toml) … done
Created wheel for mouseinfo: filename=MouseInfo-0.1.3-py3-none-any.whl size=10904 sha256=fe19106b93c9d4112ada96b08ca09c0c86a60bfcfe9ab395ac7a5c689d303ce5
Stored in directory: c:\users\rkey\appdata\local\pip\cache\wheels\43\9a\7f\373736bf37b94b358be41fb2f317a0f9940a1dcb7a733e1707
Building wheel for pymsgbox (pyproject.toml) … done
Created wheel for pymsgbox: filename=PyMsgBox-1.0.9-py3-none-any.whl size=7416 sha256=72fd25653fb3108d337876c653586013afc92d85fc573256cdf47aa7c9470350
Stored in directory: c:\users\rkey\appdata\local\pip\cache\wheels\39\eb\0e\1587e06da34adf675ad26a113da25df542991f5095303374ef
Building wheel for pyperclip (pyproject.toml) … done
Created wheel for pyperclip: filename=pyperclip-1.9.0-py3-none-any.whl size=11020 sha256=cb50e31f73e3ba7217889bf0d5486cb7e2d215f75d19a07d28357e3edfda93ca
Stored in directory: c:\users\rkey\appdata\local\pip\cache\wheels\63\35\9f\5d4ab53fbcd006beeebfd468ef530d0d25bb390b53bfb97f94
Building wheel for pyrect (pyproject.toml) … done
Created wheel for pyrect: filename=PyRect-0.2.0-py2.py3-none-any.whl size=11205 sha256=dab0ac51925ff7b1bcbe64f185e11d0169fabed9add58fd1a1b7db77130590be
Stored in directory: c:\users\rkey\appdata\local\pip\cache\wheels\a8\c4\b9\73048d5fa590952161184f5367220620d40958f3c0b8e8c03d
Successfully built pyautogui pygetwindow pyscreeze pytweening mouseinfo pymsgbox pyperclip pyrect
Installing collected packages: pytweening, pyrect, pyperclip, pymsgbox, pygetwindow, Pillow, pyscreeze, mouseinfo, pyautogui
Successfully installed Pillow-9.5.0 mouseinfo-0.1.3 pyautogui-0.9.54 pygetwindow-0.0.9 pymsgbox-1.0.9 pyperclip-1.9.0 pyrect-0.2.0 pyscreeze-1.0.1 pytweening-1.2.0