如何在没有确认的情况下使用PowerShell删除文件?

时间:2017-04-25 12:57:56

标签: powershell

我正在尝试使用任务计划程序使以下PowerShell脚本工作。问题是它不会删除任何文件。

当我手动运行它时,在删除文件之前需要确认。

Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want
 to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

如何编辑此脚本以删除文件而不进行任何确认,以便我可以使用任务管理器运行它?

#----- define parameters -----#
#----- get current date ----#
$Now = Get-Date
#----- define amount of days ----#
$Days = "10"
#----- define folder where files are located ----#
$TargetFolder = "D:\Shares\Downloads\TV\AutoDL"
#----- define extension ----#
$Extension = "*.*"
#----- define LastWriteTime parameter based on $Days ---#
$LastWrite = $Now.AddDays(-$Days)

#----- get files based on lastwrite filter and specified folder ---#
$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}

foreach ($File in $Files) 
{
    if ($File -ne $NULL)
    {
        write-host "Deleting File $File" -ForegroundColor "DarkRed"
        Remove-Item $File.FullName | out-null
    }
    else
    {
        Write-Host "No more files to delete!" -foregroundcolor "Green"
    }
}

7 个答案:

答案 0 :(得分:7)

您需要将-Confirm:$false添加到Remove-Item命令以覆盖默认的确认行为。如果做不到这一点,请尝试添加-Force

答案 1 :(得分:3)

删除D:\FOLDER上的文件文件夹\子文件夹(下面的示例),其中包含30天以上的所有文件。

Get-ChildItem -Path "D:\FOLDER\" -Recurse |? {($_.LastWriteTime -lt (Get-Date).AddDays(-30))} | Remove-Item -Recurse -Force -confirm:$false -Verbose

-Force -Confirm:$false保证您每次删除文件或文件夹时都不必按YA-Verbose显示正在删除的内容。

答案 2 :(得分:2)

我认为 var orderid = Ordersdetail[0]["OrderId"]! var shippingadress = Ordersdetail[0]["ShippingAddress"]! var total = Ordersdetail[0]["GrandTotal"]! var subtotal = Ordersdetail[0]["SubTotal"]! var tax = Ordersdetail[0]["Tax"]! var shipping = Ordersdetail[0]["Shipping"]! 应该在没有任何提示的情况下工作。但事实并非如此。

要删除整个文件夹及其中的所有内容,不用任何提示,我必须使用GCI并升级。所以而不是:

Remove-Item -Path "C:\Temp\FolderToDelete" -Confirm:$false -Force

删除FolderToDelete中的所有内容,但不删除父文件夹。

要删除父文件夹及其中的所有内容而不提示,我做了:

Get-ChildItem -path "C:\Temp\FolderToDelete" | Remove-Item -Recurse -Confirm:$false -Force

Get-ChildItem -path "C:\Temp\" -Directory -Filter "FolderToDelete" | Remove-Item -Recurse -Confirm:$false -Force 中没有尾随'\'。

HTH

答案 3 :(得分:1)

您可以像这样简化脚本:

  1. int g; bool UserExists = false; switch(Department_cmbBx.SelectedItem.ToString()) { case "Office": g = 1; break; case "Stores": g = 2; break; case "Workshop": g = 3; break; case "Management": g = 4; break; case "Admin": g = 5; break; default: MessageBox.Show("error: an invalid value."); break; } using (OleDbConnection connection = new OleDbConnection(connectionString)) { using (OleDbCommand command = new OleDbCommand("select [Username] from LoginTable where Username=@Username" , connection)) { command.Parameters.Add("@Username", Username_txtBx.Text); connection.Open(); using(OleDbDataReader reader = command.ExecuteReader()) { // If at least 1 row was returned, this means the user exists in the table. while (reader.Read()) { UserExists = true; } } if (!UserExists) { // The user does not exists - you can create it. command.Parameters.Clear(); command.CommandText = "insert into LoginTable([Username],[Password],[Group]) values (@Username,@Username,@G)"; command.Parameters.Add("@Username", Username_txtBx.Text); command.Parameters.Add("@Password", "password"); command.Parameters.Add("@G", g); command.ExecuteNonQuery(); } else { // Show an error message - the user already exists MessageBox.Show("The user you eneterd already exists."); } } } -file命令
  2. 一起使用
  3. 没有必要拥有Get-Childitem变量
  4. 在您的位置使用别名(更好的可见性)
  5. 如果没有文件
  6. ,您的$Now必须出来检查
  7. if添加到您的-Force命令
  8. 如果您使用Remove-Item
  9. ,则无需进行扩展

    批准的代码:

    '\*.*'

答案 4 :(得分:1)

它说

  

未指定递归参数。如果继续,所有子项将与该项目一起删除。您确定要继续吗?

尝试: Remove-Item ./folderToDelete -Force -Recurse

答案 5 :(得分:1)

Remove-Item foldertodelete -Recurse -Force -Confirm:$false

为我工作。

答案 6 :(得分:0)

这对我有用:

Get-ChildItem-路径“ FolderToDelete”-目录-递归|其中{$ _。LastWriteTime -le $(get-date).Adddays(-7)} | Remove-Item -recurse -force

相关问题