#4 Windows 命令行操作

2021-03-07

cmd

  • 大小写不敏感
  • 参数通常是 / 开头,而不像 Unix 下是 -
  • 帮助: -help, /?
  • | 管道、> 输出重定向、>> 输出重定向(追加)、< 输入重定向、<< EOF heredoc、<<< CONTENT 输入重定向(字符串)作用和 Linux 相同
  • Ctrl + C 退出执行
help
help | more
dir C:\Windows\System32\*.exe
dir C:\Windows\System32\*.msc

export
echo
cls         # 类似 clear

tasklist
taskkill

cd
mkdir / md
del         # 类似 rm
del /q anydir
rd          # 删除目录(非空目录不可删除)
dir         # 类似 ls
tree
find
findstr     # 类似 grep

ping
ipconfig
netstat
tracert
route
dig
nslookup

shutdown -s -t 300 # 定时关机

explorer # 文件浏览器
notepad  # 记事本
taskmgr  # 命令管理器
regedit  # 注册表编辑器

services.msc # 服务

注册表

Registry, 港澳台地区称之为登录档。就是一个树形结构的数据库,存放系统和应用程序的配置信息。

Linux 下各个应用程序,甚至操作系统的各组件都采用不同的配置文件存储在不同的地方,但 Windows 却采用了这种集中式存储。

https://zh.wikipedia.org/zh-hans/注册表

名称 作用
HKEY_CLASSES_ROOT 存储Windows可识别的文件类型的详细列表,以及相关联的程序。
HKEY_CURRENT_USER 存储当前用户设置的信息。
HKEY_LOCAL_MACHINE 包括安装在计算机上的硬件和软件的信息。
HKEY_USERS 包含使用计算机的用户的信息。
HKEY_CURRENT_CONFIG 这个分支包含计算机当前的硬件配置信息。

常见数据结构:

  • REG_SZ 字符串
  • REG_BINARY 二进制
  • REG_DWORD 32 位二进制值,显示为 8 位的十六进制数
  • REG_MULTI_SZ 多字符串,nul 隔开,结尾两个 nul
  • REG_EXPAND_SZ

python 有内置库 winreg 可以用来操作注册表。

import winreg
reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
key_name = r'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'
key = winreg.OpenKey(reg, key_name)
for i in range(1024):
    try:
        sub_key_name = winreg.EnumKey(key, i)
        sub_key = winreg.OpenKey(key, sub_key_name)
        value = winreg.QueryValueEx(sub_key, "DisplayName")
        print('%s: %s' % (sub_key_name, value))
    except EnvironmentError:
        break

Services

# 小心 sc 命令中比较另类的等于号后有空格设计
sc create memcached binPath= "c:\memcached.exe -l 0.0.0.0 -m 128 -d" DisplayName= "Memcached" start= auto

PowerShell

虽然使用频率不高,但和 PowerShell 少有的几次接触感觉很好,很强大。其结构化而非文本的数据结构让人印象深刻。

  • 别名
  • 函数
  • cmdlet
  • 命令
get-alias | findstr /I get-alias
gal | findstr ls

man
help
ls   # Get-ChildItem
ps   # Get-Process
ps | select Name, Id
ps | ft -Property Id, ProcessName, Handles, VM, WS, CPU -AutoSize
ps | where { $_.Name -eq "explorer" }
curl # Invoke-WebRequest
rm      # Remove-Item
rmdir   # Remove-Item
ni -ItemType File -Path C:\Users\Administrator\file.txt  # New-Item
cp      # Copy-Item
cp -Path C:\Users\Administrator\file.txt -Destination D:\Temp\

gcm  # Get-Command
shcm # Show-Command

get-volume

工具

GUI

  • process explorer
  • everything
  • HeidiSQL
  • PuTTY
  • WizTree 目录分析

包管理

  • choco (chocolatey)
  • scoop
  • winget

安装包格式

  • MSI 官方出品, Windows Installer
  • NSIS Nullsoft Scriptable Install System, zlib license
  • WiX
  • Inno Setup

#1 通过 Windows 命令行(CMD)创建文件

2013-12-24

一、建立空文件的几种方法

  1. cd . > a.txt

cd.表示改变当前目录为当前目录,即等于没改变;而且此命令不会有输出。

表示把命令输出写入到文件。后面跟着a.txt,就表示写入到a.txt。
而此例中命令不会有输出,所以就创建了没有内容的空文件。

  1. copy nul a.txt

nul表示空设备,从概念上讲,它不可见,存在于每个目录中,可以把它看成一个特殊的 “文件”,它没有内容;一般可把输出写入到nul,来达到屏蔽输出的目的,如pause>nul,此命令执行效果是暂停,并且不会显示“请按任意键继续. . .”。
此例子表示将空设备复制到a.txt,同样创建了没有内容的空文件。

  1. type nul > a.txt

此例子表示显示空设备的内容,并写入到a.txt。

  1. echo a 2> a.txt

“2” 表示错误输出的句柄,此例中没有错误输出,所以创建了没有内容的空文件。
其实>默认都是重定向了句柄1,即标准输出句柄。比如 cd . > a.txt,其实就是 cd . 1> a.txt
同样,句柄 3 到 9 也可以使用在本例中,它们是未经定义的句柄,也不会有输出,如 echo a 3> a.txt

  1. fsutil file createnew d:\a.txt 0

使用 fsutil 创建了一个空文件。

  1. 其他命令

只要没有输出,并重定向到文件就可以了

二、建立非空文件的几种方法

  1. echo a>a.txt

最常用的是 echo 命令,此例子表示把字母a和回车换行覆盖输出到 a.txt(如果 a.txt 原来已有内容则覆盖掉原来的内容),如果追加内容,可以使用>>,如 echo b >> a.txt,表示把 b 和回车换行追加到文件末尾。

  1. 其他命令的重定向输出,如
type a.txt > b.txt
copy a.txt b.txt
fsutil file createnew d:\a.txt 1