Using the append redirector ">>" resolves the issue where an existing file is deleted:
echo $null >> filename
В PowerShell есть эквивалент touch
?
Например, в Linux я могу создать новый пустой файл, вызвав:
touch filename
В Windows это довольно неудобно - обычно я просто открываю новый экземпляр блокнота и сохраняю пустой файл.
Так есть ли в PowerShell программный способ сделать это?
Я не ищу точное соответствие поведению касания, но просто чтобы найти самый простой из возможных эквивалентов для создания пустых файлов.
Using the append redirector ">>" resolves the issue where an existing file is deleted:
echo $null >> filename
Here is a version that creates a new file if it does not exist or updates the timestamp if it does exist.
Function Touch-File { $file = $args[0] if($file -eq $null) { throw "No filename supplied" } if(Test-Path $file) { (Get-ChildItem $file).LastWriteTime = Get-Date } else { echo $null > $file } }
Чтобы создать пустой файл:
New-Item -ItemType file example.txt
Чтобы обновить метку времени файла:
(gci example.txt).LastWriteTime = Get-Date
In PowerShell you can create a similar Touch function as such:
function touch
Usage:
touch myfile.txt
я предпочитаю
fc > filename
для этой задачи. Для работы с непустыми файлами вы можете использовать
fc >> filename
fc
это просто псевдоним для Format-Custom . Я выбрал его, потому что это короткая команда, которая ничего не делает в этом контексте, ноуп . Это также приятно, потому что если вы забудете о перенаправлении
fc filename
вместо того, чтобы дать вам ошибку, опять же это просто ничего не делает. Некоторые другие псевдонимы, которые будут работать
ft -> Format-Table fw -> Format-Wide
Я собрал различные источники и нашел следующее, которое отвечало моим потребностям. Мне нужно было установить дату записи DLL, которая была собрана на машине в другом часовом поясе:
$update = get-date Set-ItemProperty -Path $dllPath -Name LastWriteTime -Value $update
Конечно, вы также можете установить его для нескольких файлов:
Get-ChildItem *.dll | Set-ItemProperty -Name LastWriteTime -Value $update
Уже есть куча достойных ответов, но мне очень нравится псевдоним New-Item, который просто: ni
Вы также можете отказаться от объявления типа файла (которое, как я полагаю, подразумевается при добавлении расширения), поэтому для создания файла javascript с именем «x» в моем текущем каталоге я могу просто написать:
ni x.js
3 символа быстрее, чем прикосновение!
Откройте файл своего профиля:
notepad $profile
Добавьте следующую строку:
function touch
Сохраните его и перезагрузите свой профиль $, чтобы сразу его использовать. (Не нужно закрывать и открывать powershell)
. $profile
Чтобы добавить новый файл в текущий каталог, введите:
touch testfile.txt
Чтобы добавить новый файл в директорию myfolder, введите:
touch myfolder\testfile.txt
Если файл с таким именем уже существует, он не будет переопределен. Вместо этого вы получите ошибку.
Я надеюсь, что это помогает
Бонусный совет:
Вы можете сделать эквивалент 'mkdir', добавив следующую строку:
function mkdir
То же использование:
mkdir testfolder mkdir testfolder\testsubfolder
ac file.txt $null
Won't delete the file contents but it won't update the date either.
Похоже, что куча ответов здесь не учитывает кодировку файлов.
Я просто столкнулся с этой проблемой по разным причинам, но
echo $null > $file $null > $file
оба производят файл UTF-16-LE, в то время как
New-Item $file -type file
создает файл UTF-8.
По какой-то причине fc > $file
и fc >> $file
, кажется, также производить файлы UTF-8.
Out-File $file -encoding utf8
дает вам файл UTF-8-BOM, в то время как
Out-File $file -encoding ascii
дает вам файл UTF-8. Другие допустимые (но не проверенные) кодировки, которые поддерживает Out-File: [[-Encoding] ]. Вы также можете передать данные в Out-File, чтобы дать файлу некоторые текстовые данные для хранения, а также флаг -append. Например:
echo $null | Out-File .\stuff.txt -Encoding ascii -Append
этот пример не обновляет временную метку по какой-то причине, но этот:
echo foo | Out-File .\stuff.txt -Encoding ascii -Append
Хотя у этого есть побочный эффект добавления "foo" в конец файла.
Если вы не уверены в том, какая у вас кодировка, я обнаружил, что VS-Code имеет отличную функцию, где в правом нижнем углу написано, что такое кодировка. Я думаю, что Notepad ++ также имеет аналогичную функцию.