Powershell, скопируйте измененное время файла в файл семафора

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

copy /nul: file1.ext file2.ext

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

Цель состоит в том, чтобы использовать синтаксис для запуска скрипта для проверки папки, поиска файла1 и создания файла2.


person dizzi90    schedule 23.12.2014    source источник


Ответы (1)


Если вы используете PowerShell v4.0, вы можете создать цепочку конвейеров с помощью -PipelineVariable и получить что-то вроде этого:

New-Item -ItemType File file1.txt -PipelineVariable d `
    | New-Item -ItemType File -Path file2.txt `
    | ForEach-Object {$_.LastWriteTime = $d.LastWriteTime}

В PowerShell v3.0 (или меньше) вы можете просто использовать циклы ForEach-Object:

New-Item -ItemType File -Path file1.txt `
    | ForEach-Object {(New-Item -ItemType File -Path file2.txt).LastWriteTime = $_.LastWriteTime}

Я понимаю, что это немного многословно. Сократить его до псевдонимов было бы легко:

ni -type file file1.txt | %{(ni -type file file2.txt).LastWriteTime = $_.LastWriteTime}

Или вы можете обернуть его в функцию:

Function New-ItemWithSemaphore {
    New-Item -ItemType File -Path $args[0] `
    | ForEach-Object {(New-Item -ItemType File -Path $args[1]).LastWriteTime = $_.LastWriteTime}
}

New-ItemWithSemaphore file1.txt file2.txt

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

Function New-FileSemaphore {
    Get-Item -Path $args[0] `
    | ForEach-Object {(New-Item -ItemType File -Path $args[1]).LastWriteTime = $_.LastWriteTime}
}

New-FileSemaphore file1.txt file2.txt
person SomeShinyObject    schedule 23.12.2014