我有一个.pem文件列表,我希望使用winscp.com
转换为.ppk。
命令是:
WinSCP.com /keygen filename.pem /output=filename.ppk
如何编写一个自动读取文件夹中所有* .pem文件并将其转换为ppk的脚本?
我认为我需要使用它作为开始
Get-ChildItem -Recurse -Include "*.pem" | % { & $_ }
但是我如何捕获文件名并使其成为替换命令中的行并处理文件夹中的所有数十个pem文件?
答案 0 :(得分:1)
&
是PowerShell call operator。 $_
是一个automatic variable,它将当前对象保存在管道中,在本例中为System.IO.FileInfo
个对象。对于这种对象,表达式& $_
调用文件上的默认处理程序(关联程序),就像您在资源管理器中双击该文件一样。
要使代码执行您想要的操作,您需要将$_
替换为winscp.com
语句,并将文件名文字替换为适当的变量。使用$_.FullName
获取文件的全名。更改输出文件的扩展名,并将该路径放在另一个变量中。
Get-ChildItem -Recurse -Include "*.pem" | % {
$outfile = Join-Path $_.DirectoryName ($_.BaseName + '.ppk')
& winscp.com /keygen $_.FullName "/output=$outfile"
}
答案 1 :(得分:0)
这将为您提供文件名和全名。不同之处在于全名包括完整路径,名称只是文件名。
Get-ChildItem c:\users\somefolder -Recurse -filter "*.pem" | foreach{
$name = $_.Name
$fullName = $_.FullName
Write-Output $name
Write-Output $fullName
}
如果你运行这个,你就会明白。所以你可以得到这样的名字,然后使用$ name变量在foreach循环中运行任何其他命令。
答案 2 :(得分:0)
尝试类似这样的事情
.gitignore