Maak een leeg bestand op de opdrachtline in Windows (zoals de opdracht Linux Touch)

Op een Windows-machine krijg ik deze fout

‘touch’ wordt niet herkend als een intern of extern commando, operable programma of batchbestand.

Ik volgde deze instructies die linux-specifiek lijken, maar op een standaard Windows-opdrachtline het werkt niet als volgt:

touch index.html app.js style.css

Is er een Windows-equivalent van de opdracht ‘Touch’ van de Linux / Mac OS / UNIX-wereld? Moet ik deze bestanden met de hand maken (en wijzig ze om het tijdstempel te wijzigen) om dit soort opdracht te implementeren? Ik werk met knooppunt en dat lijkt niet erg … Node-ish …


1, Autoriteit 100%

Een eenvoudige manier om het aanraakopdracht te vervangen op een Windows-opdrachtregel zoals CMD zou zijn:

type nul > your_file.txt

Hiermee wordt 0 bytes gemaakt in de your_file.txt-bestand.

Dit zou ook een goede oplossing zijn om te gebruiken in Windows-batch-bestanden.

Een andere manier om het te doen is door het echo opdracht:

echo.> your_file.txt

echo. – maakt een bestand met één lege regel erin.


Als u de inhoud van het bestand gebruikt, gebruikt u >>in plaats van >

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

Voorbeeld

type nul >> your_file.txt

U kunt ook noemen commando .

noemt één batchprogramma van een ander zonder het bovenliggende batchprogramma te stoppen. De oproepopdracht accepteert etiketten als het doelwit van de oproep.

Voorbeeld:

call >> your_file.txt


Of zelfs als u het niet moeilijk wilt maken, kunt u Windows Subsysteem voor Linux gebruiken (WSL). Typ dan.

wsl touch

of

wsl touch textfilenametoedit.txt

Citaten zijn niet nodig.


2, Autoriteit 22%

Windows bevat niet native een touch-opdracht.

U kunt een van de beschikbare publieke versies gebruiken of u kunt uw eigen versie gebruiken. Sla deze code op als touch.cmden plaats het ergens in uw pad

@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

Het herhaalt over IT-argumentlijst, en voor elk element als het bestaat, update dan het bestand Tijdstempel, anders, maakt het.


3, Autoriteit 12%

U kunt deze opdracht gebruiken: ECHO & GT; & GT; filename.txt

Het maakt een bestand aan met de gegeven extensie in de huidige map.

update:

Voor een leeg bestandsgebruik: Kopieer Nul FileName.txt


4, Autoriteit 9%

Het antwoord is verkeerd, het werkt alleen wanneer het bestand niet bestaat. Als het bestand bestaat, doet het gebruik van de eerste niets, voegt de tweede een regel aan het einde van het bestand toe.

Het juiste antwoord is:

copy /b filename.ext +,,

Ik heb het hier gevonden: https://superuser. com/questions/10426/windows-equivalent-of-the-linux-command-touch/764721#764721


Antwoord 5, autoriteit 6%

In Windows Power Shell kunt u de volgende opdracht gebruiken:

New-Item <filename.extension>

of

New-Item <filename.extension> -type file

Opmerking: Nieuw itemkan worden vervangen door zijn alias ni


Antwoord 6, autoriteit 6%

Het verbaast me hoeveel antwoorden hier gewoon foutzijn. Als u niets in een bestand echoot, wordt het bestand gevuld met iets als ECHO is ON, en proberen $nulin een bestand te echoën, zal letterlijk $nulin het bestand. Bovendien, voor PowerShell, zal het echoën van $nullin een bestand niet echt een 0kb-bestand maken, maar iets dat is gecodeerd als UCS-2 LE BOM, wat rommelig kan worden als je dat nodig hebt om ervoor te zorgen dat uw bestanden geen byte-volgordemarkering hebben.

Nadat ik alle antwoorden hier heb getest en naar vergelijkbare antwoorden heb verwezen, kan ik garanderen dat deze per console-shell werken. Verander gewoon FileName.FileExtensionin het volledige of relatieve pad van het bestand dat je wilt touch; dank aan Keith Russellvoor de COPY NUL FILE.EXT-update:

CMD met tijdstempelupdates

copy NUL FileName.FileExtension

Hiermee wordt een nieuw bestand gemaakt met de naam wat je ook hebt geplaatst in plaats van FileName.FileExtensionmet een grootte van 0 bytes. Als het bestand al bestaat, zal het zichzelf in principe ter plaatse kopiëren om de tijdstempel bij te werken. Ik zou zeggen dat dit meer een tijdelijke oplossing is dan een 1:1-functionaliteit met touch, maar ik ken geen ingebouwde tools voor CMD die de tijdstempel van een bestand kunnen bijwerken zonder iets van zijn andere inhoud.

CMD zonder tijdstempelupdates

if not exist FileName.FileExtension copy NUL FileName.FileExtension

Powershell met tijdstempelupdates

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

Ja, het werkt in de console als een oneliner; geen vereiste om het in een PowerShell-scriptbestand te plaatsen.

PowerShell zonder tijdstempelupdates

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


Antwoord 7, autoriteit 5%

Gebruik de volgende opdracht op de uw opdrachtregel:

fsutil file createnew filename  requiredSize

De informatie over de parameters als volgt:

fsutil – Hulpprogramma voor bestandssysteem (het uitvoerbare bestand dat u gebruikt)

bestand – activeert een bestandsactie

createnew – de uit te voeren actie (maak een nieuw bestand)

bestandsnaam – zou letterlijk de naam van het bestand zijn

requiredSize – zou een bestandsgrootte in bytes toewijzen aan het gemaakte bestand


Antwoord 8, autoriteit 2%

Je kunt de functionaliteit van aanraking repliceren met de volgende opdracht:

$>>filename

Wat dit doet, is proberen een programma uit te voeren met de naam $, maar als $niet bestaat (of geen uitvoerbaar bestand is dat uitvoer produceert), wordt er geen uitvoer geproduceerd erdoor. Het is in wezen een hack op de functionaliteit, maar u krijgt de volgende foutmelding:

‘$’ wordt niet herkend als een interne of externe opdracht,
bruikbaar programma of batchbestand.

Als u de foutmelding niet wilt, kunt u twee dingen doen:

type nul >> filename

Of:

$>>filename 2>nul

Het typecommando probeert de inhoud van nul weer te geven, wat niets anders doet dan een EOF (einde van bestand) teruggeven wanneer het wordt gelezen.

2>nulstuurt error-output (output 2) naar nul (die alle input negeert wanneer er naar geschreven wordt). Het is duidelijk dat het tweede commando (met 2>nul) overbodig wordt gemaakt door het typecommando omdat het sneller is om te typen. Maar je hebt nu tenminste de mogelijkheid en de kennis.


Antwoord 9

Geen commando – noch typenoch echo– is nodig om het ‘touch’-commando van Unix/Mac OS X te emuleren in een Windows Powershell-terminal. Gebruik gewoon de volgende afkorting:

$null > filename

Hiermee wordt een leeg bestand met de naam ‘bestandsnaam’ gemaakt op uw huidige locatie. Gebruik elke bestandsnaamextensie die u nodig heeft, b.v. ‘.txt’.

Bron: https://superuser .com/questions/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell(zie opmerkingen)


Antwoord 10

zoals vermeld

echo >> index.html

het kan elk bestand zijn, met elke extensie
doe dan

notepad index.html

hiermee wordt uw bestand geopend in de kladblokeditor


Antwoord 11

Vanuit de Terminal van Visual Code Studio op Windows 10 werkte dit voor mij om een nieuw bestand te maken:

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

Antwoord 12

Je kunt ook copy con [bestandsnaam]gebruiken in een Windows-opdrachtvenster (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.

Hiermee wordt een bestand gemaakt met de naam yourfile.txtin de lokale map.


Antwoord 13

Ik gebruik cmder(een commandoregelemulator)

Hiermee kun je alle Linux-commando’s op een Windows-machine uitvoeren.

Het kan worden gedownload van https://cmder.net/

Ik vind het echt leuk


Antwoord 14

Voor een zeer eenvoudige versie van touchdie meestal zou worden gebruikt om een 0 byte-bestand in de huidige map te maken, zou een alternatief het maken van een touch.bat-bestand zijn en ofwel het toevoegen aan de %Path%of het kopiëren naar de C:\Windows\System32directory, zoals zo:

touch.bat

@echo off
powershell New-Item %* -ItemType file

Een enkel bestand maken

C:\Users\UwNaam\Desktop>touch a.txt
  Directory: C:\Gebruikers\UwNaam\Desktop
Modus LastWriteTime Lengte Naam
---- ------------- ------ ----
-a---- 2020-10-14 22:28 0 a.txt

Meerdere bestanden maken

C:\Users\UwNaam\Desktop>touch "b.txt,c.txt"
  Directory: C:\Gebruikers\UwNaam\Desktop
Modus LastWriteTime Lengte Naam
---- ------------- ------ ----
-a---- 2020-10-14 10:52 PM 0 b.txt
-a---- 2020-10-14 22:52 0 c.txt

Ook

  • Werkt zowel met PowerShell als de opdrachtprompt.
  • Werkt met bestaande submappen.
  • Maakt geen bestand aan als het al bestaat:
New-Item : Het bestand 'C:\Users\YourName\Desktop\a.txt' bestaat al.
  • Maakt voor meerdere bestanden alleen de bestanden aan die niet bestaan.
    • Accepteert een door komma’s gescheiden lijst van bestandsnamen zonder spaties of tussen aanhalingstekens als spaties nodig zijn:
C:\Users\UwNaam\Desktop>touch d.txt,e.txt,f.txt
C:\Users\UwNaam\Desktop>touch "g.txt, 'naam met spaties.txt'"

Antwoord 15

installeer npm op uw computer

voer de onderstaande opdracht uit in je opdrachtprompt.

npm install touch-cli -g

u kunt nu touch cmd gebruiken.


Antwoord 16

Ervan uitgaande dat het bestand bestaat en u alleen de tijdstempel hoeft bij te werken.

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

Antwoord 17

Als u Cygwinop uw pc heeft geïnstalleerd, kunt u eenvoudig het meegeleverde uitvoerbare bestand gebruiken voor touch(ook via de opdrachtprompt van Windows):

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

18

Eenvoudig, voorbeeld met TXT-bestand

echo $null >> filename.txt

19

Ja, u kunt knooppunt gebruiken voor aanraking Ik gebruik dat gewoon en het werkt allemaal prima in Windows CMD of Gitbash

Other episodes