How can I create an empty file at the DOS/Windows command-line?
I tried:
copy nul > file.txt
But it always displays that a file was copied.
Is there another method in the standard cmd?
It should be a method that does not require the touch command from Cygwin or any other nonstandard commands. The command needs to run from a script, so keystrokes cannot be used.
Without redirection, Luc Vu or Erik Konstantopoulos point out to:
copy NUL EMptyFile.txt
copy /b NUL EmptyFile.txt
"How to create empty text file from a batch file?" (2008) also points to:
type NUL > EmptyFile.txt
# also
echo. 2>EmptyFile.txt
copy nul file.txt > nul # also in qid's answer below
REM. > empty.file
fsutil file createnew file.cmd 0 # to create a file on a mapped drive
Nomad mentions an original one:
C:\Users\VonC\prog\tests>aaaa > empty_file
'aaaa' is not recognized as an internal or external command, operable program or batch file.
C:\Users\VonC\prog\tests>dir
Folder C:\Users\VonC\prog\tests
27/11/2013 10:40 <REP> .
27/11/2013 10:40 <REP> ..
27/11/2013 10:40 0 empty_file
In the same spirit, Samuel suggests in the comments:
the shortest one I use is basically the one by Nomad:
.>out.txt
It does give an error:
'.' is not recognized as an internal or external command
But this error is on stderr. And >
only redirects stdout, where nothing have been produced.
Hence the creation of an empty file.
The error message can be disregarded here. Or, as in Rain's answer, redirected to NUL
:
.>out.txt 2>NUL
(Original answer, November 2009)
echo.>filename
(echo ""
would actually put "" in the file! And echo
without the '.' would put "Command ECHO activated
" in the file...)
Note: the resulting file is not empty but includes a return line sequence: 2 bytes.
This discussion points to a true batch solution for a real empty file:
<nul (set/p z=) >filename
dir filename
11/09/2009 19:45 0 filename
1 file(s) 0 bytes
The "
Since here the "string to the right of the equal sign" is empty... the result is an empty file.
The difference with
The dir command should indicate the file size as 11 bytes: "helloworld!".
cd. > filename
(which is mentioned in Patrick Cuff's answer and does also produce a 0-byte-length file) is that this "bit of redirection" (the <nul...
trick) can be used to echo lines without any CR:
<nul (set/p z=hello) >out.txt
<nul (set/p z= world!) >>out.txt
dir out.txt
Try this:
type NUL > 1.txt
this will definitely create an empty file.
Here's another way:
cd . > filename
cd. > filename
is not work for me instead of cd > filename
works!
cd . > filename.extension
Meaning you need a space between cd
and .
If you really want a totally empty file, without any output to stdout, you can cheat a little:
copy nul file.txt > nul
Just redirect stdout to nul, and the output from copy disappears.
type nul>file
would be another way.
Open file:
type file.txt
New file:
Way 1: type nul > file.txt
Way 2: echo This is a sample text file > sample.txt
Way 3: notepad myfile.txt
Edit content:
notepad file.txt
Copy
copy file1.txt file1Copy.txt
Rename
rename file1.txt file1_rename.txt
Delete file:
del file.txt
call>file.txt
This is the cleanest way I know.
ZZ
be used instead of call
(not that it is less obscure)? - like Nomad's answer.
call && echo test
or call || echo test
. The and/or is based on the errorlevel of the previous command. Furthermore, the answer you referenced suggesting it is a better solution, is very dangerous. as others have already noted in the comments on that answer, depending on a command not existing is terrible, because if it does exist you just ran it with no clue what it does, potentially with more permissions than it should have.
echo "" > filename
I believe this works on Windows/DOS, but my last hands-on experience with either is quite a while ago. I do know for a fact that it works on basically any POSIX compliant OS.
On the Windows command-line, one way would be to use fsutil:
fsutil file createnew <filename> <size>
An example:
fsutil file createnew myEmptyFile.txt 0
Below is for *nix command-line.
touch filename
This command changes your modified date of a file or creates it if file is not found.
> filename
, which can also be used to truncate an existing file.
fsutil
needs administrative privileges. That's a bit much to ask for simply creating an empty file ...
You can write your own touch.
//touch.cpp
#include <fstream>
#include <iostream>
int main(int argc, char ** argv;)
{
if(argc !=2)
{
std::cerr << "Must supply a filename as argument" << endl;
return 1;
}
std::ofstream foo(argv[1]);
foo.close();
return 0;
}
cd > filename.cfg
worked when creating a file in C:/Program Files where you don't have the access to create files directly.
For creating any type of file you can use the following code
type nul > (file_name).(file_type)
For example, if you want to create a text file then
type nul > demo.txt
If you want to create a JavaScript file then
type nul > demo.js
You can create an empty file with
'' > newfile.txt
Navigate to the directory and type the above command in a PowerShell window.
Note that this will not work on the Windows command prompt.
Yet another method that creates a zero byte file:
break > "file.txt"
break
is an unknown command, only resulting in outputting to standard error? Or something else?
copy con SomeFile.txt
Enter
Ctrl + Z and Enter.
Use copy > your_file_name.extension
in command prompt like
P:\excecise> copy > Sample.txt
type nul > filename
will create a new empty file.
Also copy nul filename
works without redirecting (more obvious solution).
You could also use:
echo. 2>foo
The debug output for echo.
will almost definitely be empty.
Try this :abc > myFile.txt
First, it will create a file with name myFile.txt
in present working directory (in command prompt). Then it will run the command abc
which is not a valid command. In this way, you have gotten a new empty file with the name myFile.txt
.
abc
was in the path and was a convenience function for formatting all the drives except the installation directory.
This worked for me,
echo > file.extension
Here's another way I found today. I got ideas from other answers, but it worked:
sometext > filename.extension
For example,
xyz > emptyfile.txt //this would create an empty zero byte text file
abc > filename.mp4 //this would create an zero byte MP4 video media file
This would show an error message in the command prompt that,
xyz
is not as an internal or external command, operable program or batch file.
But the weird thing I found was the file is being created in the directory even if the command is not a standard Windows command.
You can use the old command
copy con file_name.ext
Don't type anything. Just press F6 to save it. However, it will print "File copied", but when you open the file, it will be empty.
con
some reserved thingamabob? Can you elaborate? Please respond by editing your answer, not here in comments (without "Edit:", "Update:", or similar - the answer should appear as if it was written today).
. >> file.txt
>> appends standard output into a file
. is just a wrong command to pass the empty standard output to >>
However, you'll see standard error's output in the CMD
:
'.' is not recognized as an internal or external command, operable program or batch file.
You can suppress this error message (if you want) by redirecting standard error to NUL
.
. >> file.txt 2> nul
I read many threads but it is not the shortest way.
Please use command:
>copy /b NUL empty_file.txt
>
necessary (not a rhetorical question)?
Try this:
echo $null >> filename
See: Equivalent of Linux touch
to create an empty file with PowerShell
On Windows
I tried doing this
echo off > fff1.txt
And it created a file named fff1.txt with a file size of 0 KB.
I didn't find any commands other than this that could create a empty file.
Note: You have to be in the directory you wish to create the file.
Create a bat file with content echo '' > %1 (name the file as touch.bat).
Add the folder to the PATH environment variable.
You can use touch to create files. (for example: touch temp.txt creates the temp.txt file)
Check this article for more information.
Yet another way:
copy nul 2> empty_file.txt
I have just tried in Windows:
copy con file.txt
Then press the Enter key. Then press Ctrl + Z and Enter.
And it worked for me.
For Ubuntu, usually I am creating a file using the vi
command
vi file.txt
It will open the file. Then press the Esc key. Then type :wp and press the Enter key. It will create a new file with empty data.
Here is yet another way:
rem/ > file.ext
The slash /
is mandatory; without it the redirection part is commented out by rem
.
echo
nothing into a file adds a line break, using NUL
seems to fill up a file endlessly, and if you try executing a nonexistent command, DOSBox will redirects the actual OS response on that to the text file.
There are also other easy ways to create files.
For example, you can create file and open it with notepad from cmd
notepad newFile.txt
This will prompt you that there is no such file and if you want to create it as a new file.
You can create any kind of file like this.
For example,
notepad newFile.js
OR
notepad newFile.py
Not only Notepad, you can also use other apps to do so. E.g, you can use Visual Studio Code to create and open new files.
For example,
code newFile.py
This will create a new Python file and open it in vs code (if you have vs code installed).
You can also create other types of files with this method also.
First create your file so that it exists:
echo . > myfile.txt
Then overwrite the created file with an empty version using the copy
command:
copy /y nul myfile.txt
Success story sharing
echo.>filename
because it will include the space as well as the newline character.rem
command avoids creating a file with an empty line in it.>
redirect stdout only toout.txt
. Hence the creation of an empty file. You can disregard the error message in this context.