对于特定的文件夹,我需要列出扩展名为.js
的所有文件,即使嵌套在任何级别的子文件夹中。
输出控制台的结果应该是一个不带扩展名的文件名列表,可以逐行轻松复制和粘贴到另一个应用程序中。
目前我正在尝试这样做,但在输出控制台中,我得到了几个元信息,而不是一个简单的列表。
Get-ChildItem -Path C:\xx\x-Recurse -File | sort length –Descending
你能给我一些提示吗?
对于特定的文件夹,我需要列出扩展名为.js
的所有文件,即使嵌套在任何级别的子文件夹中。
输出控制台的结果应该是一个不带扩展名的文件名列表,可以逐行轻松复制和粘贴到另一个应用程序中。
目前我正在尝试这样做,但在输出控制台中,我得到了几个元信息,而不是一个简单的列表。
Get-ChildItem -Path C:\xx\x-Recurse -File | sort length –Descending
你能给我一些提示吗?
7条答案
按热度按时间gdx19jrr1#
如果不需要按长度排序,可以使用
-Name
参数让Get-ChildItem
只返回名称,然后使用[System.IO.Path]::GetFileNameWithoutExtension()
删除路径和扩展名:如果需要按长度排序,请删除
-Name
参数并输出每个FileInfo
对象的BaseName
属性。您可以通过管道将输出(在两个示例中)传输到clip
,以将其复制到剪贴板中:如果需要完整路径,但不带扩展名,请将
$_.BaseName
替换为:9lowa7mx2#
简单的选择是使用管道中
FileInfo
项的.Name
属性,然后删除扩展名:o2g1uqev3#
有两种过滤文件的方法:使用通配符或使用正则表达式(Regex)的globbing。
**警告:**BLOBING方法的缺点是它也匹配不应该匹配的文件,如
*.jsx
。然后,您可以根据需要按名称或文件大小排序:
将其格式化为路径和文件名的简单列表:
要删除文件扩展名,可以使用SELECT来Map结果:
总而言之,还有一个非常简短的版本,您不应该在脚本中使用它,因为它很难读懂:
dgjrabp24#
如果您喜欢简洁,可以删除ForEach对象和引号。
-Path
默认为当前目录,因此您可以省略它0yg35tkg5#
上面的答案很好用。但是,在Windows中有一个名为ls的别名,与Linux上的别名相同,因此也可以使用另一个较短的命令
ls -Filter *.exe
i7uq4tfw6#
使用BaseName作为不带文件扩展名的文件名。
ltskdhd17#
我过去总是用Cygwin来做这个。我的上一个雇主封锁了我们的环境,但没有。我喜欢查看我经常修改的最新文件。我创建了名为LatestCode的以下环境变量来存储脚本。然后,我使用:iex$env:Latest代码执行它。
脚本是这样的:Get-子项目“.”-Recurse-Include*.ts,.html,.sass,.Java,.js,*.css|where-Object{$_.mode-notMatch“d”}|排序lastWritetime-降序|Select-Object-first 25|Format-table lastWritetime,Fullname-AutoSize