【Linux】shell脚本和bat脚本:

news2024/9/30 13:29:54

文章目录

        • 一、脚本对应环境:
            • 【1】shell:linux环境;后缀名为.sh
            • 【2】bat:windows环境;后缀名为.bat或者.cmd
        • 二、脚本执行:
            • 【1】shell执行
            • 【2】bat脚本执行
        • 三、脚本相关命令:
          • 1. shell命令
            • 【1】shell变量
            • 【2】为shell脚本传递参数
            • 【3】shell数组
            • 【4】shell运算符
          • 2. bat命令
            • 【1】获取和设置相关变量
            • 【2】字符串操作
            • 【3】bat注释
            • 【4】bat输出语句
            • 【5】基本命令
            • 【6】语句结构
        • 五、案例:
          • 1. shell:
            • 【1】Shell脚本: [https://zhuanlan.zhihu.com/p/601971378?utm_id=0](https://zhuanlan.zhihu.com/p/601971378?utm_id=0)
            • 【2】109 个实用 shell 脚本,建议收藏!: [https://zhuanlan.zhihu.com/p/468003798](https://zhuanlan.zhihu.com/p/468003798)
          • 2. bat:
            • 【1】图标恢复.bat(解决桌面图标变为白纸的情况)
            • 【2】清理图标缓存.bat
            • 【3】Navicat脚本


一、脚本对应环境:

【1】shell:linux环境;后缀名为.sh

主要用在linux中,而linux系统对应的shell又有很多,如Bourne Shell(/usr/bin/sh或/bin/sh),又如Bourne Again Shell(/bin/bash)由于Bourne Again Shell(/bin/bash)免费且易用,故使用较多。
对应的脚本文件后缀名为.sh。
注:
#!告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。如#!/bin/sh,#!/bin/bash,通常放于脚本文件首行。

【2】bat:windows环境;后缀名为.bat或者.cmd

主要用于windows中,又名批处理文件,其每一行指令都是一条dos指令,对应脚本文件后缀名为.bat或者.cmd。

二、脚本执行:

【1】shell执行

1.直接在bash命令窗口执行shell相关命令。
2.将shell命令保存为文件,执行文件就可以运行shell命令。
注:由于在linux中对文件的权限管理较细,故如果使用shell脚本文件,必须使其具有可执行权限,对脚本授权chmod +x ./文件名.sh #使脚本具有执行权限,执行脚本./test.sh #执行脚本,./必须加,因为当前文件没有加入到linux的path中,linux仅只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 path中。

【2】bat脚本执行

1.直接在windows的dos窗口即cmd窗口执行bat相关命令。
2.将bat命令保存为bat文件,在windows中文件权限限制没有linux中那么严格,故相关bat脚本文件可以直接双击执行或者命令行执行

三、脚本相关命令:

1. shell命令
【1】shell变量
#!/bin/bash
# 定义变量如下,变量名和等号之间不能有空格
name="变量定义"
# 变量使用,使用一个定义过的变量,只要在变量名前面加美元符号即可
echo $name
# 变量外面的花括号是为了区分边界,加不加都可以
echo ${name}  # $只在使用变量的时候加,再次赋值不加

#使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
name="哈哈哈"
readonly name
name="修改只读变量"  # 报错/bin/sh: NAME: This variable is read only.

# 使用 unset 命令可以删除变量,变量被删除后不能再次使用,unset 命令不能删除只读变量。
name="旺旺旺"
unset name  # 删除name变量
echo ${name} # 无输出

# 字符串可以使用单引号'',也可以使用双引号"",也可以不用引号
# 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的,可以用作字符串拼接使用
# 双引号里可以有变量,也可以出现转义字符
name_one='单引号'
name_one_p='单引号拼接,'${name_one}'拼接结束'
echo ${name_one_p}    # 输出:单引号拼接,单引号拼接结束
name_two="双引号"
name_two_p1="双引号拼接1,${name_two}拼接结束"
name_two_p2="双引号拼接2,"${name_two}"拼接结束" 
echo ${name_two_p1} ${name_two_p2}  #输出:双引号拼接1,双引号拼接结束 双引号拼接2,双引号拼接结束

# 获取字符串长度,变量为数组时,${#arr} 等价于 ${#arr[0]}
name="哈哈哈"
echo ${#name}    # 输出:3

# 提取子字符串,从第4个字符开始提取2个字符(第一个字符的索引值为 0)
name="小不点最爱喝兽奶"
echo ${name:3:2}  # 输出:最爱

# 查找子字符串,查找字符'奶'或'爱'的位置(哪个字母先出现就计算哪个)。这个查找中文有点瑕渍,应该是字符编码问题。
name="wafenhicfsr"  
echo `expr index "${name}" cf`  # 输出:3

# 数组:bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
# 定义数组:用括号来表示数组,数组元素用"空格"符号分割开
arr=(v1 v2 v3 ... vn)
arr=(
  lily
  汤姆
  123
)
arr[0]=哈哈哈  # 单独定义数组的各个分量
arr[2]="123"
arr[n]="nnn"    # 可以不使用连续的下标,而且下标的范围没有限制。
# 读取数组格式 ${数组名[下标]}
arr=(lily 汤姆 123)
echo ${arr[1]}  # 输出:汤姆
# 使用 @ 符号可以获取数组中的所有元素
echo ${arr[@]} # 输出:lily 汤姆 123
# 获取数组的长度
echo ${#arr[@]}    # 取得数组元素的个数
echo ${#arr[*]}    # 取得数组元素的个数
echo ${#arr[1]}    # 取得数组单个元素的长度

# 注释,常用的都是以#为注释
:<<EOF 注释... EOF
或
:<<z 注释 z
或
:<<! 注释... !
【2】为shell脚本传递参数

脚本中以$n获取参数, $0 为执行的文件名(包含文件路径),$1接受第一个参数,$2第二个参数…,以此类推

# 文件名./test.sh
#!/bin/bash
echo "shell传参脚本学习"
echo "执行的文件名:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"
echo "传递到脚本的参数个数:$#"
echo "以\"1参 2参 3参 n参\"的形式输出所有参数:$*"
echo "脚本运行的当前进程ID号:$$"
echo "后台运行的最后一个进程的ID号:$!"
echo "与\$*相同,但是使用时加引号,并在引号中返回每个参数:$@"
echo "显示Shell使用的当前选项:$-"
echo "显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误:$?"

修改test.sh文件为可执行:chmod -x test.sh
执行test.sh文件:./test.sh 12 哈哈哈 fggg
执行结果如图:
在这里插入图片描述

【3】shell数组

Bash Shell 只支持一维数组(不支持多维数组),且各值以空格分开

# 1.普通数组
arr_ordinary=("lily" 123 "哈哈哈")  # 定义
echo ${arr_ordinary[1]}    # 访问
# 2.关联数组(与Map类似):可以使用任意的字符串、或者整数作为下标来访问数组元素。
# 语法:declare -A array_name, -A 选项就是用于声明一个关联数组。
declare -A arr_correlation=(["name"]="lily" ["age"]=18 ["sex"]="男")
# 也可以先声明一个关联数组,然后再设置键和值
declare -A arr_declare
arr_declare["name"]="lily"
arr_declare["age"]=18
arr_declare["sex"]="男"
# 使用键来访问数组
echo ${arr_declare["name"]}
# 获取数组中所有元素,使用 @ 或 * 可以获取数组中的所有元素
echo "数组的值为: ${arr_declare[*]}"   
echo "数组的值为: ${arr_declare[@]}"    # 相当于map中获取所有值value
echo "数组的键为: ${!arr_declare[*]}"
echo "数组的键为: ${!arr_declare[@]}"  # 相当于map中获取所有键
echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"
【4】shell运算符
#【1】算术运算符
a1=6
a2=2
# 1.加,+
echo `expr $a1 + $a2`  # 输出8
# 2.减,-
echo `expr $a1 - $a2`  # 输出4
# 3.乘,*
echo `expr $a1 \* $a2`  # 输出12,乘法的*前面必须加\
# 4.除,/
echo `expr $a1 / $a2`  # 输出3
# 5.取余,%
echo `expr $a1 % $a2`  # 输出0
# 6.赋值,=
a1=$a2  # 将变量a2的值赋给a1
# 7.相等,==,比较两个数字相等返回true
[ $a1 == $a2 ]  # 不能echo,不能直接使用,必须配合if或者test使用
# 8.不相等,!=,比较两个数字不相等返回true
[ $a1 != $a2 ]

#【2】关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
且不能直接使用,只能配合if或者test使用
a1=2
a2=4
# 检测两个数是否相等,相等返回 true
[ $a1 -eq $a2 ]   # 返回false
# 检测两个数是否不相等,不相等返回 true
[ $a1 -ne $a2 ]   # 返回 true
# 检测左边的数是否大于右边的,如果是,则返回 true
[ $a1 -gt $a2 ]  # 返回false
# 检测左边的数是否小于右边的,如果是,则返回 true
[ $a1 -lt $a2 ]  #返回 true
# 检测左边的数是否大于等于右边的,如果是,则返回 true
[ $a1 -ge $a2 ]  #返回 false
# 检测左边的数是否小于等于右边的,如果是,则返回 true
[ $a1 -le $a2 ]  #返回 true

#【3】布尔运算符
a1=2
a2=4
# 非运算(!),表达式为 true 则返回 false,否则返回 true
[ ! false ]  # 返回 true
# 或运算(-o),有一个表达式为 true 则返回 true
[ $a1 -lt 2 -o $a2 -gt 4 ] 返回 false
# 与运算(-a),两个表达式都为 true 才返回 true
[ $a1 -lt 2 -a $a2 -gt 4] 返回 false

#【4】逻辑运算符
a1=2
a2=4
# 逻辑的 AND(&&)
[[ $a -lt 4 && $b -gt 5]]  # 返回 false
# 逻辑的 OR(||)
[[ $a -lt 4 || $b -gt 5]]  # 返回 true

#【5】字符串运算符
a1="hhh"
a2="ggg"
# (=)检测两个字符串是否相等,相等返回 true
[ $a1 = $a2 ]  # 返回 false
# (!=)检测两个字符串是否不相等,不相等返回 true
[ $a1 != $a2 ]  # 返回 true
# (-z)检测字符串长度是否为0,为0返回 true
[ -z $a ]  # 返回 false
# (-n)检测字符串长度是否不为 0,不为 0 返回 true
[ -n "$a" ]  # 返回 true
# ($)检测字符串是否不为空,不为空返回 true
[ $a ]  # 返回 true

#【6】shell输出语句
1.echo:输出字符串,一般使用情况
2.printf:格式化输出字符串,功能更强,类似于c语言的输出
语法为:printf format-string [arguments...]
如:printf "%-10s %-8s %-5d\n" 姓名 性别 年龄

#【7】test命令
# 代码中的 [] 执行基本的算数运算
num1=100
num2=100
if test $[num1] -eq $[num2]  # 测出test后面的语句看shell相关运算符
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

#【8】流程控制语句
#(8.1) if语句
# 语法如下
if condition
then
    command1 
    command2
    ...
    commandN 
fi
# 写成一行
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

#(8.2) if-else语句
# 语法如下
if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

#(8.3) if-else-if-else语句
注:如果使用 ((...)) 作为判断语句,大于和小于可以直接使用 ><
# 语法如下
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

#(8.4) 循环语句
#(8.4.1) for循环语法如下
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
# for循环示例,打印1,2,3,4,5
for item in 1 2 3 4 5
do
    echo "$item"
done

#(8.4.2) while循环语句语法
while condition
do
    command
done
# while循环示例,其中let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
value=1
while(( $value<=5 ))
do
    echo $value
    let "value++"
done

#(8.4.3) 无限循环语句语法
while :
do
    command
done
# 或者
while true
do
    command
done
# 或者
for (( ; ; ))

#(8.4.4) until 循环
# 注:until 循环执行一系列命令直至条件为 true 时停止
until condition
do
    command
done
# 示例,输出 0 ~ 5 的数字
a=0
until [ ! $a -lt 5 ]
do
   echo $a
   a=`expr $a + 1`
done

#(8.5) 多分枝选择语句
注:case ... esac 为多选择语句,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记
# 语法如下
casein
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac
# 示例
read number  # 阻塞并读取用户输入
case $number in
  1)
  echo "用户输入了$number" ;;
  2)
  echo "用户输入了$number" ;;
  *)
  echo "相当于default执行";;
esac

#(8.6) break和continue
在shell中也是使用break和continue跳出循环,含义与其它编程语言类似

#【9】shell函数
语法与js类似,调用方式稍有不同
# 语法如下
[ function ] funname [()]
{
    action;
    [return int;]
}
注:
1.可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2.参数返回,可以显示加return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
示例及使用如下

# 在shell脚本中函数必须先定义后使用
# 函数定义如下
usemyshellfun(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
    return $((2+3))
}
# 调用函数并传参
usemyshellfun 1 2 3 4 5 6 7 8 9 34 73
# 注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

#【10】shell输入输出重定向
# 将输出重定向到 file
command > file
# 将输入重定向到 file
command < file
# 将输出以追加的方式重定向到 file
command >> file
# 将文件描述符为 n 的文件重定向到 file
n > file
# 将文件描述符为 n 的文件以追加的方式重定向到 file
n >> file
# 将输出文件 m 和 n 合并
n >& m
# 将输入文件 m 和 n 合并
n <& m
# 将开始标记 tag 和结束标记 tag 之间的内容作为输入
<< tag
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
1.标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
2.标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
3.标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

# 将错误流stderr 重定向到 file
command 2>file
# 将错误流stderr 重定向并追加到 file
command 2>>file
# 将输出流stdout 和错误流 stderr 合并后重定向到 file
command > file 2>&1
# 追加方式
command >> file 2>&1
另:/dev/null 文件

# /dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到
# 将命令的输出重定向到它,会起到"禁止输出"的效果

# 如果希望执行某个命令,但又不希望在屏幕上显示输出结果
command > /dev/null
# 如果希望屏蔽 stdout 和 stderr
command > /dev/null 2>&1
2. bat命令

bat相关命令和shell命令有异曲同工之妙,而且bat会比shell使用简单点

【1】获取和设置相关变量
# 获取常用变量不需要区分大小写,使用%variable%可以获取变量值
# 获取当前目录
echo %cd%
# 获取命令搜索路径
echo %path%
# 获取当前日期
echo %date%    # 格式:2023/03/22 周三
# 获取当前时间
echo %time%  # 格式:14:26:46.97
# 获取 0 和 32767 之间的任意十进制数字
echo %random%
# 获取上一命令执行结果码
echo %errorlevel%

# 变量设置,与shell有所不同,格式如下
set [variable=[string]]  #variable表示变量名,string表示变量值
# 例
set temp="哇哈哈"
echo %temp%  # 输出:"哇哈哈"
【2】字符串操作
# 字符串截取,命令格式 echo %var:~n,k%,
# 1."var",表示待截取字符的字符串
# 2."~"取字符标志符
# 3."n"表示字符截取起始位置
# 4."k" 表示截取几位
set temp="wahaha哇哈哈123"
echo %temp:~2,3%  # 输出:hah
echo %temp:~0,-3%  # 输出:wahaha哇哈哈

# 字符串替换,命令格式命令%var:old_str=new_str%
set replace_str=%temp:123=熏悟空%
echo %replace_str%  # 输出:wahaha哇哈哈熏悟空
echo %temp%  # 输出:wahaha哇哈哈123,不改变原值
【3】bat注释
rem 注释符,也可以用两个冒号代替(::)
rem 这是一个注释,此注释不会显示
【4】bat输出语句
echo 显示信息,或启用或关闭命令回显。@字符放在命令前将关闭该命令回显,无论此时echo是否为打开状态
# 批处理命令在执行时显示自身命令行
echo on
# 批处理命令在执行时不显示自身命令行
echo off
# 关闭echo off命令行自身的显示
@echo off
# 创建包含字符test的test.txt文件
echo test > file.txt
【5】基本命令
# 暂停并输出“请按任意键继续. . .”
pause 等待并提示"请按任意键继续. . ."  # 阻塞窗口,程序执行完以后不会关闭窗口
pause > nul  # 等待但不出现提示语
echo wait a moment.. & pause > nul # 输出指定信息并阻塞窗口

# 程序执行结果返回码,执行成功返回0,失败返回为1
echo %errorlevel%

# 启动一个单独的窗口以运行指定的程序或命令,程序继续向下执行
start [command/program] [parameters]

# 退出CMD.EXE程序或当前批处理脚本
# 1./B:指定要退出当前批处理脚本而不是 CMD.EXE。如果从一个批处理脚本外执行,则会退出 CMD.EXE
# 2.exitCode:指定一个数字号码。如果指定了 /B,将 ERRORLEVEL设成那个数字。如果退出 CMD.EXE,则用那个数字设置过程退出代码
exit [/B] [exitCode]

# 清除屏幕内容
cls

# 提供 Windows 命令的帮助信息
help [command]

# 设置cmd窗口的标题
title 标题名字

# 设置默认的控制台前景和背景颜色
# 颜色属性由两个十六进制数字指定:第一个为背景,第二个则为前景
# 以下任意俩种颜色组合
#   0 = 黑色       8 = 灰色
#   1 = 蓝色       9 = 淡蓝色
#   2 = 绿色       A = 淡绿色
#   3 = 湖蓝色     B = 淡浅绿色
#   4 = 红色       C = 淡红色
#   5 = 紫色       D = 淡紫色
#   6 = 黄色       E = 淡黄色
#   7 = 白色       F = 亮白色
color [attr]  # attr 指定控制台输出的颜色属性

# 从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序
call 路径文件名 标签

# 跳转命令。程序指针跳转到指定的标签,从标签后的第一条命令开始继续执行批处理程序
goto label  # label是参数,指定所要转向的批处理程序中的行
# 例子,打开多个cmd窗口直到资源耗尽
:label
start
goto label
【6】语句结构
####
####1.if语句
####
# if语句实现条件判断,包括字符串比较、存在判断、定义判断等。# # 通过条件判断,if语句即可以实现选择功能。
/*
1.字符串比较
  语法格式:if [/i] [not] str1 比较操作符 str2 (相关操作) [else (相关操作)]
  		  有/i则不区分字符串大小写;选择not项,则对判断结果进行逻辑非
比较操作符:
  1.== - 等于
  2.EQU - 等于
  3.NEQ - 不等于
  4.LSS - 小于
  5.LEQ - 小于或等于
  6.GTR - 大于
  7.GEQ - 大于或等于
*/
# 例子
set str1=123456
set str2=abcdef
if %str1%==%str2% (echo 字符串相同!) else (echo 字符串不相同!)
if /i not %str1%==%str2% (echo 字符串不相同!) else (echo 字符串相同!)

/* 
2.存在判断:存在判断的功能是判断文件或文件夹是否存在
  语法格式:if [not] exist filename (相关操作) [else (相关操作)]
*/
# 例子1
if exist %0 echo 文件%0是存在的!  # %0代表该批处理的全称(包括驱动器盘符、路径、文件名和扩展类型)
# 例子2
if not exist %0(
  echo 文件夹%0不存在!
)else echo 文件夹%0存在!

/*
3.定义判断:定义判断的功能是判断变量是否存在,即是否已被定义
  语法格式:if [not] defined variable (相关操作) [else(相关操作)]
*/
# 例子1
set var=111
if defined var (echo var=%var%) else echo var尚未定义!
# 例子2
set var=% %
if defined var (echo var=%var%) else echo var尚未定义!

####
####2.for循环语句
####
/*
1.无开关:无开关的for语句能够对设定的范围内进行循环,是最基本的for循环语句
  语法格式:for %%v in (循环值values)  do (相关操作)
相关解释:
  %%v是批处理程序里面的书写格式,注意v只能是单字符。在DOS中书写为%v,即只有一个百分号(%);values就是需要我们设定的循环范围,类似于C语言里面的循环变量;do后面的(相关操作)就是循环所执行的命令,即循环体
*/
# 例子1(在脚本文件中)
for %%i in (a,"b c",d,123) do echo %%i
# 例子2(在dos或者cmd窗口中)
for %i in (a,"b c",d,123) do echo %i

/*
2.开关/L:开关/L的for语句,可以根据循环值velues里面的设置进行循环,从而实现对循环次数的直接控制
  语法格式:for /L %%v in (start,step,end) do (相关操作)
相关解释:
  start为开始计数的初始值,step为每次递增的值,end为结束值。当end小于start时,step需要设置为负数。
*/
# 例子1,打印1到10(小于10)步长为2的数字
for /l %%i in (1,2,10) do @echo %%i
# 例子2(在dos或者cmd窗口使用)
for /l %i in (1,2,10) do @echo %i

/*
3.开关/f:开关/f的for语句可以解析字符串和文本
  语法格式:for  /f ["options"] %%v in (循环值values) do (相关操作)
  相关解释:
    options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一个或多个的组合。
*/

/*
4.开关/D或/R:开关/D或/R的for语句是与目录或文件有关的命令,一般情况下很少使用。含开关/R的命令有时候被用于通过遍历文件夹来查找某一个文件或文件夹
*/

五、案例:

1. shell:
【1】Shell脚本: https://zhuanlan.zhihu.com/p/601971378?utm_id=0
【2】109 个实用 shell 脚本,建议收藏!: https://zhuanlan.zhihu.com/p/468003798
2. bat:
【1】图标恢复.bat(解决桌面图标变为白纸的情况)
@echo off 
taskkill /f /im explorer.exe 
CD /d %userprofile%\AppData\Local 
DEL IconCache.db /a 
start explorer.exe 
echo 执行完成
【2】清理图标缓存.bat
@echooff
color0A
taskkill/f/imexplorer.exe
attrib-h-s-r”%userprofile%\AppData\Local\IconCache.db“
del/f”%us
echo 执行完成
【3】Navicat脚本
@echo off
echo Delete HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium\Registration[version and language]
for /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium" /s | findstr /L Registration"') do (
    reg delete %%i /va /f
)
echo.
echo Delete Info folder under HKEY_CURRENT_USER\Software\Classes\CLSID
for /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\Classes\CLSID" /s | findstr /E Info"') do (
    reg delete %%i /va /f
)
echo.
echo Finish
pause

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/984015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【UE】材质描边、外发光、轮廓线

原教学视频链接&#xff1a; ue4 材质描边、外发光、轮廓线_哔哩哔哩_bilibili 步骤 1. 首先新建一个材质&#xff0c;这里命名为“Mat_outLine” 在此基础上创建一个材质实例 2. 在视口中添加一个后期处理体积 设置后期处理体积为无限范围 点击添加一个数组 选择“资产引用”…

如何将JACOCO应用到企业实战中~测试过招,只需6点

1、下载 jacoco 官网&#xff1a;https://www.jacoco.org/jacoco/index.html 如果你想学习自动化测试&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网第一的自动化测试教程&#xff0c;同时在线人数到达1000人&#xff0c;并且还有笔记可以领取及…

Win10右键 nvidia rtx desktop manager 怎么删除(最新)

在更新了最新的 nvidia后原来的隐藏鼠标右键菜单后不行了&#xff0c;新方法如下&#xff1a; 步骤一&#xff1a;在键盘“WINR”键同时操作下&#xff0c;启动运行框&#xff0c;在框内输入“regedit”&#xff0c;打开深度系统win7 的注册表编辑器。 步骤二&#xff1a;为防…

Spring学习|Bean的作用域、自动装配Bean、注解实现自动装配、Spring注解开发

Bean的作用域 单例模式(Spring默认机制) 原型模式:每次从容器中get的时候&#xff0c;都会产生一个新对象! Bean的自动装配 自动装配是Spring满足bean依赖一种方式! Spring会在上下文中自动寻找&#xff0c;并自动给bean装配属性! 在Spring中有三种装配的方式 1.在xml中显示的…

在字节跳动和拼多多干了5年测试,熬夜总结出来的划水经验....

先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入字节&#xff0c;之后跳槽到了拼多多&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是5年的工作经验吧。 这5年之间完成了一次晋升&#xff0c;换了一家公司&#xff0c;…

java八股文面试[数据库]——MySQL死锁的原因和处理方法

1) 表的死锁 产生原因: 用户A访问表A&#xff08;锁住了表A&#xff09;&#xff0c;然后又访问表B&#xff1b;另一个用户B访问表B&#xff08;锁住了表B&#xff09;&#xff0c;然后企图访问表A&#xff1b;这时用户A由于用户B已经锁住表B&#xff0c;它必须等待用户B释放…

ZooInspector

一、在window&#xff0c;使用我们先打开Zookeeper,目录bin下的zkServer.cmd&#xff0c;把Zookeeper运行起来 ​编辑https://img.111com.net/attachment/art/187687/5f0c25fbe580c.png 二、可以使用目录bin下的zkCli.cmd&#xff0c;查询Zookeeper数据的方式&#xff0c;但是…

大模型浪潮席卷!和鲸科技入选创业邦“2023值得关注的125家AIGC企业”榜单

为以专业视角发掘现阶段积极探索 AIGC 技术和应用的企业&#xff0c;对接企业与场景&#xff0c;推动技术落地&#xff0c;创业邦于近日发布了“2023 值得关注的 125 家 AIGC 企业”榜单&#xff0c;和鲸科技凭借旗下 ModelWhale 数据科学协同平台在承载气象大模型的构建与应用…

企业怎么选择广告片的投放途径

TVC广告片和宣传片都是常见的企业营销工具&#xff0c;每种形式都有各自的特点和适用场景。选择哪种形式更适合企业投放&#xff0c;取决于多个因素&#xff0c;包括目标受众、营销目标、预算和信息传递需求等。接下来由深圳TVC广告片制作公司老友记小编从以下几个方面介绍它们…

【Python报错解决方案】DeprecationWarning: `np.float` is a deprecated

报错amoconda libsite-packages sklearn linear model least ngl.py30: Deprecationmarming: mp.float is a deprecated alias for the builtinfloat , To silence this warning, wse flat by itself. Doing this will not modify amy behavior and is safe. If you specifical…

机器学习基础算法--回归类型和评价分析

目录 1.数据归一化处理 2.数据标准化处理 3.Lasso回归模型 4.岭回归模型 5.评价指标计算 1.数据归一化处理 """ x的归一化的方法还是比较多的我们就选取最为基本的归一化方法 x(x-x_min)/(x_max-x_min) """ import numpy as np from sklea…

python超详细基础教程:元组和集合

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 元组和集合是Python中的基本类型 python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一&#xff0c;元组 元组&#xff08;tuple&#xff09;由小括号、逗号和数据对象构成的集合&#xff0c;各个项通过逗号…

毕业设计-摄像头识别二维码

本毕业设计采用imx6ull-linux4.1.15-qt5.6开发板进行测试 相关交叉编译包和摄像头测试程序已上传&#xff1a;https://download.csdn.net/download/qq_42952079/88282608 将zbar和opencv下的lib库文件拷贝到开发板的lib目录下&#xff0c;将camera可执行文件拷贝到开发板目录下…

解锁前端Vue3宝藏级资料 第四章 VUE常用 UI 库 1 ( element-plus,Ant ,naiveui,ArcoDesign)

现在常用的前台UI 分别是以下几种&#xff0c;我们将从中间选择介绍几个主流的UI的用于后台的系统搭建与开发。 Ant Design Vue element-plusnaiveuiArcoDesignBootstrap Vue Buefy Chakra UI Framevuerk Oruga Tachyons Tailwind CSS NutUI Vant Vuetify.js第一章 Vue3项目创建…

[machine Learning]推荐系统

其实严格来说推荐系统也是一种监督学习,我们需要根据已有数据进行预测,但是这种训练数据不是单纯的输入和输出问题,所以被归类为"超越监督学习"的一种? 今天去旁听了隔壁专业的机器学习课程,感觉自己的知识确实不是很系统,所以后面会找个机会把前面的代码给补充上.…

【肝素··】

Recent advances in the management of venous thromboembolism Korean J Hematol 2010;45:8-13 Serpin Structure, Mechanism, and Function-2002 糖胺聚糖 凝血 Fibrinolysis | Detailed Pedia

2023百度云智大会:科技与创新的交汇点

​ 这次的百度云智大会&#xff0c;可谓是亮点云集—— 发布了包含42个大模型、41个数据集、10个精选应用范式的全新升级千帆大模型平台2.0&#xff0c;发布首个大模型生态伙伴计划&#xff0c;而且也预告了文心大模型4.0的发布&#xff0c;大模型服务的成绩单也非常秀&#x…

文件重命名不再繁琐:MetaRename for Mac帮你简化重命名流程

文件重命名是我们在日常使用电脑时经常需要进行的一项任务。但是&#xff0c;有时候我们需要批量重命名文件&#xff0c;并且希望在新文件名中添加一些特定的信息&#xff0c;比如日期、时间、序号等。这时候&#xff0c;使用MetaRename for Mac可以帮助你轻松完成任务。 Meta…

手写Spring:第7章-实现应用上下文

文章目录 一、目标&#xff1a;实现应用上下文二、设计&#xff1a;实现应用上下文三、实现&#xff1a;实现应用上下文3.1 工程结构3.2 Spring应用上下文和Bean对象扩展类图3.3 对象工厂和对象扩展接口3.3.1 对象工厂扩展接口3.3.2 对象扩展接口 3.4 定义应用上下文3.4.1 定义…

Python数据分析实战-将dataframe某列的值分成不同区间并计算每个区间的频数(附源码和实现效果)

实现功能 将dataframe某列的值分成不同区间并计算每个区间的频数 实现代码 import pandas as pd# 创建dataframe data {Name:[Tom1, Jack1, Steve1, Ricky1, Tom2, Jack2, Steve2, Ricky2],Score:[78,60,59,42,88,34,69,142]} df pd.DataFrame(data) print(df)# 定义区间和…