Windows equivalente a 'touch' (ou seja, a maneira node.js de criar um index.html)


195

Em uma máquina Windows, recebo este erro

'touch' não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote.

quando sigo as instruções para fazer:

touch index.html app.js style.css

Existe um equivalente do Windows ao uso do 'toque'? Preciso criar esses arquivos manualmente (e modificá-los para alterar o carimbo de data / hora) para implementar esse tipo de comando? Isso não parece muito ... nó-ish ...


5
Uma simples pesquisa no Google mostra várias implementações do Windows touch. Outra discussão aqui: superuser.com/questions/10426/… e a biblioteca Cygwin é um conjunto de ferramentas comum dos comandos do Unix no Windows.
precisa saber é

4
Possível duplicata desta pergunta: stackoverflow.com/questions/26343974/…
Plastic Sturgeon


1
diretamente para a resposta de Raghuveer se você chegou aqui enquanto usa o PowerShell.
RBT

Respostas:


279

no tipo de janela cmd:

type nul > your_file.txt

Isso criará 0 bytes no arquivo your_file.txt.

Outra maneira de fazer isso é usando o comando echo :

echo.> your_file.txt

eco. - criará um arquivo com uma linha vazia.

Editado em 01/04/2019:

Se você precisar preservar o conteúdo do arquivo, use >> em vez de>

>   Creates a new file
>>  Preserves content of the file

Exemplo

type nul >> your_file.txt

Editado em 2020-04-07

Você também pode usar o comando de chamada .

Chama um programa em lote de outro sem interromper o programa em lote pai. O comando call aceita rótulos como o destino da chamada.

Exemplo:

call >> your_file.txt

2
no Windows 7, a primeira opção produz uma caixa de diálogo assustadora e você vê access deniedno console. A segunda opção funciona muito bem!
Decodificado

13
A resposta está errada, só funciona quando o arquivo não existe. Se o arquivo existir, o uso >>do primeiro não fará nada, o segundo adiciona uma linha no final do arquivo. A resposta correta é superuser.com/questions/10426/…
stenci

3
@stenci - Eu apenas tentei em um arquivo inexistente e funcionou muito bem. Ele criou o arquivo ok. Talvez você não tenha direitos de administrador?
dcp 07/02

2
@stenci esse link de superusuário é ótimo. Você deve publicá-lo como resposta.
Denise Skidmore #

@DeniseSkidmore Obrigado, adicionei a resposta. É bem profundo e as pessoas provavelmente lerão meu comentário para esta resposta do que minha resposta, mas agora está lá.
stenci

66

O Windows não inclui nativamente um touchcomando.

Você pode usar qualquer uma das versões públicas disponíveis ou sua própria versão. Salve esse código como touch.cmde coloque-o em algum lugar no seu caminho

@echo off
    setlocal enableextensions disabledelayedexpansion

    (for %%a in (%*) do if exist "%%~a" (
        pushd "%%~dpa" && ( copy /b "%%~nxa"+,, & popd )
    ) else (
        type nul > "%%~fa"
    )) >nul 2>&1

Ele iterará na lista de argumentos e, para cada elemento, se houver, atualize o registro de data e hora do arquivo; caso contrário, crie-o.


35

Você pode usar este comando: ECHO >> filename.txt

ele criará um arquivo com a extensão especificada na pasta atual.

ATUALIZAR:

para um arquivo vazio, use: copy NUL filename.txt


8
Melhor ainda type NUL > filename(cria um arquivo de 0 bytes)
krzemian

23
Como o toque, isso não substituirá o arquivo se ele existir:type NUL >> filename
henon

3
Essa é uma ótima maneira de adicionar "O ECHO está ativado". para o seu arquivo.
ripvlan

4
isso não atualiza o registro de data e hora dos arquivos existentes.
Denise Skidmore #

1
Acho que Denise Skidmore está respondendo ao henon, não ao OP. (Eu apóio o comentário dela.)
Keith Russell


15

Estou surpreso com quantas respostas aqui estão erradas . Fazer eco de nada em um arquivo preencherá o arquivo com algo parecido ECHO is ON, e tentar ecoar $nulem um arquivo será literalmente $nulinserido no arquivo. Além disso, para o PowerShell, o eco $nullem um arquivo não produz um arquivo de 0kb, mas algo codificado como UCS-2 LE BOM, que pode ficar confuso se você precisar garantir que seus arquivos não tenham uma marca de ordem de bytes.

Depois de testar todas as respostas aqui e referenciar algumas semelhantes, posso garantir que elas funcionem por shell do console. Apenas mude FileName.FileExtensionpara o caminho completo ou relativo do arquivo que você deseja touch; obrigado a Keith Russell pela COPY NUL FILE.EXTatualização:

Atualizações do CMD com registro de data e hora

copy NUL FileName.FileExtension

Isso criará um novo arquivo com o nome que você colocou em vez de FileName.FileExtensioncom um tamanho de 0 bytes. Se o arquivo já existir, ele basicamente se copiará no local para atualizar o registro de data e hora. Eu diria que isso é mais uma solução alternativa do que a funcionalidade 1: 1, touchmas não conheço nenhuma ferramenta interna para o CMD que possa atualizar a data e hora de um arquivo sem alterar qualquer outro conteúdo.

CMD sem atualizações de carimbo de data / hora

if not exist FileName.FileExtension copy NUL FileName.FileExtension

Atualizações do PowerShell com registro de data e hora

if (!(Test-Path FileName.FileExtension -PathType Leaf)) {New-Item FileName.FileExtension -Type file} else {(ls FileName.FileExtension ).LastWriteTime = Get-Date}

Sim, funcionará no console como uma linha; nenhum requisito para colocá-lo em um arquivo de script do PowerShell.

PowerShell sem atualizações de carimbo de data / hora

if (!(Test-Path FileName.FileExtension -PathType Leaf)) {New-Item FileName.FileExtension -Type file}


1
E a situação em que o arquivo existe e você deseja atualizar o carimbo de data / hora da modificação para o horário atual? Não vejo como esses exemplos conseguem isso.
RoG

2
Ótima observação, RoG! Eu atualizei a resposta para resolver este :)
kayleeFrye_onDeck

Esta é a melhor resposta. No entanto, eu ainda o melhoraria substituindo fsutil file CreateNew FileName.FileExtension 0por copy NUL Filename.FileExtension, já que o último é mais curto e faz a mesma coisa.
Keith Russell

@KeithRussell IIRC, houve um motivo específico que eu não usei copymais, fsutilmas já faz um tempo ... Eu tenho certeza que foi assim que eu aprendi sobre fsutilhaha! Vou tentar descobrir o porquê ...
kayleeFrye_onDeck

1
Mesmo que eles se comportem da mesma forma, acho prematuro dizer que um é melhor, sem testes de velocidade.
Keith Russell

14

Use o seguinte comando na sua linha de comandos:

fsutil file createnew filename  requiredSize

As informações de parâmetros conforme a seguir:

fsutil - Utilitário do sistema de arquivos (o executável que você está executando)

file - aciona uma ação de arquivo

createnew - a ação a ser executada (crie um novo arquivo)

filename - seria literalmente o nome do arquivo

requiredSize - alocaria um tamanho de arquivo em bytes no arquivo criado


2
Alguma explicação é necessária para que isso seja considerado uma resposta decente. Não está claro o significado dessas cinco palavras.
precisa saber é

1
trabalhou para mim ... a coisa requiredSize é esquisita ... o comando apenas preenche seu novo arquivo com milhares de NULLs ... esquisitas ... então, use 0 ... gera um erro se você pular a requiredSize .. .
dsdsdsdsd

1
este commnad precisa de privilégios de administrador :(
ADJ

1
O toque também atualiza o carimbo de data e hora dos arquivos existentes, não apenas cria novos arquivos.
Denise Skidmore #

1
touch é uma maneira rápida de fazê-lo, o mais próximo seria eco ou tipo, eu acho, embora seja uma ferramenta muito útil para scripts e amplamente utilizada no WS16, perfeito! docs.microsoft.com/en-us/windows-server/administration/…
Alan #

10

No Windows Power Shell, você pode usar o seguinte comando:

New-Item <filename.extension>

ou

New-Item <filename.extension> -type file

Nota: O item novo pode ser substituído por seu alias ni


1
Essa é a resposta real no mundo atual do Windows, onde o PowerShell é o programa de shell de comando padrão.
RBT

Não sei ao que Windows você está se referindo, acabei de instalar um novo Windows 10 e o Powershell definitivamente não é o shell padrão. 'New-Item' is not recognized as an internal or external command
user5359531

8

Você pode replicar a funcionalidade do touch com o seguinte comando:

$>>filename

O que isso faz é tentar executar um programa chamado $ , mas se $não existir (ou não for um executável que produza saída), nenhuma saída será produzida por ele. É essencialmente um hack na funcionalidade, mas você receberá a seguinte mensagem de erro:

'$' não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote.

Se você não quiser a mensagem de erro, poderá fazer uma de duas coisas:

type nul >> filename

Ou:

$>>filename 2>nul

o type comando tenta exibir o conteúdo de nul, que nada faz, mas retorna um EOF (final do arquivo) quando lido.

2>nulenvia a saída de erro (saída 2) para nul (que ignora todas as entradas quando gravadas em). Obviamente, o segundo comando (com 2>nul) é redundante pelo typecomando, pois é mais rápido digitar. Mas pelo menos agora você tem a opção e o conhecimento.


Isso é ótimo, mas define sempre %ERRORLEVEL%como diferente de zero. Você pode corrigir esse problema anexando um noop || cd., mas isso sempre define o erro como 0, que pode não ser o que você deseja se o "toque" falhar.
Keith Russell

5

Nenhum comando - typenem echo- é necessário para emular o comando 'touch' do Unix / Mac OS X em um terminal do Windows Powershell. Basta usar a seguinte abreviação:

$null > filename

Isso criará um arquivo vazio chamado 'filename' no seu local atual. Use qualquer extensão de nome de arquivo que você possa precisar, por exemplo, '.txt'.

Fonte: /superuser/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell (consulte os comentários)


1
parece que você perdeuecho
sabithpocker

@sabithpocker no cmd do Windows, $ null não existe e, como não existe, não produz saída. Você $null > filenameenvia essa saída vazia para o nome do arquivo (se você perceber meu desvio).
Keldon Alleyne

1
@sabithpocker No Windows Powershell, ele funciona sem echoNo terminal da linha de comando padrão (cmd) você precisa echo. Desculpe pela confusão.
Oliver Schafeld

@OliverSchafeld e Keldon Obrigado pela explicação.
sabithpocker

1
Isso adiciona uma lista técnica ao arquivo.
kayleeFrye_onDeck

3

Você também pode usar copy con [filename] em uma janela de comando do Windows (cmd.exe):

C:\copy con yourfile.txt [enter]
C:\CTRL + Z [enter] //hold CTRL key & press "Z" then press Enter key.
^Z
    1 Files Copied.

Isso criará um arquivo nomeado yourfile.txtno diretório local.


3

como mencionado

echo >> index.html

pode ser qualquer arquivo, com qualquer extensão, então faça

notepad index.html

isso abrirá seu arquivo no editor de bloco de notas


3

Eu uso cmder(um emulador de linha de comando)

Ele permite que você execute todos os comandos do Linux dentro de uma máquina Windows.

Pode ser baixado em https://cmder.net/

Eu realmente gosto


1
o que há com o aviso "Publicador desconhecido" quando tento abrir o Cmder no win10? Vadio.
Chris22

2

Supondo que o arquivo exista e você só precisa atualizar o carimbo de data / hora.

type test.c > test.c.bkp && type test.c.bkp > test.c && del test.c.bkp

2

No terminal do Visual Code Studio no Windows 10, foi o que funcionou para criar um novo arquivo:

type > hello.js
echo > orange.js
ni > peach.js

1

Se você tem o Cygwin instalado no seu PC, você pode simplesmente usar o executável fornecido para o touch (também via prompt de comando do Windows):

C:\cygwin64\bin\touch.exe <file_path>


-1

Sim, você pode usar o Node for Touch, eu apenas uso isso e está funcionando bem no Windows Cmd ou gitbash

insira a descrição da imagem aqui


Não reduzi o voto, mas vou explicar por que provavelmente foi. Esta pergunta foi marcada com [cmd]e implica que o OP deseja uma resposta pronta para o CMD, o que significa que não há utilitários de linha de comando que não sejam fornecidos com uma instalação padrão do Windows. Isso excluirá praticamente todas as linguagens de script, mesmo as linguagens de script internas do Windows, como CScript, WScript e PowerShell. O ponto não é que ele funcione no ambiente do CMD, mas que seja possível para qualquer pessoa com acesso ao CMD, sem incluir problemas de permissão.
kayleeFrye_onDeck
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.