Esta pergunta já tem uma resposta aqui:
- Windows equivalente ao comando Linux 'touch'? 31 respostas
No PowerShell, existe um equivalente a touch
?
Por exemplo, no Linux, posso criar um novo arquivo vazio invocando:
touch filename
No Windows, isso é bastante estranho - geralmente eu apenas abro uma nova instância do bloco de notas e salvo um arquivo vazio.
Portanto, existe uma maneira programática no PowerShell de fazer isso?
Não pretendo corresponder exatamente ao comportamento do toque, mas apenas para encontrar o equivalente mais simples possível para a criação de arquivos vazios.
windows
windows-8
powershell
powershell-3.0
jsalonen
fonte
fonte
touch
no Linux.touch
em um arquivo existente; ele atualizará a última hora de gravação sem modificar o arquivo; consulte os links em @amiregelz. Esta pergunta tem uma alta classificação no Google parapowershell touch
, eu queria alertar os copiadores / coladores que apenas essa metade pode destruir dados, quando o * nix touch não. Consulte a resposta @LittleBoyLost que trata quando o arquivo já existe.Respostas:
O uso do redirecionador de acréscimo ">>" resolve o problema em que um arquivo existente é excluído:
fonte
$null > filename
funciona muito bem..gitignore
uso desse comando e se pergunta por que ele não funcionará. BOM é o motivo.Para criar um arquivo em branco:
Para atualizar o registro de data e hora de um arquivo:
fonte
(gi MyFolder).LastWriteTime = Get-Date
. Você também pode usar isso para arquivos.ni example.txt
Aqui está uma versão que cria um novo arquivo se ele não existir ou atualiza o registro de data e hora, se existir.
fonte
Touch
não é um verbo "aprovado" (não que seja um requisito significativo: msdn.microsoft.com/en-us/library/ms714428. aspx ).File
está bem, aliás. Eu recomendo os nomesSet-File
ouSet-LastWriteTime
ou, meu favoritoUpdate-File
,. Além disso, eu recomendaria emAdd-Content $file $null
vez deecho $null > $file
. Por fim, defina um alias comSet-Alias touch Update-File
se você quiser continuar usando o comandotouch
No PowerShell, você pode criar uma função de toque semelhante, como tal:
Uso:
touch myfile.txt
Fonte
fonte
function touch { if((Test-Path -Path ($args[0])) -eq $false) { set-content -Path ($args[0]) -Value ($null) } }
eu prefiro
para esta tarefa. Para trabalhar com arquivos não vazios, você pode usar
fc
é simplesmente um alias para o formato personalizado . Eu o escolhi porque é um comando curto que não faz nada nesse contexto, um noop . Também é legal porque se você esquecer o redirecionamentoem vez de lhe dar um erro, novamente não faz nada. Alguns outros apelidos que funcionarão são
fonte
Já existem várias respostas dignas, mas eu gosto bastante do apelido de New-Item, que é apenas: ni
Você também pode renunciar à declaração do tipo de arquivo (que suponho estar implícita quando uma extensão é adicionada), para criar um arquivo javascript com o nome de 'x' no meu diretório atual, basta escrever:
3 caracteres mais rápido que o toque!
fonte
ni : The file 'x.js' already exists
Juntei várias fontes e acabei com as seguintes, que atendiam às minhas necessidades. Eu precisava definir a data de gravação de uma DLL que foi criada em uma máquina em um fuso horário diferente:
Obviamente, você também pode configurá-lo para vários arquivos:
fonte
Abra seu arquivo de perfil:
Adicione a seguinte linha:
Salve-o e recarregue seu perfil $ para usá-lo imediatamente. (Não é necessário fechar e abrir o PowerShell)
Para adicionar um novo arquivo no tipo de diretório atual:
Para adicionar um novo arquivo ao diretório 'myfolder', digite:
Se um arquivo com o mesmo nome já existir, ele não será substituído. Em vez disso, você receberá um erro.
Espero que ajude
Dica de bônus:
Você pode fazer o equivalente a 'mkdir' adicionando a seguinte linha:
Mesmo uso:
fonte
Não excluirá o conteúdo do arquivo, mas também não atualizará a data.
fonte
Parece que várias respostas aqui não são responsáveis pela codificação de arquivos.
Acabei de encontrar este problema, por vários outros motivos, mas
ambos produzem um arquivo UTF-16-LE, enquanto
produz um arquivo UTF-8.
Por qualquer motivo
fc > $file
efc >> $file
, também parece produzir arquivos UTF-8.fornece um arquivo UTF-8-BOM, enquanto
fornece um arquivo UTF-8. Outras codificações válidas (mas não testadas) suportadas pelo Out-File são: [[-Encoding] {unknown | string | unicode | bigendianunicode | utf8 utf7 utf32 ascii | padrão | oem}]. Você também pode canalizar o material para Out-File para fornecer ao arquivo alguns dados de texto para armazenar e também um sinalizador -append. Por exemplo:
este exemplo não atualiza o carimbo de data / hora por algum motivo, mas este faz:
Embora tenha o efeito colateral de anexar "foo" ao final do arquivo.
Se você não tiver certeza sobre qual codificação você possui, eu achei o VS-Code com um recurso bacana, onde no canto inferior direito diz qual é a codificação. Eu acho que o Notepad ++ também tem um recurso semelhante.
fonte
Set-Content -Path $file -value $null
faz o trabalho e não afeta a codificação do arquivo. Verifique também a versão ss64 dotouch
.Para o cenário que você descreveu (quando o arquivo não existe), isso é rápido e fácil:
No entanto, o outro uso comum
touch
é atualizar o registro de data e hora do arquivo. Se você tentar usar meusc
exemplo dessa maneira, ele apagará o conteúdo do arquivo.fonte
sc
significa isso ? Edit: descobri ("Set Content")Para criar um arquivo vazio no Windows, o caminho mais rápido é o seguinte:
O zero é o tamanho do arquivo em bytes, portanto, isso também é útil para criar arquivos grandes (eles não serão úteis para testar a compactação, pois não contêm dados reais e serão compactados para praticamente nada)
fonte
A página http://xahlee.info/powershell/PowerShell_for_unixer.html sugere:
e isso de fato cria um novo arquivo de tamanho zero.
Isso não executa a outra função do Unix
touch
, ou seja, atualizar o carimbo de data / hora se o nome do arquivo já existir, mas a pergunta implica que o usuário apenas deseja criar um arquivo de tamanho zero interativamente sem recorrer ao Bloco de Notas.fonte
Usei o nome "Write-File" porque "Touch" não é um verbo aprovado do PowerShell . Eu ainda o apelido como toque, no entanto.
Touch.psm1
Uso:
Suporta:
Credential
para caminhos de redeVerbose
,Debug
EWhatIf
bandeirasfonte
New-Item
comando foi oferecido em quatro respostas anteriores. Você forneceu um invólucro de 20 linhas para ele. Você pode explicar um pouco mais claramente que vantagem sua solução tem sobre as anteriores? Por exemplo, quais são essesVerbose
,Debug
eWhatIf
bandeiras, etc?New-Item
é que ela atualiza o carimbo de data / hora dos arquivos existentes.