【问题标题】:Invoking Powershell commands in a batch file在批处理文件中调用 Powershell 命令
【发布时间】:2015-03-25 08:40:04
【问题描述】:

谁能帮我把下面的 Powershell 命令写成批处理文件?我将通过命令提示符执行该文件。我没有创建 ps1 文件并通过命令提示符执行它的选项。

谢谢。

$limit = (Get-Date).AddDays(-4)   
$path = "T:\FolderName"   

Get-ChildItem -Path $path -Recurse -Force -include *.txt | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force

Get-ChildItem \\123.456.78.910\Y$\Z\*.txt | Where { $_.CreationTime -ge (Get-Date).AddMinutes(-30) } | % { Copy-Item $_.FullName -destination T:\FolderName }

【问题讨论】:

标签: powershell batch-file


【解决方案1】:

您可以使用 -command 参数调用 powershell.exe 来执行此操作。您还可以使用分号分隔多个 powershell 命令。你应该双双引号任何双引号。

这是一个例子:

powershell -command "$limit = (Get-Date).AddDays(-4); $path = 'T:\Folder Name';Get-ChildItem -Path $path -Recurse -Force -include *.txt | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force"

powershell -command "$limit = (Get-Date).AddDays(-4); $path = 'T:\Folder Name';Get-ChildItem \\123.456.78.910\Y$\Z\*.txt | Where-Object { $_.CreationTime -ge (Get-Date).AddMinutes(-30) } | % { Copy-Item $_.FullName -destination 'T:\DestinationFolderName' }"

编辑: 这是它的单行版本,只有一组“”;里面的所有引号都是单引号'

powershell -command "$limit = (Get-Date).AddDays(-2); $path = 'D:\Folder\Folder Name'; Get-ChildItem -Path $path -Recurse -Force -include *.txt | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force;Get-ChildItem \\123.456.25.123\D$\folder*.txt | Where-Object { $_.CreationTime -ge (Get-Date).AddMinutes(-30) } | % { Copy-Item $_.FullName -destination 'D:\Folder\Folder' }";

【讨论】:

  • 谢谢,但它给出了以下错误:表达式或语句中出现意外的令牌'}'。在 line:1 char:175 + Get-ChildItem \\123.456.78.910\H$\Y*.txt |其中 { $_.CreationTime -ge (Get-Date).AddMinutes(-30) } | \Folder\AnotherFolder\AnotherFolder }
  • 我不得不承认我不能在 PowerShell 1.0 中尝试这个,但是让我们用单引号而不是双双引号来试试。我将就地编辑代码
  • powershell -command '$limit = (Get-Date).AddDays(-2);$path = "D:\Folder\Folder";Get-ChildItem -Path $path -Recurse -Force -包括 *.txt | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } |删除项目-Force'; powershell -command 'Get-ChildItem \\123.456.25.123\D$\folder*.txt |其中 { $_.CreationTime -ge (Get-Date).AddMinutes(-30) } | % { Copy-Item $_.FullName -destination D:\Folder\Folder }';
  • 你在相反的地方有单引号和双引号。此外,您似乎正试图将两个 powershell 命令放在一行上。如果您愿意,这可以工作,但您不应指定“powershell.exe -command”两次;只是在开始。你也有一个 Where 你应该有一个 Where-Object 我相信
  • 谢谢伙计。感谢你的帮助。在处理了这个旧版本的 Powershell 之后,通过创建一个单独的 .ps1 文件并通过批处理文件执行它来实现我所需要的(不是理想的解决方案,但它可以工作:))。
猜你喜欢
  • 2019-11-15
  • 1970-01-01
  • 2020-09-10
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多