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.cmd
en 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 $nul
in een bestand te echoën, zal letterlijk $nul
in het bestand. Bovendien, voor PowerShell, zal het echoën van $null
in 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.FileExtension
in 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.FileExtension
met 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 type
commando probeert de inhoud van nul weer te geven, wat niets anders doet dan een EOF (einde van bestand) teruggeven wanneer het wordt gelezen.
2>nul
stuurt 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 type
commando omdat het sneller is om te typen. Maar je hebt nu tenminste de mogelijkheid en de kennis.
Antwoord 9
Geen commando – noch type
noch 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.txt
in 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 touch
die 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\System32
directory, 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