如何在 PowerShell 中以 8.3 表示法显示目录列表?
问问题
7564 次
5 回答
8
您可以使用 WMI:
Get-ChildItem | ForEach-Object{
$class = if($_.PSIsContainer) {"Win32_Directory"} else {"CIM_DataFile"}
Get-WMIObject $class -Filter "Name = '$($_.FullName -replace '\\','\\')'" | Select-Object -ExpandProperty EightDotThreeFileName
}
或 Scripting.FileSystemObject com 对象:
$fso = New-Object -ComObject Scripting.FileSystemObject
Get-ChildItem | ForEach-Object{
if($_.PSIsContainer)
{
$fso.GetFolder($_.FullName).ShortPath
}
else
{
$fso.GetFile($_.FullName).ShortPath
}
}
于 2013-06-08T15:51:32.047 回答
3
如果您安装PSCX模块,则您拥有Get-ShortPath
cmdlet,您可以执行以下操作:
dir | Get-ShortPath
或者
dir | Get-ShortPath | select -expa shortpath
于 2013-06-08T09:03:17.160 回答
0
你引起了我的注意,这不是完整的答案,而是我帮助你的方式:
首先:看看如何在 Windows 2008 和 Windows 7 中控制 8dot3 命名。
第二:这是使用 C# 将路径转换为 Dos 8.3 表示法的解决方案,您可以在 PowerShell 中修改或使用它。
于 2013-06-08T05:14:32.680 回答
0
基于 jpblanc 的回答,这里有一个可以通过调用 Win32 GetShortPathName() API 来缩短整个路径的方法:
function Get-ShortPathName
{
Param([string] $path)
$MethodDefinition = @'
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetShortPathNameW", SetLastError = true)]
public static extern int GetShortPathName(string pathName, System.Text.StringBuilder shortName, int cbShortName);
'@
$Kernel32 = Add-Type -MemberDefinition $MethodDefinition -Name 'Kernel32' -Namespace 'Win32' -PassThru
$shortPath = New-Object System.Text.StringBuilder(500)
$retVal = $Kernel32::GetShortPathName($path, $shortPath, $shortPath.Capacity)
return $shortPath.ToString()
}
除了前面引用的链接,我在编写这个函数时咨询了Dr. Scripto和PInvoke.net 。
于 2020-03-10T21:27:33.853 回答
0
你可以运行cmd...
cmd /c dir /x
请注意,get-childitem -filter 也匹配文件名的短版本!
get-childitem -filter *~1*
于 2019-11-05T18:25:13.337 回答