[PYTHON][BAT][SHELL] 常见易忘 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"

2.2、文件夹内文件批量个性修改

for file in *.json
do
    autoid=echo "$file" | sed 's:\(..\)E.*:\1:g'
    echo $autoid
    if [ $autoid -gt 99 ]
    then
        rm $file
    else
        cp $file "1"$file
        sed -i 's:"id".*:"id"\:"1'$autoid'":g' "1"$file
    fi
done

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” 保存分区兵退出

格式化:
分区尚未完成,仍需格式化分区。您需要注意的是它是否已经被系统挂载,如果是,您应该首先卸载该设备。

[En]

The partition is not finished yet, and the partition still needs to be formatted. What you need to pay attention to is whether it has been mount by the system, and if so, you should first umount the device.

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语言等高级语言中,不管是对比字符串、还是对比整型、浮点数等等数据类型,都是使用==、

Original: https://www.cnblogs.com/zjutlitao/p/15459244.html
Author: beautifulzzzz
Title: [PYTHON][BAT][SHELL] 常见易忘 python、bat、shell 脚本操作汇总(持续更新)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/7307/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部