Powershell For-Loop 抛出 MissingVariableNameAfterForeach

Powershell For-Loop throws MissingVariableNameAfterForeach

为什么我收到以下错误 "MissingVariableNameAfterForeach":

powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "foreach($file in Get-ChildItem C:){((Get-Date)-$file.LastWriteTime).ToString('dd')}"

该命令应该打印出从上次 file/folder 写入 C:\

的今天开始的日期

来自帮助文本:

PS C:\> powershell.exe /?
If the value of Command is a script block, the script block must be enclosed
in braces ({}). You can specify a script block only when running PowerShell.exe
in Windows PowerShell.

试试这个:

powershell.exe -NoProfile -ExecutionPolicy Bypass -Command {Get-ChildItem C: | ForEach-Object{($_.LastWriteTime).ToString('dd')}}

如果您将 Get-ChildItem 括在括号中,您的命令将起作用。

powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ^
    "foreach($file in (Get-ChildItem C:)){((Get-Date)-$file.LastWriteTime).ToString('dd')}"

我可能已经理解了你的问题,因为现有的答案似乎没有提供我认为你正在寻找的信息。

虽然这些示例没有具体回答您标题中提出的问题,但它们旨在输出我认为您正在寻找的内容。

因此,这是我的 尝试:

@"%__AppDir__%WindowsPowerShell\v1.0\powershell.exe" -NoProfile -Command^
 "Get-ChildItem -Path 'C:\'|Sort-Object -Property LastWriteTime|"^
 "Select-Object -Last 1|Format-Table -AutoSize -Property Name,"^
 "@{Name='DaysOld';Expression={[Int]$((Get-Date)-$_.LastWriteTime).TotalDays}}"
@Pause

显然是 版本,主题是:

"%__AppDir__%WindowsPowerShell\v1.0\powershell.exe" -NoProfile -Command "Get-ChildItem -Path 'C:\'|Sort-Object -Property LastWriteTime|Select-Object -Last 1|Format-Table -AutoSize -Property Name,@{Name='DaysOld';Expression={[Int]$((Get-Date)-$_.LastWriteTime).TotalDays}}"



以防万一这只是我的误会,也许这个 对你有用:

@"%__AppDir__%WindowsPowerShell\v1.0\powershell.exe" -NoProfile -Command^
 "Get-ChildItem -Path 'C:\'|Sort-Object -Property LastWriteTime -Descending|"^
 "Format-Table -AutoSize -Property Name,"^
 "@{Name='DayInMonth';Expression={($_.LastWriteTime).ToString('dd')}},"^
 "@{Name='DaysOld';Expression={[Int]$((Get-Date)-$_.LastWriteTime).TotalDays}}"
@Pause

版本:

"%__AppDir__%WindowsPowerShell\v1.0\powershell.exe" -NoProfile -Command "Get-ChildItem -Path 'C:\'|Sort-Object -Property LastWriteTime -Descending|Format-Table -AutoSize -Property Name,@{Name='DayInMonth';Expression={($_.LastWriteTime).ToString('dd')}},@{Name='DaysOld';Expression={[Int]$((Get-Date)-$_.LastWriteTime).TotalDays}}"



在这两种情况下,您会注意到因为我没有运行宁一个 PowerShell 脚本,所以没有必要规定执行策略。命令应该像 运行 直接在 PowerShell window.

中一样工作