Windows批处理文件中执行PowerShell类dir排序命令失败的问题
Windows批处理文件中执行PowerShell类dir排序命令失败的问题
看起来你踩了个典型的「环境不匹配」的坑——你的批处理文件是在**CMD(命令提示符)**环境下运行的,但Get-ChildItem是PowerShell专属的命令,CMD根本不认识它,这就是为什么会报错说它不是内部/外部命令。之前转义管道符号没用,因为根源问题不是管道的解析,而是你在错误的环境里调用了PowerShell命令。
方法一:在批处理中直接调用PowerShell执行命令
把你的.dir.bat内容改成下面这样就行:
@echo off powershell -NoProfile -Command "Get-ChildItem | Sort-Object -Property LastWriteTime"
这里的关键参数解释一下:
powershell:告诉CMD启动PowerShell进程-NoProfile:跳过加载PowerShell的用户配置文件,启动更快,也避免配置干扰命令执行-Command:指定要在PowerShell中执行的命令字符串
如果想要显示隐藏文件,只需要给Get-ChildItem加上-Force参数:
@echo off powershell -NoProfile -Command "Get-ChildItem -Force | Sort-Object -Property LastWriteTime"
方法二:让输出更贴近CMD的dir风格
如果觉得PowerShell默认的输出格式和CMD的dir差异太大,可以调整命令让输出更符合你的使用习惯,比如模拟dir的列布局:
@echo off powershell -NoProfile -Command "Get-ChildItem -Force | Sort-Object LastWriteTime | Format-Table Mode, LastWriteTime, Length, Name -AutoSize"
Format-Table会把输出整理成表格形式,-AutoSize会自动调整列宽,看起来和dir的输出更像。
额外建议:用PowerShell脚本替代批处理(可选)
如果你经常用PowerShell,也可以直接写一个PowerShell脚本(比如命名为dir-sorted.ps1),内容就是:
Get-ChildItem | Sort-Object -Property LastWriteTime
之后在CMD里运行它只需输入:powershell -File .\dir-sorted.ps1,或者直接在PowerShell环境中双击/执行这个脚本。
备注:内容来源于stack exchange,提问作者nostromo
相关产品推荐
相关产品推荐

