保存到与给定路径同名但扩展名不同的文件

问题描述

我想做的是:为 Windows Powershell 设计一个命令,让用户输入他们想要校验和的文件的路径以及他们首选的校验和算法。然后将结果保存在与该文件同名的文件中,在同一目录中,但使用校验和算法作为其扩展名。

示例:将 C:\path\to\file.pdf 写入命令中,用户会发现 C:\path\to\file.sha256 包含文本形式的 SHA-256 校验和。

到目前为止我所拥有的:

Set-Variable -Name "pfad" -Value "C:\path\to\file.pdf"; Set-Variable -Name "algorithmus" -Value SHA256; certutil -hashfile $pfad $algorithmus > $pfad + "." + $algorithmus

如果这行得通,它会返回一个 file.pdf.SHA256,这很好。但是,它会使用包含错误消息的同名文件覆盖原始文件

不幸的是,某种 bash 脚本对我来说不可行。它必须是一个命令,用户可以将他们想要的值复制到命令的一个位置。

我研究了 SplitPath 等几个函数,但我觉得应该有一种相当简单的方法来做我想做的事。这是我第一次使用 Windows Powershell,所以我对我的可能性非常无知。

解决方法

我认为这会满足您的要求。
无需设置变量,您只需声明它们并将它们设置为等于 Read-Host 即可获得用户输入。

然后,您可以将数据通过管道传输到格式列表中,然后传输到以您想要的名称命名的 csv 文件中。

$filePath = Read-Host "Please enter your filepath (e.g. C:\path\to\documents)"
$fileName = Read-Host "Please enter your filename (e.g. file.pdf)"
$algorithmus = Read-Host "Please enter your Algorithm format (e.g. SHA256,SHA1,MD5)"

Get-FileHash -Path "$filePath\$fileName" -Algorithm "$algorithmus" | Export-csv "$filePath\$fileName.$algorithmus" -NoTypeInformation

Get-FileHash Docs

编辑:这将在与原始文件相同的目录中创建 file.pdf.sha256