Нет переключателя Powershell, который ведет себя так же, как -nc
Это не только предотвращает перезапись файла. Он также проверяет, существует ли целевой файл, и не запускает вторую загрузку. Весь смысл -nc
чтобы предотвратить фактическую загрузку.
Если файл загружается более одного раза в один и тот же каталог, поведение Wget зависит от нескольких параметров, включая -nc. В некоторых случаях локальный файл будет засорен или перезаписан при повторной загрузке. В остальных случаях это будет сохранено.
При запуске Wget без -N, -nc или -r загрузка одного и того же файла в тот же каталог приведет к сохранению исходной копии файла, а вторая копия будет иметь имя file.1. Если этот файл будет загружен еще раз, третья копия будет называться file.2 и так далее. Если указан параметр -nc, это поведение подавляется, и Wget откажется загружать более новые копии файла. Таким образом, «no-clobber» на самом деле является неправильным в этом режиме. Предотвращается не клоббер (так как числовые суффиксы уже предотвращали клобберинг), а предотвращение сохранения нескольких версий.
При запуске Wget с -r, но без -N или -nc повторная загрузка файла приведет к тому, что новая копия будет просто перезаписывать старую. Добавление -nc предотвратит это поведение, вместо этого будет сохранена исходная версия и проигнорированы все более новые копии на сервере.
При запуске Wget с параметром -N, с параметром -r или без него решение о том, загружать или нет более новую копию файла, зависит от локальной и удаленной отметки времени и размера файла. -nc не может быть указан одновременно с -N.
Обратите внимание, что при указании -nc файлы с суффиксами .html или (yuck) .htm будут загружаться с локального диска и анализироваться так, как если бы они были получены из Интернета.
Итак, в Powershell V3 вы должны имитировать это поведение. В двух словах:
- Получить все базовые имена (без расширения) файлов в заданной папке (место назначения загрузки)
- Получить все URL данного текстового файла (downloadList.txt)
- Сравните оба списка и получить недостающие URL
- Отправлять только пропущенные URL на
Invoke-Webrequest
и добавить html
как расширение
$folder = "D:\my\folder"
Compare $(Dir $folder).BaseName (gc "D:\downloadList.txt") -PassThru |
where {$_.SideIndicator -eq '=>'} |
foreach { wget $_ -OutFile "$folder\$_.html" }
И не гольф
$folder = "D:\my\folder"
$exists = $(Get-ChildItem $folder).BaseName
$urls = Get-Content "D:\downloadList.txt"
$missing = Compare $exists $urls -PassThru | where {$_.SideIndicator -eq '=>'}
$missing | foreach { Invoke-WebRequest -Uri $_ -OutFile "$folder\$_.html" }