645

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.

3
  • 4
    Duplicate: stackoverflow.com/questions/210201, "How to create empty text file from a batch file?". (But, IMHO, the answers are better here.) Jan 25, 2010 at 12:11
  • Yes, the command copy nul > file.txt is created having the text "1 file(s) copied." Empty file is not created. Sep 10, 2015 at 12:19
  • MSDos will delete any 0 byte files that you try to copy. Windows doesn't.
    – user12431753
    Feb 10, 2020 at 7:06

35 Answers 35

716

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 "<nul" pipes a nul response to the set/p command, which will cause the variable used to remain unchanged. As usual with set/p, the string to the right of the equal sign is displayed as a prompt with no CRLF.

Since here the "string to the right of the equal sign" is empty... the result is an empty file.


The difference with 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

The dir command should indicate the file size as 11 bytes: "helloworld!".

10
  • 2
    you'd actually want echo.>filename because it will include the space as well as the newline character.
    – Agent_9191
    Nov 9, 2009 at 18:27
  • 1
    Using the rem command avoids creating a file with an empty line in it. Nov 9, 2009 at 18:27
  • @Agent_9191: true, I have updated my answer. @Greg: not sure what you mean: rem>filename produces the same result (2 bytes)
    – VonC
    Nov 9, 2009 at 18:33
  • 3
    Noufal Ibrahim: don't let this fool you; just see the next answer which has a much easier and equally working solution. What's done here is partially wrong in the first case (not empty but contains a line break) and way overcomplicated in the second one.
    – Joey
    Jan 13, 2010 at 0:07
  • 2
    @barlop Yes: that is the point: it triggers some error message on stderr, but nothing (empty string) on stdout. And > redirect stdout only to out.txt. Hence the creation of an empty file. You can disregard the error message in this context.
    – VonC
    Jul 22, 2017 at 16:08
308

Try this:

type NUL > 1.txt

this will definitely create an empty file.

1
  • This adds "NUL is ./NUL" to the file
    – dshgna
    Sep 11, 2015 at 10:26
196

Here's another way:

cd . > filename
5
  • 4
    "cd. > filename" creates empty file else you will have filepath printed in your newly created file using "cd > filename" command.
    – niketan
    Aug 7, 2017 at 10:11
  • 12
    Use this: cd . > filename.extension Meaning you need a space between cd and .
    – AIon
    Feb 20, 2018 at 19:55
  • 1
    Finally an option that didn't give me an ugly error! I cannot believe that there is not a simple command to create a file in the Windows. How did they miss that?
    – dmikester1
    Nov 3, 2023 at 16:02
  • 1
    This is the easiest answer. Why isn't it checked? Nov 14, 2023 at 23:58
  • Can anybody explain how this trick actually works under the hood? Why changing to the current folder does not produce any output? Dec 3, 2023 at 9:35
83

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.

2
  • 2
    It fails if the file.txt exists.
    – Grendler
    Nov 9, 2009 at 19:01
  • 6
    Failing if the file exists is good behavior as I understand the question.
    – wallyk
    Nov 13, 2009 at 0:44
69

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 <press Enter>

Edit content:

notepad file.txt

Copy

copy file1.txt file1_copy.txt

Rename

  • Way 1: rename file1.txt file1_rename.txt
  • Way 2: ren file1.txt file1_rename.txt
  • Way 3: move file1.txt ./file1_rename.txt

Move file:

move file1.txt path/where/to/move/

Also you can rename file while moving:

move file1.txt path/where/to/move/file1_rename.txt

Delete file:

del file.txt
1
  • more > filename.txt than CTRL + C.
    – SidPro
    Apr 21, 2021 at 7:07
51
call>file.txt

This is the cleanest way I know.

5
  • 2
    What is it about this that is "clean"? Jan 6, 2016 at 2:57
  • 9
    it outputs nothing to the file while being easy to remember and use.
    – cure
    Sep 21, 2016 at 23:11
  • How does it work? It is calling a script with an empty name(?) What is the result and possible side effects (e.g., to standard error)? Isn't there a less obscure way? Couldn't ZZ be used instead of call (not that it is less obscure)? - like Nomad's answer. May 28, 2021 at 19:25
  • @PeterMortensen It makes a call to a nonexistent subroutine (because there can't be an un-named subroutine). It doesn't cause an error, which you can test by running 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.
    – cure
    Jan 26, 2022 at 7:20
  • @PeterMortensen bottom line, nomad's answer is dangerous, call has zero side effects and doesn't raise an error, and if you want a less obscure way, maybe use powershell or python or literally anything else? and maybe don't dig through obscure answers from nearly a decade ago about something that was archaic even back then.
    – cure
    Jan 26, 2022 at 7:23
46
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.

5
  • 2
    Apperantly, VonC's answer is better than mine, so please upvote that instead.
    – Kris
    Nov 9, 2009 at 18:23
  • 6
    Unfortunately: echo "" displays double quotes and they are written to the file when stream is redirected to it. The same happens with just: echo > filename because it writes ECHO is off/on to the file as well.
    – Grendler
    Nov 9, 2009 at 18:24
  • maybe you could put "@echo off" on the line before creating the file to circumvent that?
    – Kris
    Nov 9, 2009 at 18:27
  • short and simple. thanks Nov 25, 2022 at 7:53
  • In Windows/DOS echo "" > file.txt writes two double quotes into the file and also some not printable characters (20 and 0D) and then the newline character (0A). In UNIX systems this command creates not empty file with the newline character (0A). So echo "" > file.txt doesn't create an empty file. Use type nul > file.txt in Windows and touch file.txt in UNIX. Dec 28, 2023 at 12:57
37

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.

5
  • Unfortunately, the question specifically states, "Without the touch command from Cygwin."
    – qid
    Nov 9, 2009 at 18:29
  • 3
    There exist non-Cygwin implementations of the touch command: unxutils.sourceforge.net is good. Nov 9, 2009 at 18:36
  • In *nix, I'm personally partial to a simple > filename, which can also be used to truncate an existing file. Jan 12, 2010 at 17:54
  • fsutil needs administrative privileges. That's a bit much to ask for simply creating an empty file ...
    – Joey
    Jan 13, 2010 at 0:03
  • @Joey Aren't all these commands a bit much to create an empty file? Even the one below with 120 points is a lot when you are used to touch.
    – johnny
    Mar 18, 2015 at 18:53
15

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;
}
15

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
14
cd > filename.cfg 

worked when creating a file in C:/Program Files where you don't have the access to create files directly.

1
  • What is supposed to happen? How is it circumventing basic security? Can you elaborate? Preferably, by editing your answer, not here in comments (without "Edit:", "Update:", or similar - the answer should appear as if it was written today). May 28, 2021 at 20:14
9

copy con SomeFile.txt Enter

Ctrl + Z and Enter.

1
  • 1
    I precised the question that the command will run from script so unfortunately any keyboard interaction does not work. Thank you anyway.
    – Grendler
    Nov 9, 2009 at 18:35
9

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.

7

Yet another method that creates a zero byte file:

break > "file.txt"
1
7

type nul > filename will create a new empty file.

Also copy nul filename works without redirecting (more obvious solution).

1
  • At least it is not an obscure solution, like many of the other answers. May 28, 2021 at 19:41
6

You could also use:

echo. 2>foo

The debug output for echo. will almost definitely be empty.

6

Use copy > your_file_name.extension in command prompt like

P:\excecise> copy > Sample.txt
1
6

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.

3
  • How does this work? Why does it work? Is 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). May 28, 2021 at 20:18
  • As I wrote, dun type anything, just press F6 May 29, 2021 at 7:43
  • This was one of the original ways to do this, because like Peter asked, yes, Con is a reserved word. If you want to test it, try changing a directory name to CON and see how it is not pleased with your life choice. Sep 2, 2022 at 14:29
6
. >> 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
0
5

I read many threads but it is not the shortest way.

Please use command:

>copy /b NUL empty_file.txt

2
  • Why does it work? What is the theory of operation? For example, why is the leading > necessary (not a rhetorical question)? May 28, 2021 at 19:43
  • > at begin of line is common to show you type text after in command line only. This copy NUL file (which contain 0 bytes). so it should work.
    – suhao399
    Jun 28, 2021 at 7:50
5

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.

2
  • 1
    There are more than one "handles" that console applications can read/write to. The standard ones are: (0) STDIN, (1) STDOUT, and (2) STDERR. I believe the reason your trick works here is because all of the output is going to the error handle but you're only directing STDOUT to the file. Try doing: "xyz > emptyfile.txt 2>&1" to redirect STDERR to whatever STDOUT is using, which happens to be redirecting to "emptyfile.txt".You should see the error message inside that file now. Apr 27, 2017 at 15:35
  • 1
    The first one will not result in an empty file. It will contain 13 characters (11 ordinary characters + CR + LF): "ECHO is on." May 30, 2021 at 15:37
5

Try this:

echo $null >> filename 

See: Equivalent of Linux touch to create an empty file with PowerShell

5

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.

3
  • 3
    don't forget to echo on after creating file if you need.
    – QMaster
    Nov 14, 2018 at 21:24
  • I am not sure about why it does so, but I guess that you should do "echo on" after entering the above command. Jun 4, 2020 at 16:06
  • 2
    Re "I didn't find any commands other than this that could create a empty file.": So you didn't look at any of the previous 30+ answers here? May 28, 2021 at 20:10
5
  • 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.

5

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.

1
  • Already mentioned several times and discarded each time because it needs user intervention.
    – Stephan
    Feb 20, 2021 at 8:02
4

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.

1
  • 5
    This could be very wrong if abc was in the path and was a convenience function for formatting all the drives except the installation directory. Dec 31, 2013 at 8:14
3

Yet another way:

copy nul 2> empty_file.txt
1
  • Why does it work? What is the theory of operation? May 28, 2021 at 19:45
3

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.

1
  • The question said "The command needs to run from a script, so keystrokes cannot be used.". May 28, 2021 at 19:58
2

Here is yet another way:

rem/ > file.ext

The slash / is mandatory; without it the redirection part is commented out by rem.

1
  • This actually works in DOSBox, unlike many of the other solutions here. Trying to 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.
    – Nyerguds
    Jul 19, 2021 at 19:07
1

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.