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')}"
我可能已经理解了你的问题,因为现有的答案似乎没有提供我认为你正在寻找的信息。
虽然这些示例没有具体回答您标题中提出的问题,但它们旨在输出我认为您正在寻找的内容。
因此,这是我的 batch-file 尝试:
@"%__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
显然是 cmd 版本,主题是:
"%__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}}"
以防万一这只是我的误会,也许这个 batch-file 对你有用:
@"%__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
cmd版本:
"%__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. 中一样工作
为什么我收到以下错误 "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')}"
我可能已经理解了你的问题,因为现有的答案似乎没有提供我认为你正在寻找的信息。
虽然这些示例没有具体回答您标题中提出的问题,但它们旨在输出我认为您正在寻找的内容。
因此,这是我的 batch-file 尝试:
@"%__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
显然是 cmd 版本,主题是:
"%__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}}"
以防万一这只是我的误会,也许这个 batch-file 对你有用:
@"%__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
cmd版本:
"%__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. 中一样工作