推荐

定制开发

成功案例

个性化博客互动平台

pic
pic
pic
pic
pic
pic
pic

有好想法, 懒得实现? 请联系 👉

Contact Me

更多

最新

Awk

  • awk把连续的相同的分隔符作为1个分隔符处理!
  • awk可以按分隔符对每行进行切片处理!
  • awk会循环处理文件的每一行,这点与sed类似!
#
# options
#
# -f scripfile  可指定要执行的脚本文件.内容如:BEGIN{} {} END{}
# -F:  指定域分隔符为冒号,注意他们之间没有空格

#
# environment
#
# $n: 表示第1、第2...n个域
# $0: 表所有的域,类似于数据库中的一行Record(记录)
# FIELDWIDTHS: 如指定FIELDWIDTHS="2 3"表示第1列占2两个字符,第2列占3个字符!
# FS: 字段分隔符,默认是空格;OFS:输出字段分隔符;
# RS: 输入数据行分隔符,默认是换行;如果写成""则表示空白行,通常配合FS="\n"使用!
# NF: 数据文件中的字段总数!$NF就表示最后一个字段!$(NF-1):倒数第二。
# NR: 当前已处理的记录数!第2行时为2...
# ARGC: 命令行参数的数量
# ARGV: 命令行参数的数组
# ERRNO: 最后一个系统错误的描述
# CONVFMT: 数字格式转换
# FILENAME: 当前文件名 

# 命令必须放在大括号中,多个命令使用分号';'或换行符分割.
# 数组的下标可以看成是字符串,故`arr[09]`与`arr[9]`是不同的.
awk [options] '{program}' file

# awk会在每读取一行数据后,调用命令处理.
# 如下可以在所有事情之前执行cmd1,然后使用cmd做正事.完事后执行cmd2.
awk 'BEGIN {cmd1 FS=":"} {cmd} END {cmd} file'

# 逐行读取并切片,默认域分隔符是空格.
# ~/pattern/:匹配正则表达式; !~/pattern/:不匹配正则表达式
awk -F: '/pattern/{command}' file

function

  sub(r,s,t)    # 在t中将第一次出现的r替换为s
  substr(r,s)   # r中s开始的后缀部分
  substr(r,s,t) # r中s开始长度为t的后缀部分
  gsub(r,s)     # 在输入文件中用s替换r
  gsub(r,s,t)   # 在t中用s替换r
  index(s,t)    # s中第一个字符串t的位置
  length(s)     # s的长度
  match(s,t)    # s中是否包含匹配t的字符串,返回出现位置的索引+1,没有时返回0
  split(r,s,t)  # 在t上将r按s分割成序列
  if (condition)  # if (x~/[Hh]el?o/),使用正则表达式
    actions
  else
    actions
  while (condition)
    actions
  do
    actions
  while (condition)
  for (init_val; test_val; change_val)
    actions
  for (var in array)
    actions

demo

  awk '{print $2 $1 $4 $3}' file  # 打印file中的2,1,4,3列
  awk -F ":" '{if ($1==2 && $2==$3) printf $0}' /etc/passwd
  awk 'BEGIN {FS=","} {printf("%s\t%d\n",$2,$8)}' file  # 每输出两个域后换行
  awk 'BEGIN {FS=":";OFS=":"} gsub(/root/,"ROOT",$1) print $0' /etc/passwd  # 替换后输出
  awk 'NR % 2 == 0' xx  # 打印偶数行

更多

Cmd

Environment

http://libertyboy.free.fr/computing/reference/envariables/index.php

envstands for
%username%当前用户名
%systemdrive%C:\\
%systemroot%C:\\windows\\,或者等价于%windir%
%programfiles%C:\\Program Files
%userprofile%C:\\Documents and Settings\\lei
%appdata%C:\\Documents and Settings\\lei\\Application Data
%appdata%C:\\users\\lei\\appdata\\roaming,该值最好不要修改; %appdata%\Microsoft\Internet Explorer\Quick Launch
%userprofile%C:\\users\\lei,该值是固定的,等价于%homedrive%%homepath%
%temp%C:\\Users\\lei\\appdata\\local\\temp,该值最好不要修改
%comspec%C:\Windows\System32\cmd.exe
%errorlevel%表示上一个命令成功==0
%date%日期
%0%当前批处理文件全路径,删除自身: del %0 >nul 2>nul &exit
%~dp0%批处理文件所在的目录
%PROCESSOR_ARCHITECTURE%注意此值不能用来判断OS位数,因为cmd是32位的64位系统出来可能是x86

Common Cmd

rem https://learn.microsoft.com/en-us/sysinternals/downloads/psexec
psexec

rem process
start /max kmplayer.exe && exit
taskkill /f /im Qvod* 1>nul 2>nul

rundll32 DLLname,Functionname [Arguments]
rem 安全删除硬件窗口
rundll32 shell32.dll,Control_RunDLL hotplug.dll
rem 锁屏
rundll32 user32.dll,LockWorkStation

rem 管理工具
control admintools
rem 用户账户,可配置自动登录!
control userpasswords2
rem 文件夹选项
control folders
rem 鼠标选项(main.cpl)
control mouse
rem 键盘选项
control keyboard
rem 网络连接(ncpa.cpl)
control netconnections
rem 打印机
control printers

rem io
rem /e :every,复制子目录包括空目录
rem /y :如果有同名文件则取消提示以覆盖
rem /c :continue,即使出错也继续
rem /i :假定目标是一个目录,而不是文件(默认情况可能会提示)
rem /k :复制文件属性
rem /o :复制文件所有权和ACL信息
rem destination必须指明boot不然会将source的boot中的所有内容都复制到D:\tmp\
rem D:\tmp\boot不存在时会被自动创建!
xcopy /e /i /y /c boot D:\tmp\boot

rem misc
rem lusrmgr.msc, secpol.msc, perfmon.msc, diskmgmt.msc, devmgmt.msc
rem appwiz.cpl, powercfg.cpl, timedate.cpl(时间日期), wscui.cpl(windows安全)
rem sysdm.cpl,3(系统属性-高级), desk.cpl(桌面-属性), inetcpl.cpl(Internet属性)
rem mmsys.cpl(声音), hdwwiz.cpl(添加硬件向导), joy.cpl(游戏手柄)
rem 压缩
makecab /d CompressionType=LZX /d CompressionMemory=21 filename

rem vbExclamation叹号 vbInformation提示 vbQuestion问号 vbCritical叉号
rem vbYesNo确定取消按钮 vbSystemModal前段显示
mshta vbscript:msgbox("Hello,world!",vbYesNo,"batch script")(window.close)

Network

rem set DHCP, LocalConnection
netsh interface ip set address "本地连接" dhcp
netsh interface ip set dns "本地连接" dhcp

rem set static
netsh interface ip set address "本地连接" static 192.168.1.123 255.255.255.0 192.168.1.1
netsh interface ip set dns "本地连接" static 8.8.8.8
netsh wlan show all  显示当前无线连接以及搜索到的所有其他无线网络

rem 建立无线网络,注意无线物理网卡的连接不要禁用,虽然其显示红叉
rem 如果"支持的承载网络"是'否'则不支持网络共享
netsh wlan show drivers

rem wifi share
netsh wlan set hostednetwork mode=allow ssid="hello world" key=hello //length(key)>=6
rem 共享当前网络连接到Microsoft Virtual Wifi miniport
control netconnections
rem stop show
netsh wlan start hostednetwork

rem net resource share
rem 首先创建一个隐藏用户
net user lei$ 123 /add
net localgroup administrators leizi$ /add /comment:"some comment"
rem 从users组中删除用户
net localgroup users leizi /del
rem 开启/启动telnet服务stop
net start telnet
rem 映射网络驱动器
net use j: \\192.168.20.2\ipc$
rem 断开所有IPC$连接(默认不支持Admin权限的连接)
net use * /del
rem 查看共享
net share

filetype

  • 会修改例如如下注册表位置(全局): hkcr\lnkfile
  • windows默认定义了6中文件类型: text(txtfile) image audio video compressed system
rem 将快捷方式关联到正确的'关联类型',不要应用到未知的自定义类型,这不起任何作用!
rem 会给HKCR/.lnk下的默认键添加键值"lnkfile"
assoc .lnk=lnkfile

rem 添加新的文件扩展名对应的打开方式;不会显示相应的文件类型图标.
ftype .conf=d:\usr\Vim\gvim.exe --remote-silent %%1>nul

rem 添加无扩展名文件的默认打开方式
ftype .=d:\usr\Vim\gvim.exe --remote-silent %&1>nul

更多

WMIC

Windows Management Instrument Command-line

  • 注意: 如果wmic命令上头有ver|find "5." >nul 2>nul则会引起奇葩的无限等待问题(XP).
rem 更改用户名
wmic useraccount where "name='admin'" call Rename "admin00"
rem 查看CPU型号
wmic cpu get name
rem 获取当前系统进程名称以及可执行路径
wmic process get name,executablepath
rem 获取文件信息
wmic datafile where "name='c:\\notepad.exe'" get CreationDate,LastAccessed,LastModified
rem 文件搜索
wmic datafile where "filename='qq' and extension='exe' and drive='d:' and filesize>=9560" get drive,path
rem 更改计算机名
wmic computersystem where "name='abc'" call rename "12 3"
rem 更改工作组google --> MyGroup
wmic computersystem where "name='google'" call joindomainorworkgroup "","","MyGroup",1
rem 查看屏幕分辨率
wmic desktopmonitor where status='ok' get screenheight,screenwidth
rem 获取硬盘固定分区盘符(非光驱、移动存储器)
wmic logicaldisk where "drivetype=3" get name
rem 获取硬盘各分区文件系统以及可用空间
wmic logicaldisk where "drivetype=3" get name,filesystem,freespace

rem 获得环境变量home的用户名以及变量值,结果可能是: ComputerName\lei %homedrive%%homepath%(==%home%==userprofile)
wmic environment where "name='temp'" get userName,variablevalue
rem 编辑系统环境变量,添加新的值
wmic environment where "name='path' and username='<system>'" set VariableValue="%path%;e:\tools"
rem 新增用户环境变量home,值为%home%
wmic environment create name="home",username="%username%",VariableValue="%home%"
rem 删除home环境变量
wmic environment where "name='home'" delete

rem 设置新的页面文件删除旧的,单位是MB.
wmic pagefileset create name='d:\pagefile.sys',initialsize=512,maximumsize=1024
wmic pagefileset where "name='c:\\pagefile.sys'" delete

rem 更改页面文件大小
wmic pagefileset set InitialSize="512",MaximumSize="512"

更多

Permission

icalcs

rem 以当前登录的用户取得文件/文件夹的所有者权限(r:递归),不要使用通配符
takeown /r /f filename

rem 赋予用户lei对文件/文件夹filename的完全控制权限(lei必须是所有者,否则可能失败)
rem 赋予权限,f:所有
icacls filename /t /c /grant lei:f

rem /remove(撤销权限) /deny(拒绝用户访问权限)
rem 移除用户的读取执行和删除权限
icacls file remove administrator:(rx,d)

setacl

http://setacl.sourceforge.net/
https://helgeklein.com/setacl/documentation/command-line-version-setacl-exe/

更多

Registry

  • 需要添加的"路径、键值名称、键值数据"如果有空格需使用双引号!
  • 可用reg import导入已有的.reg文件
  • 所有的"命令、注册表路径、键值名称、键值类型"均不分大小写!
  • 注册表路径必须使用反斜杠!
  • reg_expand_sz中要使用如下形式: %%systemroot%%
  • &B: 字符串的值时表示这个字母加下划线,为默认快捷键

demos

rem /f  :强制不提示出错; /t:默认就是reg_sz,可以不指定
rem /ve :指定默认键值'/ve /d data',e代表empty!也可以配合delete删除默认键
rem /va :配合delete,delete all the values under this key
reg add | delete <注册表路径> /v <键值名称> /t <键值类型> /d <键值数据> /f

rem 打开列表添加vim
reg add hkcu\Software\Classes\Applications\gvim.exe\shell\open\command /f /ve /d "d:\usr\Vim\gvim.exe --remote-silent %1" >nul

rem autorun
reg add hkcu\Software\Microsoft\Windows\CurrentVersion\Run /f /v Launchy /t reg_sz /d "%~dp0%\LaunchyPortable.exe" >nul

rem misc
reg add hkcu\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v "Hidden" /t reg_dword /d 0 /f
reg add hkcu\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v "Hidden" /t reg_dword /d 1 /f
reg query keyname [/v valuename | /ve defaultname] [/s everySubItem]
reg query "hklm\SYSTEM\ControlSet002\Control\Session Manager\Environment" /v path | find "D:\Program Files\bin"

taskbar

  • 这几个键值必须kill掉explorer然后import才能生效(因为他们都是开机读取关机写入)
  • 主要由该键值的第9个字节的个个bit控制,主要控制任务栏的方向、自动隐藏等属性
    HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2 28000000ffffffff02000000000000003e0000003000000000000000000000003e00000000030000
  • 该键值主要控制任务栏上’Quick Launch’是否显示
    HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams\Desktop\TaskbarWinXP
  • 该键值主要控制任务栏上已经被锁定的图标
    HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband

更多

exec, xargs

  • find会把找到所有的item(大括号表示)一次性传递给exec,执行命令cmd,注意必须要对分号转义;
  • 注意: 如果传递给exec的参数过多,在运行一段时间后就会出现参数溢出错误.
  • 在有的系统中会为每一个匹配到的文件发起一个进程,显然这回严重影响系统效率!
  # 递归查找当前目录下的最大文件
  find . -type f -exec stat -c "%s %n" {} \; | sort -nr | head 1
  # 备份每一个.sh文件,可能会为每一个cmd都启动一个新进程.
  find . -name "*.sh" -exec cp {} {}.old \;

xargs

一次只处理一部分文件而不是全部(默认是1个),系统只会启动一个进程!

更多

Interrupt

此文档历史久远, 系学习过程中的知识整理, 难免存在疏漏, 欢迎批评指正!

更多

Editplus

use

user: sz1001
code: 2DEE7-22268-36ZCD-E7W15-2DTD0

config

配置 - 常规

  • 允许程序的多个副本 n
  • 字体/颜色: consolas/9 豆沙绿
  • 按下home键时转到第一个非空字符

配置 - 文件

更多

Special

// 进程之间共享数据,一般用在dll中;
#pragma data_seg("shared")  // 名称任意,长度不能超过8个字符,section亦未加点'.'
int g_iTotal = 0;  // 共享的数据必须初始化,否则不会放到共享数据段中

#pragma data_seg ()
#pragma comment(linker,"/section:shared,RWS")  // RWS:读,写,共享

Pipe

底层是依照共享内存来实现的!

更多