对于特定文件夹,我需要列出所有带扩展名的文件,.js即使嵌套在任何级别的子文件夹中也是如此.
输出控制台的结果应该是一个文件名列表,没有逐行扩展名,可以轻松地复制并粘贴到另一个应用程序中.
目前我正在尝试这个,但在输出控制台中,我得到了几个元信息,而不是一个简单的列表.
Get-ChildItem -Path C:\xx\x-Recurse -File | sort length –Descending
Run Code Online (Sandbox Code Playgroud)
你能给我一些提示吗?
Mat*_*sen 56
如果按长度排序不是必需的,您可以使用该-Name参数只Get-ChildItem返回名称,然后使用[System.IO.Path]::GetFileNameWithoutExtension()删除路径和扩展名:
Get-ChildItem -Path .\ -Filter *.js -Recurse -File -Name| ForEach-Object {
[System.IO.Path]::GetFileNameWithoutExtension($_)
}
Run Code Online (Sandbox Code Playgroud)
如果需要按长度排序,请删除-Name参数并输出BaseName每个FileInfo对象的属性.您可以将输出(在两个示例中)传递给clip,以将其复制到剪贴板:
Get-ChildItem -Path .\ -Filter *.js -Recurse -File| Sort-Object Length -Descending | ForEach-Object {
$_.BaseName
} | clip
Run Code Online (Sandbox Code Playgroud)
如果您想要完整路径,但没有扩展名,请替换$_.BaseName为:
$_.FullName.Remove($_.FullName.Length - $_.Extension.Length)
Run Code Online (Sandbox Code Playgroud)
简单的选项是使用管道中项目的.Name属性,FileInfo然后删除扩展名:
Get-ChildItem -Path "C:\code\" -Filter *.js -r | % { $_.Name.Replace( ".js","") }
Run Code Online (Sandbox Code Playgroud)
有两种方法用于过滤文件:通配符使用通配符,或使用正则表达式(正则表达式)。
警告: globbing 方法的缺点是它也匹配不应匹配的文件,例如*.jsx.
# globbing with Wildcard filter
# the error action prevents the output of errors
# (ie. directory requires admin rights and is inaccessible)
Get-ChildItem -Recurse -Filter '*.js' -ErrorAction 'SilentlyContinue'
# filter by Regex
Where-Object { $_.Name -Match '.*\.js$' }
Run Code Online (Sandbox Code Playgroud)
然后,您可以根据需要按名称或文件大小排序:
# sort the output
Sort-Object -PropertyName 'Length'
Run Code Online (Sandbox Code Playgroud)
将其格式化为路径和文件名的简单列表:
# format output
Format-List -Property ('Path','Name')
Run Code Online (Sandbox Code Playgroud)
要删除文件扩展名,您可以使用选择来映射结果:
Select-Item { $_.Name.Replace( ".js", "")
Run Code Online (Sandbox Code Playgroud)
综上所述,还有一个非常简短的版本,您不应该在脚本中使用它,因为它几乎不可读:
ls -r | ? { $_.Name -matches '.*\.js' } | sort Length | % { $_.Name.Replace( ".js", "") | fl
Run Code Online (Sandbox Code Playgroud)
如果您喜欢简洁,可以删除 ForEach-Object 和引号。-Path默认为当前目录,因此您可以省略它
(Get-ChildItem -Filter *.js -Recurse).BaseName | Sort length -Descending
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47226 次 |
| 最近记录: |