我有一个不同长度的字符串。我想在字符串中剪切一个特定的单词。 请帮忙,我是PowerShell的新手。
我尝试了这段代码,仍然不是我所需要的。
$String = "C:\Users\XX\Documents\Data.txt"
$Cut = $String.Substring(22,0)
$Cut
我期望我可以返回单词Data
。
答案 0 :(得分:4)
假设字符串始终是相同的格式(即,以文件名结尾的路径),那么有很多方法可以做到这一点,例如使用正则表达式。这是一种不太常用的方法:
# Define the path
$filepath = "C:\Users\XX\Documents\Data.txt"
# Create a dummy fileinfo object
$fileInfo = [System.IO.FileInfo]$filePath
# Get the file name property
$fileInfo.BaseName
当然,您可以一步完成所有操作:
([System.IO.FileInfo]"C:\Users\XX\Documents\Data.txt").BaseName
答案 1 :(得分:2)
如果该路径是现有路径,则可以使用
File "C:/Users/username/Desktop/pandas/parser.py", line 6, in <module>
nessus_filtered = nessus.merge(patrol, how='left', left_on=[0], right_on=[0])
File "C:\Python37\lib\site-packages\pandas\core\frame.py", line 6868, in merge
copy=copy, indicator=indicator, validate=validate)
File "C:\Python37\lib\site-packages\pandas\core\reshape\merge.py", line 47, in merge
validate=validate)
File "C:\Python37\lib\site-packages\pandas\core\reshape\merge.py", line 529, in __init__
self.join_names) = self._get_merge_keys()
File "C:\Python37\lib\site-packages\pandas\core\reshape\merge.py", line 833, in _get_merge_keys
right._get_label_or_level_values(rk))
File "C:\Python37\lib\site-packages\pandas\core\generic.py", line 1706, in _get_label_or_level_values
raise KeyError(key)
否则
(Get-Item $String).BaseName
答案 2 :(得分:1)
在该特定示例中,最简单的方法是使用Substring(startPosition,length)
提取文件名,而您可能希望使用如下所示的文件:
(("C:\Users\XX\Documents\Data.txt".split("\\"))[-1].Split("."))[0]
("C:\Users\XX\Documents\Data.txt".split("\\"))[-1]
该部分用\
分隔路径并返回最后一项(顺便说一下,转义它不是强制性的,因此可以使用.split("\")
代替.split("\\")
)。从那里您会收到Data.txt
,因此您必须分开名称和扩展名。您可以通过除以.
并选择返回的第一个元素来完成此操作
答案 3 :(得分:1)
根据您的输入,有很多方法可以实现-
$String = "C:\Users\XX\Documents\Data.txt"
$Cut = $String.Substring(22,4)
$Cut
以上方法仅适用于单个输入,但对于不同长度的多个输入将变得难以管理。
split
方法$String = "C:\Users\XX\Documents\Data.txt"
$cut = $String.Split("\")[-1].split(".")[0]
$cut
Split
方法会将字符串拆分为子字符串。索引[-1]
将返回split
方法返回的最后一个值。
第二步是从单词Data
返回单词Data.txt
。
$string = Get-ChildItem $env:USERPROFILE\Desktop -File | select -First 1
$Cut = $String.BaseName
有关方法3 here的更多信息。
答案 4 :(得分:0)
如果可以使用Powershell 6 - SplitPath
#Requires -Version 6.0
Split-Path $String -LeafBase