Windows 重要使用记录
TOC
定时任务
windows 下一般可以通过自带的 SCHTASKS 来执行定时任务。
SCHTASKS 使用规则
1SCHTASKS /parameter [arguments]
2
3Parameter List:
4 /Create Creates a new scheduled task.
5
6 /Delete Deletes the scheduled task(s).
7
8 /Query Displays all scheduled tasks.
9
10 /Change Changes the properties of scheduled task.
11
12 /Run Runs the scheduled task on demand.
13
14 /End Stops the currently running scheduled task.
15
16 /ShowSid Shows the security identifier corresponding to a scheduled task name.
17
18 /? Displays this help message.
查询某个操作的具体用法:
1schtasks /create /?
2
3SCHTASKS /Create [/S system [/U username [/P [password]]]]
4 [/RU username [/RP password]] /SC schedule [/MO modifier] [/D day]
5 [/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]
6 [/RI interval] [ {/ET endtime | /DU duration} [/K] [/XML xmlfile] [/V1]]
7 [/SD startdate] [/ED enddate] [/IT | /NP] [/Z] [/F] [/HRESULT] [/?]
8
9 ...
SCHTASKS 实用例子
每 30 分钟运行一次
1schtasks /create /sc minute /mo 30 /tn "{task_name}" /tr "{task}"
阅读可知, /sc
是指定频率的单位:
1/SC schedule Specifies the schedule frequency.
2 Valid schedule types: MINUTE, HOURLY, DAILY, WEEKLY,
3 MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT.
/mo
, 在 /sc
的基础上, 指定大小(可以的情况下使用, 如 MINUTE 可以, 而 ONSTART 不可以):
1Modifiers: Valid values for the /MO switch per schedule type:
2 MINUTE: 1 - 1439 minutes.
3 HOURLY: 1 - 23 hours.
4 DAILY: 1 - 365 days.
5 WEEKLY: weeks 1 - 52.
6 ONCE: No modifiers.
7 ONSTART: No modifiers.
8 ONLOGON: No modifiers.
9 ONIDLE: No modifiers.
10 MONTHLY: 1 - 12, or
11 FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY.
12
13 ONEVENT: XPath event query string.
/tn
, 即 “task name”, 注意是 unique 的, 不能与其它任务重名。
/tr
, 即 “task run”, 指定任务, 即一个可执行的程序, 如 exe, bat。
开机启动程序
需要通过管理员模式运行以下命令:
1schtasks /create /tn "{task_name}" /sc onlogon /tr "{task}"
每天 22:00:00 执行一次
1schtasks /create /tn "{task_name}" /sc daily /st 22:00:00 /tr "{task}"
阅读可知, /st 是用于指定执行的具体时刻:
1/ST starttime Specifies the start time to run the task. The time
2 format is HH:mm (24 hour time) for example, 14:30 for
3 2:30 PM. Defaults to current time if /ST is not
4 specified. This option is required with /SC ONCE.
删除定时任务
1schtasks /delete /tn "{task_name}"
由于任务名是唯一的, 所以通过 /tn 指定任务名即可删除任务。
右键选项
首先进入注册表界面: win+R -> regedit
增加右键操作文件选项
以 “vscode 作为编辑文件” 作为实例:
在注册表页面下进入:计算机\HKEY_CLASSES_ROOT\*\shell
- 新建项 Vscode
- 右键 Vscode 并新建项 command
- 编辑command默认选项值为:
${vscodepath}\Code.exe %1
(%1是可选的参数,这里必须要加,表示作用于该文件)
- 编辑command默认选项值为:
- 编辑 Vscode 值
- 编辑右键显示名称:默认值改为 Open with vscode(不编辑则为新建项的名称)
- 编辑右键显示图标:新建字符串值icon 添加:
${vscodepath}\Code.exe
(有些可以这样,但一般为 ico 文件)
增加目录下右键打开选项
以 “window terminal” 作为实例:
注册表页面下进入:计算机\HKEY_CLASSES_ROOT\Directory\Background\shell
- 新建项 Terminal
- 右键 Terminal 新建项 command
- 编辑 command 默认选项值为:
${terminalpath}\wt.exe
- 编辑 command 默认选项值为:
- 编辑 Terminal 值
- 编辑右键显示名称:默认值改为 Open in terminal (不编辑则为新建项的名称)
- 编辑右键显示图标:新建字符串值 icon 添加:
${terminalicon}
- 编辑 window terminal 的 json 配置文件
- 对应位置修改如下,".“即表示当前目录。
1 "profiles":
2 {
3 "defaults":
4 {
5 "startingDirectory" : "."
6 },
7 }
唤醒验证
Win11 开启唤醒验证可参考 require-sign-in-option-in-windows-10-is-greyed-out,通过编辑注册表字段即可完成。
进入 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Power\PowerSettings\
,在点击其下形如 0e796bdb-100d-47d6-a2d5-f7d2daa51f51
的字段,将其中的 ACSettingIndex
(交流电,插电笔记本) 和 DCSettingIndex
(直流电,使用笔记本电池) 字段值均改为 1 即可。
WSL
Wsl 在 Windows 开机后自启后台服务
1# /etc/init.wsl
2/etc/init.d/${需要的服务} # 或者使用 service/systemctl 命令
再赋予 init.wsl 执行权限,执行:chmod +x /etc/init.wsl
windows 在启动目录下创建脚本:wsl.bat
,写入开机命令如下:
1wsl -d <DistributionName> -u root /etc/init.wsl
其中,版本 <DistributionName>
可通过 wsl -l
查看。
Wsl 修改默认登录用户
将登录默认用户设为 root:
1<DistributionName> config --default-user root
如果 wsl 是手动安装的,经测试似乎无法生效,可通过修改 /etc/wsl.conf
完成:
1# Set the user when launching a distribution with WSL.
2[user]
3default = root
然后重启 wsl 即可完成。
自定义 wsl 安装位置
首先下载 wsl-ubuntu:
- 20.04版本:https://aka.ms/wslubuntu2004
- 18.04版本:https://aka.ms/wsl-ubuntu-1804
其他版本自行前往官网查找。
对于下载后得到 AppxBundle 文件,将后缀名改为 zip,然后解压,可以得到一些带系统类型前缀的 appx 文件和其他一些相关文件。
其中,视情况选择 x64 或 ARM64 的安装包,将后缀名改为 zip,然后解压,之后点击解压后文件夹中的 ubuntu.exe 文件,即可开始安装 wsl-ubuntu。
安装完成后在同一目录下可得到虚拟盘:ext4.vhdx
。
其中安装时会让你指定用户名和密码,这个用户是默认添加到 sudoers 里的。
键位映射
可以通过 PowerToys 实现,下载地址:PowerToys。
为适配 Mac 键位体验,将 Win 和 Ctrl 相互映射:
Keyboard Manager -> Remap a key -> 添加 Win to Ctrl, Ctrl to Win
命令别名
CMD 添加别名
可以通过 doskey 命令设置临时的别名。
1doskey ls=echo ====== ^&^& dir /b $* ^&^& echo ======
$*
表示还可能有其他命令参数,^&^&
用于分开多条命令。
单纯在一个 cmd 窗口中使用 doskey 设置别名,别名只能在该窗口中使用。
可以通过将 doskey 命令写入 bat 脚本,再把脚本路径添加到注册表 Autorun 实现永久且所有 cmd 都可用的别名,具体步骤如下:
编写脚本:
1@echo off
2doskey ls=dir /b $*
3doskey lss=echo ====== ^&^& dir /b $* ^&^& echo ======
添加路径到注册表:
在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
下的 Autorun 中,将数值设为 doskey 命令脚本所在的路径即可。这样所有用户都可以使用设置好的别名。
也可在 HKEY_CURRENT_USER
下的对应位置设置,只针对当前用户设置别名。
通过 doskey 的方式,挺方便的,但是在命令非常多的情况下不是很方便,同时,设置的命令还不可以在 powershell 下运行。
PowerShell 添加别名
为 PowerShell 设置临时的别名:
1PS C:\Users\akyna> set-alias escc esc
2PS C:\Users\akyna> escc
3......
如果带参数,则可以通过 function 进行:
1PS C:\Users\akyna> function func{nircmd emptybin}
2PS C:\Users\akyna> set-alias ctrash func
3PS C:\Users\akyna> ctrash
这样的别名只是在当前会话下有效,开启另一个 shell 就失效了。
可以通过 export-alias my-alias.txt
导出当前会话下的 alias,在其他 shell 中,通过 import-alias my-alias.txt
即可使用。
删除 PwerShell 临时别名:
1PS C:\Users\akyna> remove-item alias:escc
2PS C:\Users\akyna> escc
3escc: The term 'escc' is not recognized as a name of a cmdlet, function, script file, or executable program.
4...
为 PowerShell 设置永久的命令别名:
首先打开 PowerShell ,运行 echo $profile
,会输出一个 powershell 配置文件的路径,然后打开文件,按以下格式可以设置多条别名:
1function 别名 { 需要替代的命令,可以包含空格 }
e.g.
一个升级 vscode 的命令:
1# 升级vscode
2function updatevs {
3 taskkill /f /t /im code.exe
4 move D:\a\VSCode* D:\a\vs.zip
5 Bandizip.exe x -o:"D:\tools3\vscode\Microsoft VS Code" -aoa "D:\a\vs.zip"
6 del D:\a\vs.zip
7 code
8 pause
9}
10#其他别名
11...
以后,新的别名都可以继续添加在该文件中,非常方便。
最后,需要将 ExecutionPolicy 设为 RemoteSigned。
- 以管理员身份打开 PowerShell,执行
Set-ExecutionPolicy RemoteSigned
。 - 重新启动 PowerShell
对于命令非常多的情况很方便,但是无法在 cmd 下运行别名。
通过添加环境变量的方式设置别名
假如我想通过 exesc 这个命令运行一些操作命令:
- 在路径 my_path 下新建 exesc.bat 文件,该文件包含了一系列操作命令;
- 将 my_path 加入环境变量;
- 命令行即可通过键入 exesc 命令执行 exesc.bat。
以后添加任何命令都可以在这个路径中新建 bat 文件编写别名,非常方便。
这样在 powershell 和 cmd 中都可以使用通过这个方法设置好的别名,但是注意,前提是这个脚本中的命令同时适用于 powershell 和 cmd,比如,如果该脚本中存在一个 ls
命令,但是 cmd 没有这个命令,那么cmd就无法使用该别名,但是你可以先通过上面介绍的 doskey 方法设置好 ls 别名,这样就可以愉快使用了。
个人感觉是很不错的方法,但是一个别名对应一个文件,不是很方便,无法在一个文件中同时指定所有别名。
如果想实现通用性,必须兼顾 cmd 和 powershell 都存在的命令。如果想使用 powershell 很多特有的命令,那么实现通用性是比较麻烦的。
Batch
读取输入
1set /p ch="y/n:"
2echo %ch%
变量运算
通过 %{var}%
访问变量,通过 /a
进行表达式计算设置值。
1@echo off
2
3set money=100
4echo 初始金额: %money%
5
6set /a money=%money%*2
7set /a money=%money%+100
8echo 现在的金额:%money%
选择并跳转
:{point}
用于指定一个跳转点。
1@echo off
2
3set /p ch="y/n:"
4if "%ch%"=="" (
5 goto end
6) else if "%ch%"=="n" (
7 goto no
8) else if "%ch%"=="y" (
9 goto yes
10) else (
11 goto end
12)
13
14:no
15echo NO
16goto end
17
18:yes
19echo YES
20goto end
21
22:end
循环语句
- 通过 %%x 设置和访问循环值;
- 通过 (start, steps, end) 设置循环;
- /l 将通过比较 start 和 end 来执行迭代。
1@echo off
2
3for /l %%x in (1, 5, 100) do (
4 echo hello, jzh-%%x
5)
变量动态变化
setlocal enabledelayedexpansion
开启变量延迟,使得变量可以动态变化;- 需通过
!{var}!
访问变化中的量。
1@echo off
2@REM 开启变量延迟,使得变量可以动态变化
3setlocal enabledelayedexpansion
4
5set /a i=1
6for /l %%i in (1, 1, 10) do (
7 echo hello
8 set /a i+=1
9 echo !i!
10)
11echo %i%
接收参数
1@echo off
2rem %1 即 args[0]
3if "%1" == "a" echo open a.txt
4
5if "%2" == "b" echo open b.txt