功能


生成如下文件结构,添加文件夹至VSCode工作区,并打开生成的markdown文件

1
2
3
4
$Disk:.
└─$name─$name.md
└─imgpasted

提供如下可选参数

1
2
3
-name     : markdown文件/文件夹名
-savepath : 保存路径(相对路径)

脚本


新建.ps1文件,输入如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 指定命令行参数,并提供默认值
#
# name : 默认为时间戳
# savepath : 默认为统一存放markdown的文件夹

param(
[Parameter()]
[String]$name = "$(Get-Date -Format 'yyyy-mm-dd-hh-mm-ss')",
[String]$savepath = "$([Environment]::GetFolderPath("Desktop"))\mdfiles\"
)

$exist = $False

# 获取$savepath下所有内容的名称并沿管道传送
# 遍历检查是否重名,打印错误信息并将$exist设为真
# 注意大括号不能分行写

Get-ChildItem -Path $savepath -Name | Foreach-Object -Process {
if ([String]$_ -eq $name)
{
Write-Host "[$(Get-Date)]makemd: Error: $savepath$name already existed.`n" -ForegroundColor red
$exist = $True
}
}

# 未发现重命名则创建文件、文件夹
# code -a <dir> : 将文件夹添加至VSCode工作区
# code <file> : 打开文件至编辑区
# 打印提示信息

if ($exist -eq $False)
{
mkdir "$savepath$name", "$savepath$name\imgpasted"
new-item "$savepath$name\$name.md" -type file
code -a "$savepath$name"
code "$savepath$name\$name.md"
Write-Host "[$(Get-Date)]makemd: $savepath$name created successfully.`n" -ForegroundColor green
}

保存后打开终端,可以脚本方式运行。

创建PowerShell命令

假定命令名为:Makemd,为保持PowerShell命令风格,首字母大写。


查看PowerShell命令的搜索路径

1
2
echo "$env:PSModulePath"

将脚本放在位于Program Files的路径下,我这里为C:\Program Files\WindowsPowerShell\Modules。首先对.ps1文件做如下修改

1
2
3
4
5
function Makemd
{
# 这里放脚本内容
}

在上一步的路径(Modules)下新建文件夹Makemd,在其内放置修改后的脚本,并重命名为Makemd.psm1。

  • 文件夹/文件对应关系:包含新模块的文件夹内至少含一个同名文件,如这里的Makemd/Makemd.psm1
  • 文件/函数对应关系:函数可与文件不同名,一个.psm1文件可包含多个函数

为脚本代码套壳有什么意义呢?不妨不修改为函数,直接粘贴.ps1内容至.psm1,查询模块

1
2
3
# Get-Command会执行Import-Module Makemd,查询+导入
Get-Command -Module Makemd # 文件夹

将打印成功提示信息,可知脚本按默认参数执行了一次。然而键入Makemd(函数名),发现命令无法找到

1
2
Makemd: 无法将“Makemd”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

因此需要修改为函数,执行Remove-Module Makemd,然后重新导入模块,打印如下信息

1
2
3
4
CommandType Name         Version Source
----------- ---- ------- ------
Function Get-OldFiles 0.0 Makemd

可以看到函数成功导入,这时就可以在终端里使用命令了。

在某个PowerShell窗口找不到命令时,关闭并新建一个试试
每次更新.psm1文件后需移除模块并重新导入

正常情况下,使用该命令的时候是无需导入该模块的,相比脚本也不需要写路径,十分方便。

附录


PowerShell 常用

System.ConsoleColor

1
2
Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray, DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, White

编辑配置文件

1
2
notepad $PROFILE

参考


VSCode命令行常用快捷操作
PowerShell获取时间格式
在 Windows PowerShell 中获取命令行参数
PowerShell脚本输出颜色文字
Powershell如何查询目录所有文件和文件夹的名称
在 PowerShell 中比较两个字符串对象的内容
自定义供日常使用的PowerShell脚本模块
用windows Powershell 创建新文件夹或文件
如何在Windows PowerShell中获取当前的用户名
获取Windows某路径的环境变量
PowerShell列出某个文件夹内的所有文件和文件夹