从for中的字符串中删除字符

时间:2018-10-11 05:59:01

标签: powershell

我正在尝试通过删除最后25个字符来获取病毒的文件夹位置,我发现可以使用我已经测试过且可以正常工作的代码来实现此目的

$string = "the scripts"
$string = $string.Substring(0,$string.Length-1)
$string

示例字符串

C:\Users\jose\Desktop\MUSICA\011_Leyendas\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe
C:\Users\jose\Desktop\MUSICA\70'S, 80'S & 90'S.english\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe
C:\Users\jose\Desktop\MUSICA\90\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe
C:\Users\jose\Desktop\MUSICA\AlbertoBarro\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe
C:\Users\jose\Desktop\MUSICA\BACHATA\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe
C:\Users\jose\Desktop\MUSICA\CHICO CHE MEZCLADO\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe         
C:\Users\jose\Desktop\MUSICA\joan sebastian - M. A. Solís\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe
C:\Users\jose\Desktop\MUSICA\JUAN GABRIEL 1 DUOS\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe

虽然尝试在FOR substring方法中执行该操作无法正确剪切字符串,但有些想法为何无法使用这些示例代码

$viruslocation = Get-Content -Path .\Desktop\virus.txt

for ($i = 1; $i -lt $viruslocation.Count; $i++) { 
    $Length =$viruslocation[$i]
    $tem= $Length.Substring(0,$Length.Length-22)
    write $tem
}

for ($i = 1; $i -lt $viruslocation.Count; $i++) { 
    $tem= $viruslocation[$i].Substring(0,$viruslocation[$i].Length-22)
    write $tem
}

预期结果

C:\Users\jose\Desktop\MUSICA\011_Leyendas\nlwdvakybapcybqkvcfwr

2 个答案:

答案 0 :(得分:5)

GetDirectoryName是您要寻找的:

$virusLocations = 'C:\Users\jose\Desktop\MUSICA\011_Leyendas\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
'C:\Users\jose\Desktop\MUSICA\70''S, 80''S & 90''S.english\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
'C:\Users\jose\Desktop\MUSICA\90\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
'C:\Users\jose\Desktop\MUSICA\AlbertoBarro\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
'C:\Users\jose\Desktop\MUSICA\BACHATA\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
'C:\Users\jose\Desktop\MUSICA\CHICO CHE MEZCLADO\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
'C:\Users\jose\Desktop\MUSICA\joan sebastian - M. A. Solís\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
'C:\Users\jose\Desktop\MUSICA\JUAN GABRIEL 1 DUOS\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe'

$virusLocations | % {
    [System.IO.Path]::GetDirectoryName($_)
}

答案 1 :(得分:0)

如@JohnLBevan的评论所述,您可以将Split-Path命令与-Parent开关一起使用:

MWE

$VirusLocations = @(
  'C:\Users\jose\Desktop\MUSICA\011_Leyendas\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
  'C:\Users\jose\Desktop\MUSICA\70''S, 80''S & 90''S.english\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
  'C:\Users\jose\Desktop\MUSICA\90\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
  'C:\Users\jose\Desktop\MUSICA\AlbertoBarro\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
  'C:\Users\jose\Desktop\MUSICA\BACHATA\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
  'C:\Users\jose\Desktop\MUSICA\CHICO CHE MEZCLADO\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
  'C:\Users\jose\Desktop\MUSICA\joan sebastian - M. A. Solís\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe',
  'C:\Users\jose\Desktop\MUSICA\JUAN GABRIEL 1 DUOS\nlwdvakybapcybqkvcfwr\nlwdvakybapcybqkvcfwr.exe'
)

foreach ($Virus in $VirusLocations) {
    Split-Path -Path $Virus -Parent
}

输出

C:\Users\jose\Desktop\MUSICA\011_Leyendas\nlwdvakybapcybqkvcfwr
C:\Users\jose\Desktop\MUSICA\70'S, 80'S & 90'S.english\nlwdvakybapcybqkvcfwr
C:\Users\jose\Desktop\MUSICA\90\nlwdvakybapcybqkvcfwr
C:\Users\jose\Desktop\MUSICA\AlbertoBarro\nlwdvakybapcybqkvcfwr
C:\Users\jose\Desktop\MUSICA\BACHATA\nlwdvakybapcybqkvcfwr
C:\Users\jose\Desktop\MUSICA\CHICO CHE MEZCLADO\nlwdvakybapcybqkvcfwr
C:\Users\jose\Desktop\MUSICA\joan sebastian - M. A. SolA-s\nlwdvakybapcybqkvcfwr
C:\Users\jose\Desktop\MUSICA\JUAN GABRIEL 1 DUOS\nlwdvakybapcybqkvcfwr