欢迎使用PowerShell指南包含以下PowerShell命令的等效
项pwd
:cd
、、、、、、、、、、、、、、、、和:https : //mathieubuisson.github.io/powershell-linux-bash/ls
find
cp
rm
mkdir
touch
cat
tail
grep
uname
mkfs
ping
man
cut
此外,还可以找到其他命令行命令的附加等效项,例如which、where、alias、wget、curl、type、%0,甚至命令覆盖。
但是,我仍然无法弄清楚如何for
在 Powershell 中执行简单语句。例如,以下内容将根据文件名对所有文件进行分组,假设每个文件名都有一个 .txt 等效文件:
set b=0
for %a in (*.txt) do set /a b=!b!+1 > NUL & echo (!b!) & dir /b %~na.*
PowerShell 中的等效命令是什么?命令
ls *.txt | ForEach-Object {Split-Path -LeafBase -Path $_.Name}
列出文件。但是,我如何将文件名传递给命令dir /b %~na.*
?似乎只要我关闭 For-Each-Object 命令的括号,结果就会以聚合的形式传递,而不是能够一次处理一行。如果我在 Split-Path 周围添加另一层,那么最终会$_
变成一个不同的对象,因此无法将文件名与扩展名分开。
编辑:有没有更好的方法可以让我一次解析一个结果?该for
命令是在评论中建议的;我只是很难弄清楚如何让它处理所有 *.txt 文件;但如果可行,也许这就是要走的路?
如果可能的话,最好从命令行执行此操作,而无需写入文件。
PowerShell 的版本
for
是通用的,更接近编程语言——它不是专门循环遍历文件,而是循环遍历任意列表,这意味着您需要另一个命令来生成文件列表。(从 Cmd 转到其他任何东西时,需要忘记这一点 —— 有时没有等价性,因为整个架构都不同。)
dir
akagci
akaGet-ChildItem
就是为此目的而工作的——尽管单独运行它会显示一个漂亮的表格,但实际上结果是一个只有在显示时才会变成文本的对象:将其放入 ForEach-Object 中以获取循环:
尽管您可以将当前迭代值
$_
分配给块内的自定义变量,但它始终是。编写循环的另一种方法是使用更传统的
foreach {}
块,就像在许多编程语言中一样:在这种情况下,Get-ChildItem 不只是返回文件名列表;它还返回具有属性的对象。例如,
$_.FullName
包含文件的完整路径(如果需要,您可以使用 Split-Path 来使用它),而$_.Name
仅包含名称。的等价物
%~na
同样是通用的,并且不以任何方式依赖于for
循环。与任何其他 PowerShell 命令一样,单独运行它就会在 stdout 中显示结果(就像您在自己的代码中一样),但您可以将它们分配给变量:
然后可以将其作为循环的一部分来完成:
类似地,任何命令都可以像变量一样直接用作替换,
$(...)
如果您希望将它们全部放在一行中,请使用: