[PYTHON][BAT][SHELL] 常见易忘 python、bat、shell 脚本操作汇总(持续更新)

beautifulzzzz 2021-10-26 10:17:50
Python BAT shell 常见



BAT 脚本

1、相互调用

1.1、bat 调用 python

bat批处理执行python 的几种方式 ———— 批处理, python打包成 exe文件

@echo off
C:
cd C:\Users\ldl\Desktop
start python test100.py
start python 1.py
start python 1.py 10
start python 1.py 100
exit

1.2、bat 调用 bat

如何在bat文件中调用另一个bat文件

  • 两个bat文件在同一个目录下

    call b.bat
    
  • 两个bat文件不在同一个目录下

    先使用cd /d 目录来进入相应的目录,接着再call就行了
    

2、系统相关

2.1、不关闭

怎么让bat执行完后不关闭,让bat不关闭

pause

2.2、读取环境变量

windows命令行或者bat中查询环境变量的值

echo
查看java_home环境变量
echo %java_home%
查看path环境变量
echo %path%
set
查看java_home环境变量
set java_home

3、文件操作

3.1、读取

bat 读取文件

在批处理脚本中读取文件是通过使用 FOR 循环命令来完成文件中需要读取的每一行。 由于没有直接的命令从文件中读取文本到变量中,所以需要使用 for 循环来达到这个目的。

示例

@echo off
FOR /F "tokens=* delims=" %%x in (new.txt) DO echo %%x

delims 参数用于将文件中的文本分解为不同的标记或单词。 每个单词或标记然后存储在变量x中。 对于从文件读取的每个单词,都会进行回显以将单词打印到控制台输出。

其他参考链接:https://www.hxstrive.com/article/805.htm


3.2、判断文件是否存在

BAT脚本之判断文件是否存在

@echo off
@title copy sth to current filepath
mode con lines=5 cols=40
SET SourceFile=123.txt
SET GenFile1=456.txt
if exist %SourceFile% (
if not exist %GenFile1% (
copy %SourceFile% %GenFile1%
) else (
echo %GenFile1% is exist!
)
) else (
echo %SourceFile% is not exist!
)
echo Success
ping -n 3 127.0.0.1 > nul

3.3、删除文件及文件夹

bat 删除文件及文件夹

1) 删除文件
del命令参数说明
/F 强制删除只读文件。
/S 从所有子目录删除指定文件。
/Q 安静模式。删除全局通配符时,不要求确认。
/A 根据属性选择要删除的文件。
2) 删除目录
rd 的另外一个写法是rmdir
RD [/S] [/Q] [drive:]path
RMDIR [/S] [/Q] [drive:]path
/S 除目录本身外,还将删除指定目录下的所有文件。用于删除目录树。
/Q 安静模式,带 /S 删除目录树时不要求确认
3) 创建目录。
MKDIR [drive:]path
MD [drive:]path
如果需要,MKDIR 会在路径中创建中级目录。
mkdir \a\b\c\d

5、输出打印

5.1、打印空行

批处理 bat 文件中,如何输出空行

用 echo 加空格、单引号、双引号是不行的。

用 echo.,紧接着O后面加一个点,实现输出空行。



6、字符串处理

6.1、字符串分割

批处理 字符串分割

@echo off
::定义一个以分号作为分隔的字符串
set str=AAA;BBB;CCC;DDD;EEE;FFF
::str的副本
set remain=%str%
:loop
for /f "tokens=1* delims=;" %%a in ("%remain%") do (
::输出第一个分段(令牌)
echo %%a
rem 将截取剩下的部分赋给变量remain,其实这里可以使用延迟变量开关
set remain=%%b
)
::如果还有剩余,则继续分割
if defined remain goto :loop
pause

6.2、字符串查找

Bat批处理中的 FIndstr用法
windows bat批处理脚本 字符串截取、拼接、查找等使用说明
批处理-字符串操作(截取、替换、合并)

findstr:

  1. 指定多个字符串和一个文件,打印找到的行:findstr "hello world" Test1.txt
  2. 指定多个字符串和多个文件,打印找到的行:findstr "hello world" Test1.txt Test2.txt
  3. 将"hello world"作为一个整体来查找:findstr /C:"hello world" Test1.txt--------这个比较关键,可以
  4. 只打印文件中完全匹配字符串的行:findstr /C:"hello world" /X Test1.txt
  5. 只打印不匹配的行:findstr /C:"hello world" /X /V Test1.txt
  6. findstr中的字符串支持正则表达式,可以使用/R来指定,此时字符串编程正则表达式。findstr /R "world$" Test1.txt


SHELL 脚本

1、查找

1.1 读取正数第n行和倒数第n行

cat a.sh | tail -n +2 | head -n 1
cat a.sh | tail -n 2 | head -n 1

1.2 查找某字符串 在文件的行数

https://blog.csdn.net/whatday/article/details/105066031

grep -n "xxx" str.txt | head -1 | cut -d ":" -f 1 # 提取首次匹配的行号

2、替换

2.1、替换文件夹中所有满足条件文件中的字符串

grep -rl "uint32_t" ./wireless_onoff_oem/ | xargs sed -i "s:uint32_t:u32:g"
grep -rl "uint16_t" ./wireless_onoff_oem/ | xargs sed -i "s:uint16_t:u16:g"
grep -rl "uint8_t" ./wireless_onoff_oem/ | xargs sed -i "s:uint8_t:u8:g"
grep -rl "int32_t" ./wireless_onoff_oem/ | xargs sed -i "s:int32_t:s32:g"
grep -rl "int16_t" ./wireless_onoff_oem/ | xargs sed -i "s:int16_t:s16:g"
grep -rl "int8_t" ./wireless_onoff_oem/ | xargs sed -i "s:int8_t:s8:g"

3、磁盘操作

3.1、分区与格式化

列出:

* ~ sudo fdisk -l
Disk /dev/mmcblk0: 1.89 GiB, 2002780160 bytes, 3911680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4edc62da
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 2048 3911679 3909632 1.9G b W95 FAT32

分区:

* ~ sudo fdisk /dev/mmcblk0
a.在此状态下输入“m”可以查看帮助
b.在此状态下输入“d” 删除已经存在的分区,第一次可跳过,如果要重新分区就需要。
c.在此状态下输入“p” 查看已经存在的分区
d.在此状态下输入“n” 新增分区,根据提示需要输入分区号,之后还需要输入分区大小
e.在此状态下输入“t” 改变文件系统格式,命令“l”显示对应文件系统格式的id(提示上也有这个说明)
f.在此状态下输入“w” 保存分区兵退出

格式化:
分区完了还没完成,还需要对分区进行格式化。需要注意的是要看下是否被系统mount了,如果有的话要先umount设备

sudo mkfs.ext4 /dev/mmcblk0p1

4、 比较

4.1、比较的基础知识

shell的if和else
Shell if 条件判断

1) 基本语法

shell的if语法和C语言等高级语言非常相似,唯一需要注意的地方就是shell的if语句对空格方面的要求比较严格(其实shell对所有语法的空格使用都比较严格),如果在需要空格的地方没有打上空格,都会报错。如if [ $1x == "ip"x ];then echo "abc";fi中少一个空格都会报错。另外shell的if语句必须以fi作为结尾,不然同样会报错。

有else和elif时也一样,需要注意空格的问题,下面这个例子可以作为参考:

if [ $1x == "ab"x ]; then
echo "you had enter ab"
elif [ $1x == "cd"x ]; then
echo "you had enter cd"
else
echo "you had enter unexpected word"
fi

2) 对比

介绍完if语句的基本语法后,if还有一个值得我们注意的地方,那就是"对比"。在C语言等高级语言中,不管是对比字符串、还是对比整型、浮点数等等数据类型,都是使用==、<=等等对比运算符就可以完成。但是在shell中对比字符串和对比数字,却是要分开两种方式。

对比字符串只能使用==、<、>、!=、-z、-n。对比字符串时,末尾一定要加上x(或者a、b等)一个字符,因为if [ $1x == "ab"x ]时如果没有了x ,并且$1是"",这个语句会翻译成if [ == "ab" ],左边相当于没有东西了,会报语法错误。或者使用[[ ]],就不需要x了。使用<或者>时,如果是用[ ],需要用转义符"",如>。

对比数字使用既能使用-eq、-ne、-gt、-ge、-lt、-le,也能使用==、<、>、!=。其中-eq的意思是equal,-ne是unequal,-gt是greater than,-ge是greater than or equal to,-lt是less than,-le是less than or equal to。


3)使用正则表达式

if在对比时可以使用正则表达式,如if [[ $1 == aa ]](或者if [ $1x == aax ])。如果使用""把aa包围起来,就会变成字符,而不是正则表达式中的


4)[和[[的区别

区别一。在[中使用逻辑运算符,需要使用-a(and)或者-o(or)。在[[中使用逻辑运算符,需要使用&&或者||。

区别二。[是shell命令,在它包围的表达式是它的命令行参数,所以串比较符>和<需要转义,否则就变成io重定向了。[[是shell关键字,不会做命令行扩展,所以<和>不需要进行转义。但是语法相对严格,如在[中可以用引号括起操作付,[[则不行。如if [ "-z" "ab" ]。

区别三。[[可以做算术扩展,[则不行。如if [[ 11+1 -eq 100 ]],而if [ 11+1 -eq 100 ]则会报错。


5)文件判断

在高级语言中,判断文件是否存在等各种状态都是需要调用特定的函数进行判断。而在shell中,这方面就比较方便些,只需要运算符即可。

常用的文件判断运算符如下:

-e 文件是否存在
-f 文件是否是普通文件(不是目录、设备文件、链接文件)
-s 表示文件大小不为0
-d 表示文件是否是目录
-b 表示是块设备(光驱、软盘等)
-c 表示是字符设备(键盘、声卡等)
-p 表示是管道
-h 表示是符号链接
-S 表示是否是socket
-r、-w、-x表示文件是否有可读、可写、可执行权限(指运行这个测试命令的用户)
f1 -nt f2 f1是否比f2新(new than)
f1 -ot f2 f1是否比f2旧(old than)
f1 -ef f2 f1和f2是否是相同文件的硬链接
```language

使用!时表示上述结果取反,由于内容较多,这里不一一列举了。下面一个例子可以作为编程参考

myfile="aa.txt"
if [ ! -f $myfile ]; then
echo $myfile" is not exist"
touch $myfile
else
echo $myfile" is exist"
fi
if [ ! -s $myfile ]; then
echo "hello, my master" > $myfile
else
echo $myfile" is not null"
fi


PYTHON 脚本

1、基本资料

1.1、指导文档

Python 基础教程
Python3 输入和输出


2、相互调用


3、函数相关

3.1、向文件传参

python脚本传递参数

[[email protected] ~]# cat /opt/python.py
#!/usr/local/bin/python
# -*- coding:utf-8 -*-
import sys
print(sys.argv[0]) #sys.argv[0] 类似于shell中的$0,但不是脚本名称,而是脚本的路径
print(sys.argv[1]) #sys.argv[1] 表示传入的第一个参数,既 hello
#运行结果:
[[email protected] ~]# python /opt/python.py hello
/opt/python.py #打印argv[0] 脚本路径
hello #打印argv[1] 传入的参数 hello

4、文件操作

4.1、文件夹拷贝

Copy directory contents into a directory with python [duplicate]

from distutils.dir_util import copy_tree
# copy subdirectory example
fromDirectory = "/a/b/c"
toDirectory = "/x/y/z"
copy_tree(fromDirectory, toDirectory)

4.2、查找文件

Find all files in a directory with extension .txt in Python

You can use glob:

import glob, os
os.chdir("/mydir")
for file in glob.glob("*.txt"):
print(file)

or simply os.listdir:

import os
for file in os.listdir("/mydir"):
if file.endswith(".txt"):
print(os.path.join("/mydir", file))

or if you want to traverse directory, use os.walk:

import os
for root, dirs, files in os.walk("/mydir"):
for file in files:
if file.endswith(".txt"):
print(os.path.join(root, file))

4.3、删除文件

shutil 文件(夹)复制与删除

shutil.copyfile( src, dst) #从源src复制到dst中去。 如果当前的dst已存在的话就会被覆盖掉
shutil.move( src, dst) #移动文件或重命名
shutil.copymode( src, dst) #只是会复制其权限其他的东西是不会被复制的
shutil.copystat( src, dst) #复制权限、最后访问时间、最后修改时间
shutil.copy( src, dst) #复制一个文件到一个文件或一个目录
shutil.copy2( src, dst) #在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,
类似于cp –p的东西
shutil.copy2( src, dst) #如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;
如果是不在相同的文件系统的话就是做move操作
shutil.copytree( olddir, newdir, True/Flase) #把olddir拷贝一份newdir,如果第3个参数是True,
则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本
来替代符号连接
shutil.rmtree( src ) #递归删除一个目录以及目录内的所有内容

5、数据结构

5.1 SET

Get unique values from a list in python [duplicate]

mylist = ['nowplaying', 'PBS', 'PBS', 'nowplaying', 'job', 'debate', 'thenandnow']
myset = set(mylist)
print(myset)

6、字符串

6.1、基础知识

Python 字符串
Python 字典(Dictionary)


6.2、XML 操作

xml.etree.ElementTree — The ElementTree XML API
How to write XML declaration using xml.etree.ElementTree
Insert xml element as first child using ElementTree in python

一个例子(可以实现自动遍历目录,向 Keil5 工程文件中插入 .c.h.lib 的逻辑)

def create_subgroup(UVPROJX_PATH,GROUP_NAME,SOURCES_ROOT,KIND,OFFSET_PATH):
tree = ET.parse(UVPROJX_PATH)
root = tree.getroot()
if KIND == '.c' or KIND == '.lib':
Groups = root.find("Targets").find("Target").find("Groups")
Group = ET.Element('Group')
GroupName = ET.SubElement(Group, 'GroupName')
GroupName.text = GROUP_NAME
Files = ET.SubElement(Group, 'Files')
kind_map = {'.c' : '1', '.lib' : '4'}
for root, dirs, files in os.walk(SOURCES_ROOT):
for file in files:
if file.endswith(KIND):
print(os.path.join(OFFSET_PATH+"\\"+root, file))
File = ET.SubElement(Files, 'File')
FileName = ET.SubElement(File, 'FileName')
FileName.text = file
FileType = ET.SubElement(File, 'FileType')
FileType.text = kind_map[KIND]
FilePath = ET.SubElement(File, 'FilePath')
FilePath.text = os.path.join(OFFSET_PATH+"\\"+root, file)
Groups.insert(0, Group)
tree.write(UVPROJX_PATH, encoding='utf-8', xml_declaration=True)
elif KIND == '.h':
IncludePath = root.find("Targets").find("Target").find("TargetOption").find("TargetArmAds").find("Cads").find("VariousControls").find("IncludePath")
if IncludePath.text == None:
IncludePath.text = ""
h_list=[]
for root, dirs, files in os.walk(SOURCES_ROOT):
for file in files:
if file.endswith(KIND):
h_list.append(OFFSET_PATH+"\\"+root)
#print(set(h_list))
for path in set(h_list):
print(path)
IncludePath.text = IncludePath.text + ";" + path
tree.write(UVPROJX_PATH, encoding='utf-8', xml_declaration=True)
else:
print("KIND INPUT ERROR")

链接



: 陆续更新中...

版权声明
本文为[beautifulzzzz]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/zjutlitao/p/15459244.html

  1. L'implémentation Python lit simplement le contenu d'Excel et signale les erreurs
  2. 用Python定义一个函数,接收n个数字,求这些参数数字的和
  3. Définissez une fonction en python, recevez n nombres et additionnez ces nombres de paramètres
  4. 上电Python写文件后,再断电后导致文件内容丢失
  5. 上電Python寫文件後,再斷電後導致文件內容丟失
  6. Une fois que Python est allumé pour écrire des fichiers, le contenu des fichiers est perdu après une panne de courant
  7. python套接字编程报错:ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。
  8. 【Python从入门到精通】(二)怎么运行Python呢?有哪些好的开发工具(PyCharm)
  9. 【Python从入门到精通】(二)怎么运行Python呢?有哪些好的开发工具(PyCharm)
  10. Python语法1
  11. 2018年度最受推荐的10本Python书籍(初学者必看)
  12. Les 10 livres Python les plus recommandés en 2018 (obligatoire pour les débutants)
  13. Syntaxe Python 1
  14. Python语法1
  15. 在python 运行celery时候 AttributeError: 'NoneType' object has no attribute 'Redis'错误
  16. Attributeerror: 'nonetype' Object has no attribute 'redis' Error when Celery is running in Python
  17. Syntaxe Python 1
  18. Python celery is a plug-in that focuses on distributed asynchronous task processing and task scheduling!
  19. Python celery is a plug-in that focuses on distributed asynchronous task processing and task scheduling!
  20. 在python,使用scrapy爬虫框架
  21. It's time for everyone to see your blog written in Django (including deployment tutorial video)
  22. Python扩展速记符 要求用for循环,if语句
  23. Python擴展速記符 要求用for循環,if語句
  24. Le sténographe d'extension Python nécessite une boucle pour, si instruction
  25. Python+人工智能就业班v5.0wumi
  26. python编程技术的题目,希望能得到解答
  27. Pandas determines the header row dynamically
  28. 关于#python#的问题:模拟登陆后能获取到cookie,就是cookie一天就过期
  29. pandas为dataframe添加新的数据行(rows)、在dataframe后面纵向添加一行数据(数据为列表list形式)、列有不匹配将会使用NA值进行填补
  30. pandas使用组合条件筛选、过滤数据行
  31. 热烈祝贺1024,求解Python3.10闪退问题
  32. Python基础题练习题库有没呢?
  33. python构建神经网络,正向和反向传播
  34. python爬虫输入数字翻页才成功,用变量代替不成功,为什么?
  35. 【Python 爬虫】 2、HTTP基本原理
  36. 【Python 爬虫】 1、爬虫基础概念
  37. Python中如何用find函数计数?
  38. 一文搞懂Python装饰器
  39. python数据结构之递归
  40. 关于#python#的问题:为什么这个open函数会报错
  41. Python:多输入数字求和(Python 程序控制结构)
  42. python忽略警告
  43. Python多维数组问题(编写程序统计成绩)
  44. 一步一步展示并总结Python的异常【建议收藏】
  45. Python中奇葩的round函数!
  46. 总结一下Python的模块加载解析
  47. 保姆级指导给Python库创建桌面快捷方式【赶紧收藏】
  48. 多图速成Python基础语法下篇【万字建议收藏】
  49. Python 命令行工具辅助getopt使用解析!
  50. 【python种子项目ppc】保姆级别指导给项目添加测试
  51. 【python种子项目ppc】一行代码生成项目与开发详细指导
  52. 保姆级教程带你开发优质的Python库之下篇【种子项目】
  53. 保姆级教程带你开发优质的Python库之中篇【命令行发行】
  54. 保姆级教程带你开发优质的Python库之上篇【建议收藏】
  55. python列表自动计算总分程序
  56. 某企业职工的月薪问题python 求解 不知道自己哪里写错了
  57. Python中外部函数对class类中的属性的调用
  58. 朋友股票亏惨了,我一怒用Python爬取了证券最新数据
  59. 习题8和9怎么写(Python基础)
  60. python数据分析,求任务4,5