Odpowiednik „dotyku” w systemie Windows (tzn. Sposób utworzenia pliku index.html w pliku node.js)

195

Na komputerze z systemem Windows pojawia się ten błąd

„dotyk” nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, program operacyjny lub plik wsadowy.

kiedy wykonam instrukcje, aby to zrobić:

touch index.html app.js style.css

Czy istnieje odpowiednik systemu Windows dotyczący „dotyku”? Czy muszę ręcznie tworzyć te pliki (i modyfikować je, aby zmienić znacznik czasu), aby zaimplementować tego rodzaju polecenia? To nie wydaje się bardzo ... węzłowe ...

CuriousAboutNode
źródło
5
A proste wyszukiwania Google pokazuje dużą ilością okien wdrożeń touch. Inna dyskusja tutaj: superuser.com/questions/10426/... a biblioteka Cygwin to wspólny zestaw narzędzi poleceń Uniksa w systemie Windows.
jfriend00
4
Możliwe duplikaty tego pytania: stackoverflow.com/questions/26343974/…
Sturgeon z tworzywa sztucznego
1
Proszę przejść do odpowiedzi Raghuveer jest bezpośrednio jeśli już wylądował tutaj podczas korzystania PowerShell.
RBT

Odpowiedzi:

279

w oknie typu cmd:

type nul > your_file.txt

Spowoduje to utworzenie 0 bajtów w pliku twoj_plik.txt.

Innym sposobem na to jest użycie polecenia echo :

echo.> your_file.txt

Echo. - utworzy plik z jedną pustą linią.

Zmieniano 01.01.2019:

Jeśli chcesz zachować zawartość pliku, użyj >> zamiast>

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

Przykład

type nul >> your_file.txt

Edytowano 2020-04-07

Możesz także użyć polecenia połączenia .

Wywołuje jeden program wsadowy z drugiego bez zatrzymywania nadrzędnego programu wsadowego. Polecenie połączenia akceptuje etykiety jako cel połączenia.

Przykład:

call >> your_file.txt
Vlad Bezden
źródło
2
w systemie Windows 7 pierwsza opcja powoduje przerażające okno dialogowe, a następnie widać access deniedw konsoli. Druga opcja działa dobrze!
Dekodowano
13
Odpowiedź jest błędna, działa tylko wtedy, gdy plik nie istnieje. Jeśli plik istnieje, użycie >>pierwszego nic nie robi, drugi dodaje wiersz na końcu pliku. Prawidłowa odpowiedź to superuser.com/questions/10426/…
stenci
3
@stenci - Właśnie wypróbowałem go na nieistniejącym pliku i działało dobrze. Utworzono plik w porządku. Może brakuje Ci uprawnień administratora?
dcp
2
@stenci ten link superużytkownika jest świetny. Powinieneś opublikować to jako odpowiedź.
Denise Skidmore,
@DeniseSkidmore Dzięki, dodałem odpowiedź. Jest głęboko, a ludzie prawdopodobnie przeczytają mój komentarz do tej odpowiedzi niż mojej odpowiedzi, ale teraz już jest.
stenci
67

Windows nie zawiera natywnie touchpolecenia.

Możesz użyć dowolnej z dostępnych wersji publicznych lub możesz użyć własnej wersji. Zapisz ten kod jako touch.cmdi umieść go gdzieś na swojej ścieżce

@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

Będzie iterował listę argumentów i dla każdego elementu, jeśli istnieje, zaktualizuj znacznik czasu pliku, w przeciwnym razie utwórz go.

MC ND
źródło
ten jest najlepszy, działa dokładnie zgodnie z oczekiwaniami ... inne rozwiązania tutaj działają, ale zostawiaj teksty ostrzeżeń / błędów, IDK, jeśli to wyłącznie dla mnie.
Shakil
35

Możesz użyć tego polecenia: ECHO >> nazwa_pliku.txt

utworzy plik z danym rozszerzeniem w bieżącym folderze.

AKTUALIZACJA:

dla pustego pliku użyj: skopiuj NUL filename.txt

Aaron Clark
źródło
8
Jeszcze lepiej type NUL > filename(tworzy plik 0 bajtów)
krzemian
23
Podobnie jak w przypadku dotyku, nie spowoduje to zastąpienia pliku, jeśli istnieje:type NUL >> filename
henn
3
To świetny sposób na dodanie „ECHO jest włączony”. do twojego pliku.
ripvlan,
4
to nie aktualizuje sygnatury czasowej istniejących plików.
Denise Skidmore,
1
Myślę, że Denise Skidmore odpowiada na hennę, a nie na OP. (Drugi komentarz.)
Keith Russell
28

Odpowiedź jest błędna, działa tylko wtedy, gdy plik nie istnieje. Jeśli plik istnieje, użycie pierwszego nic nie robi, drugi dodaje wiersz na końcu pliku.

Poprawna odpowiedź to:

copy /b filename.ext +,,

Znalazłem to tutaj: /superuser/10426/windows-equivalent-of-the-linux-command-touch/764721#764721

stenci
źródło
1
Ta odpowiedź nie działa, gdy plik nie istnieje. (CMD powoduje błąd.)
Keith Russell,
15

Dziwi mnie, jak wiele odpowiedzi tutaj jest po prostu błędnych . Echo niczego do pliku wypełni plik czymś podobnym ECHO is ON, a próba echa $nuldo pliku dosłownie umieści $nulgo w pliku. Dodatkowo w programie PowerShell echo $nullpliku nie spowoduje utworzenia pliku 0kb, ale coś zakodowanego jako UCS-2 LE BOM, co może być nieporządne, jeśli trzeba się upewnić, że pliki nie mają znaku kolejności bajtów.

Po przetestowaniu wszystkich odpowiedzi tutaj i powołaniu się na podobne, mogę zagwarantować, że będą one działać dla powłoki konsoli. Po prostu zmień FileName.FileExtensionpełną lub względną ścieżkę pliku, który chcesz touch; dzięki Keith Russell za COPY NUL FILE.EXTaktualizację:

CMD z aktualizacjami sygnatur czasowych

copy NUL FileName.FileExtension

Spowoduje to utworzenie nowego pliku o nazwie niezależnie od tego, który umieścisz zamiast o FileName.FileExtensionrozmiarze 0 bajtów. Jeśli plik już istnieje, po prostu skopiuje się w miejscu, aby zaktualizować znacznik czasu. Powiedziałbym, że jest to bardziej obejście niż funkcjonalność 1: 1, touchale nie znam żadnych wbudowanych narzędzi dla CMD, które mogłyby dokonać aktualizacji sygnatury czasowej pliku bez zmiany jakiejkolwiek innej jego zawartości.

CMD bez aktualizacji sygnatury czasowej

if not exist FileName.FileExtension copy NUL FileName.FileExtension

Powershell z aktualizacjami znaczników czasu

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

Tak, będzie działać w konsoli jako jednowarstwowy; nie ma potrzeby umieszczania go w pliku skryptu PowerShell.

PowerShell bez aktualizacji znaczników czasu

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

kayleeFrye_onDeck
źródło
1
Co z sytuacją, w której plik istnieje i chcesz zaktualizować znacznik czasu jego modyfikacji do bieżącego czasu? Nie rozumiem, jak te przykłady to osiągają.
RoG
2
Świetna obserwacja, RoG! Zaktualizowałem odpowiedź, aby rozwiązać ten problem :)
kayleeFrye_onDeck
To najlepsza odpowiedź. Jednak nadal będę go poprawiał, zastępując fsutil file CreateNew FileName.FileExtension 0go copy NUL Filename.FileExtension, ponieważ ten drugi jest krótszy i robi to samo.
Keith Russell,
@KeithRussell IIRC istniał konkretny powód, dla którego nie wykorzystałem copygo, fsutilale minęło już trochę czasu ... Jestem pewien, że tak właśnie dowiedziałem się o fsutilhaha! Spróbuję dowiedzieć się, dlaczego ...
kayleeFrye_onDeck
1
Nawet jeśli zachowują się tak samo, myślę, że przedwczesne jest stwierdzenie, że jedno jest lepsze, bez sprawdzania prędkości.
Keith Russell,
14

W wierszu polecenia użyj następującego polecenia:

fsutil file createnew filename  requiredSize

Informacje o parametrach w następujący sposób:

fsutil - Narzędzie systemu plików (uruchomiony plik wykonywalny)

plik - wyzwala akcję pliku

createnew - akcja do wykonania (utwórz nowy plik)

nazwa_pliku - byłaby dosłownie nazwą pliku

wymagany rozmiar - przydzieli rozmiar pliku w bajtach w utworzonym pliku

Ofer Haber
źródło
2
Konieczne jest wyjaśnienie, aby uznać to za przyzwoitą odpowiedź. Nie jest jasne, co oznaczają te pięć słów.
jfriend00
1
zadziałało dla mnie ... wymagany wymagany rozmiar jest dziwny ... polecenie po prostu wypełnia nowy plik tysiącami NULLs ... dziwne ... więc po prostu użyj 0 ... generuje błąd, jeśli pominiesz wymagany rozmiar .
dsdsdsdsd
1
ten commnad wymaga uprawnień administratora :(
ADJ
1
touch aktualizuje także znacznik czasu dla istniejących plików, a nie tylko tworzy nowe pliki.
Denise Skidmore,
1
touch to szybki sposób na zrobienie tego, chyba najbliższe byłoby echo lub typ, jak sądzę, chociaż jest to bardzo przydatne narzędzie do pisania skryptów i szeroko stosowane w WS16, kciuki w górę! docs.microsoft.com/en-us/windows-server/administration/…
Alan
10

W systemie Windows Power Shell można użyć następującego polecenia:

New-Item <filename.extension>

lub

New-Item <filename.extension> -type file

Uwaga: nowy element można zastąpić jego aliasem ni

Raghuveer
źródło
1
To jest prawdziwa odpowiedź w dzisiejszym świecie Windows, w którym PowerShell jest domyślnym programem powłoki poleceń.
RBT
nie jestem pewien, do jakiego systemu Windows się odwołujesz, właśnie zainstalowałem świeżego systemu Windows 10, a Powershell zdecydowanie nie jest domyślną powłoką. 'New-Item' is not recognized as an internal or external command
user5359531,
8

Możesz replikować funkcjonalność dotyku za pomocą następującego polecenia:

$>>filename

Powoduje to próbę uruchomienia programu o nazwie $, ale jeśli $nie istnieje (lub nie jest plikiem wykonywalnym, który generuje dane wyjściowe), wówczas dane wyjściowe nie są przez niego wytwarzane. Zasadniczo jest to włamanie do funkcjonalności, jednak pojawi się następujący komunikat o błędzie:

„$” nie jest rozpoznawane jako polecenie wewnętrzne lub zewnętrzne, program operacyjny lub plik wsadowy.

Jeśli nie chcesz wyświetlać komunikatu o błędzie, możesz wykonać jedną z dwóch czynności:

type nul >> filename

Lub:

$>>filename 2>nul

Do typeprób polecenie, aby wyświetlić zawartość nul, który nic nie robi, ale zwraca EOF (koniec pliku) podczas odczytu.

2>nulwysyła wyjście błędów (wyjście 2) do nul (co ignoruje wszystkie dane wejściowe po zapisaniu). Oczywiście drugie polecenie (z 2>nul) zostaje zwolnione przez to typepolecenie, ponieważ jest szybsze do pisania. Ale przynajmniej masz teraz opcję i wiedzę.

Keldon Alleyne
źródło
To jest świetne, ale %ERRORLEVEL%zawsze ustawia się na niezerowe. Możesz rozwiązać ten problem, dodając noop || cd., ale to zawsze ustawia błąd na 0, co może nie być tym, czego chcesz, jeśli „dotyk” nie powiedzie się.
Keith Russell,
5

Żadne polecenie - ani typeani echo- nie jest konieczne do emulacji polecenia „dotykowego” w systemach Unix / Mac OS X w terminalu Windows PowerShell. Po prostu użyj następującego skrótu:

$null > filename

Spowoduje to utworzenie pustego pliku o nazwie „nazwa pliku” w bieżącej lokalizacji. Użyj dowolnego potrzebnego rozszerzenia nazwy pliku, np. „.Txt”.

Źródło: /superuser/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell (patrz komentarze)

Oliver Schafeld
źródło
1
wygląda na to, że przegapiłeśecho
sabithpocker
@sabithpocker w Windows cmd, $ null nie istnieje, a ponieważ nie istnieje, nie wytwarza żadnych danych wyjściowych. Ty $null > filenamewysyła tę pustą wyjście do pliku (jeśli złapiesz o co mi chodzi).
Keldon Alleyne
1
@sabithpocker W Windows Powershell działa bez echoW standardowym terminalu wiersza poleceń (cmd), czego potrzebujesz echo. Przepraszam za zamieszanie.
Oliver Schafeld
@OliverSchafeld i Keldon Dziękujemy za wyjaśnienie.
sabithpocker
1
To dodaje BOM do pliku.
kayleeFrye_onDeck
3

Możesz także użyć copy con [nazwa pliku] w oknie poleceń systemu 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.

Spowoduje to utworzenie pliku o nazwie yourfile.txtw katalogu lokalnym.

delliottg
źródło
3

jak wspomniano

echo >> index.html

może to być dowolny plik z dowolnym rozszerzeniem

notepad index.html

spowoduje to otwarcie pliku w edytorze notatnika

Boris
źródło
3

Używam cmder(emulator wiersza poleceń)

Umożliwia uruchamianie wszystkich poleceń systemu Linux na komputerze z systemem Windows.

Można go pobrać ze strony https://cmder.net/

naprawdę to lubie

użytkownik1880531
źródło
1
co się dzieje z ostrzeżeniem „Nieznany wydawca”, gdy próbuję otworzyć Cmder w win10? Porażka.
Chris22
2

Zakładając, że plik istnieje i wystarczy zaktualizować znacznik czasu.

type test.c > test.c.bkp && type test.c.bkp > test.c && del test.c.bkp
Anoop Kumar Narayanan
źródło
2

Z terminalu Visual Code Studio na Windows 10, to działało dla mnie, aby utworzyć nowy plik:

type > hello.js
echo > orange.js
ni > peach.js
eimn
źródło
1

Jeśli masz Cygwin zainstalowany na komputerze, możesz po prostu użyć dostarczonego pliku wykonywalnego dla dotyku (również za pomocą wiersza poleceń systemu Windows):

C:\cygwin64\bin\touch.exe <file_path>
Uri Ziv
źródło
-1

Łatwo, przykład z plikiem txt

echo $null >> filename.txt
Thiago Maciel
źródło
Dodaje $nulldo pliku.
Tomáš Zato - Przywróć Monikę
-1

Tak, możesz użyć Node dla Touch Po prostu używam tego i działa dobrze w Windows Cmd lub gitbash

wprowadź opis zdjęcia tutaj

Asad Iftikhar
źródło
Nie głosowałem za tym, ale wyjaśnię, dlaczego tak było. To pytanie zostało oznaczone tagiem [cmd], co oznacza, że ​​OP chce odpowiedzi, która działa od razu po wyjęciu z pudełka dla CMD, co oznacza, że ​​nie ma narzędzi wiersza poleceń, które nie są zapakowane w domyślną instalację systemu Windows. Wyklucza to praktycznie wszystkie języki skryptowe, nawet wbudowane języki skryptowe Windows, takie jak CScript, WScript i PowerShell. Nie chodzi o to, że działa w środowisku CMD env, ale że jest to możliwe dla każdego, kto ma dostęp do CMD, nie uwzględniając problemów z uprawnieniami.
kayleeFrye_onDeck