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 ...


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



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

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.


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


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


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}


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


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


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ę.


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)


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.


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


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


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

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

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>


-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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.