Подтверждение продолжения или разрыва Foreach создает парадокс - PullRequest
0 голосов
/ 31 октября 2019

Мне нужен код ниже, чтобы спросить пользователя, после того, как он извлечет и перечислит файлы, которые он будет перемещать в папки сезона, если они хотят продолжить или остановить.

$DstBase = "E:\series"
Get-ChildItem -Include *.mkv,*.mp4,*.srt,*.avi -Recurse -File|
  Where-Object BaseName -match "^(?<Series>.*?)\.?S(?<Season>\d{1,2})\.?E(?<Episode>\d{2})"|
    ForEach-Object {
      $Destination = "{0}\{1}\Season {2:00}\" -f $DstBase,$Matches.Series.replace('.',' ').Trim(),[int]$Matches.Season
      if (!(Test-Path $Destination)){MD $Destination -Force | Out-Null}
      "Moving file [{0}] to [{1}]" -f $_.FullName,$Destination
      $_ | Move-Item -Destination $Destination -Force
    }

Я не знаю, есликод должен быть переписан, так как я пытался вставить подтверждение перед фактическим кодом Move и пытался перебить различные места. С изменением ниже, если ответ «Y», код будет продолжать спрашивать после каждого файла, но я хочу, чтобы он показывал, что он будет перемещать, и перемещает все найденные файлы, если ответ «Y»:

Я понимаюпроблема может заключаться в том, что я помещаю подтверждение в код цикла, поэтому оно также будет запускать подтверждение каждый раз, когда найден файл !! :


$confirmation = Read-Host "Are you Sure You Want To Proceed:"
if ($confirmation -eq 'y') {
    # proceed
    write-host ' you answered yes, will continue move !'

     $_ | Move-Item -Destination $Destination -Force    #move files to destination
    return
    }

 write-host ' code will stop now '
   break
}

Код найден здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...