Создание нового файла с помощью команды touch в сообщении об ошибке PowerShell

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

Я изменил каталог на новый и набрал touch textfile.txt.

это сообщение об ошибке я получаю:

touch : The term 'touch' is not recognized as the name of a cmdlet, function, 
script file, or operable program. Check the spelling of the name, or if a path was 
included, verify that the path is correct and try again.

At line:1 char:1
+ touch file.txt
+ ~~~~~
+ CategoryInfo          : ObjectNotFound: (touch:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException`

почему это не работает? Должен ли я использовать Git Bash все время?

4 ответов


Если вам нужна команда touch в PowerShell вы можете определить функцию, которая делает правильную вещь™:

function touch {
  Param(
    [Parameter(Mandatory=$true)]
    [string]$Path
  )

  if (Test-Path -LiteralPath $Path) {
    (Get-Item -Path $Path).LastWriteTime = Get-Date
  } else {
    New-Item -Type File -Path $Path
  }
}

поместите функцию в свой профиль чтобы он был доступен при запуске PowerShell.

определение touch в качестве псевдонима (New-Alias -Name touch -Value New-Item) не будет работать здесь, потому что New-Item обязательный параметр -Type и вы не можете включать параметры В определения псевдонимов PowerShell.


Если вы используете Windows Powershell, эквивалентная команда касания Mac / Unix:New-Item textfile.txt -type file.


As Этан Рейснер указано, touch не является командой ни в Windows, ни в PowerShell.

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

$null > textfile.txt
$null | sc textfile.txt

обратите внимание, что первый по умолчанию будет Unicode, поэтому ваш файл не будет пустым; он будет содержать 2 байта,Unicode BOM.

второй один использует sc (псевдоним Set-Content), которая по умолчанию ASCII при использовании в файловой системе.

если вы используете пустую строку ('' или "" или [String]::Empty) вместо $null вы в конечном итоге с разрывом линии также.


сочетание New-Item С Name, ItemType и Path параметры работали для меня. В моем случае, чтобы создать _netrc файл для git:

 New-Item -Name _netrc -ItemType File -Path $env:userprofile

ссылки