powershell - 如何删除文件名的一部分?

标签 powershell

假设我有一个文件database_partial.xml

我正在尝试从“_partial”以及扩展名(xml)中删除文件,然后将名称大写,使其变为DATABASE

Param($xmlfile)

$xml = Get-ChildItem "C:\Files" -Filter "$xmlfile"

$db = [IO.Path]::GetFileNameWithoutExtension($xml).ToUpper()

返回DATABASE_PARTIAL,但是我不知道如何剥离_PARTIAL部分。

最佳答案

您不需要GetFileNameWithoutExtension()即可删除扩展名。 FileInfo返回的Get-ChildItem对象具有BaseName属性,该属性为您提供不带扩展名的文件名。将其大写,然后删除“_PARTIAL”后缀。我还建议循环处理Get-ChildItem的输出,以防万一它没有返回确切的结果。

Get-ChildItem "C:\Files" -Filter "$xmlfile" | ForEach-Object {
    $_.BaseName.ToUpper().Replace('_PARTIAL', '')
}

如果下划线后的子字符串可能有所不同,请使用正则表达式替换而不是字符串替换,例如像这样:
Get-ChildItem "C:\Files" -Filter "$xmlfile" | ForEach-Object {
    $_.BaseName.ToUpper() -replace '_[^_]*$'
}

关于powershell - 如何删除文件名的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55152664/

相关文章:

asp.net - 在 ASP.NET 中导入模块 MSOnline 失败

linux - 使用来自 Linux 的证书向 Azure 进行身份验证

windows - 自动化远程桌面连接

powershell - “$” 符号在 Powershell 中有什么作用?

powershell - 使用-notcontains在数组内的字符串中查找子字符串

Powershell get-help 不返回正确的帮助语法

linux - 在执行前打印每个命令的 Powershell 等效于 `set -x` 是什么?

parsing - Powershell:解析结构化文本文件并保存到.CSV

powershell - 获取文件所有者/作者

powershell - 我可以在 Powershell 中检测到我正在 VS Code 的集成终端中运行吗?