Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

doesn't create a file.

(I believe the same is true if you try to create a file programmatically, but I haven't tried it.)

In PowerShell, you want $null :

echo 1 > $null
                I just looked at this again, and I retract my original statement. I was doing the write in code, and the error was getting swallowed.  I'm deleting it so no one accidentally takes it as the truth.
– Jim Hunziker
                Jul 22, 2010 at 19:30
                For people looking for Unix "special" files under Windows: here are /dev/random and /dev/zero device drivers for Win32.
– ulidtko
                Dec 19, 2014 at 11:06
                @CoDEmanX: That's not my experience. Writing to the console - or even a file - can take a significant chunk of time. I've just tested it with a program writing "Hello there" to stdout 10000000 times. Redirecting to a file (on an SSD) took 18 seconds. Redirecting to NUL took 4 seconds. Not redirecting at all made me give up through a lack of patience after a while...
– Jon Skeet
                Aug 24, 2015 at 5:49
                I've learned back in Win95 times that you should write a colon after special device names, so NUL: (and CON:, PRN:, ...), It is mostly a matter of style and shows clearly that NUL: is a special object and not a file called NUL. Also,it is possible with a special API to make a file called NUL (see one of the answers). I dream that maybe one day, if everybody uses the colon by convention, we will be able to deprecate the dreaded special device names :-)
– jdm
                Dec 6, 2016 at 13:47

According to this message on the GCC mailing list, you can use the file "nul" instead of /dev/null:

#include <stdio.h>
int main ()
    FILE* outfile = fopen ("/dev/null", "w");
    if (outfile == NULL)
        fputs ("could not open '/dev/null'", stderr);
    outfile = fopen ("nul", "w");
    if (outfile == NULL)
        fputs ("could not open 'nul'", stderr);
    return 0;

(Credits to Danny for this code; copy-pasted from his message.)

You can also use this special "nul" file through redirection.

Ah, so this explains why, if you create a C:\dev directory in Windows, and you use a lot of GNU utilities, you'll eventually acquire a mysterious file called null in that directory. – Klitos Kyriacou Dec 29, 2018 at 9:39

NUL in Windows seems to be actually a virtual path in any folder. Just like .., . in any filesystem.

Use any folder followed with NUL will work.

Example,

echo 1 > nul
echo 1 > c:\nul
echo 1 > c:\users\nul
echo 1 > c:\windows\nul

have the same effect as /dev/null on Linux.

This was tested on Windows 7, 64 bit.

@DawidFerenczy it's possible, although not in the classic way. E.g. md \\.\c:\nul quora.com/…, gohacking.com/how-to-create-con-folder-in-windows, superuser.com/questions/86999/… – phuclv Feb 10, 2016 at 9:42 throws IOException using java in win10. Just need to wrap it on try catch. Was hoping to be no exception/errors just like /dev/null – MDuh Mar 17, 2020 at 20:12

Jon Skeet is correct. Here is the Nul Device Driver page in the Windows Embedded documentation (I have no idea why it's not somewhere else...).

Here is another:

  • The null device in the registry
  • Special file names
  • More on file naming
  • There are only so many times the question needs to be answered with NUL, and it was past that point 5 years ago. – miken32 Jul 7, 2017 at 23:55

    If you need to perform in Microsoft Windows the equivalent of a symlink to /dev/null in Linux you would open and administrator's cmd and type:

    For files:

    mklink c:\path\to\file.ext NUL:
    

    Or, for directories:

    mklink /D c:\path\to\dir NUL:
    

    This will keep the file/direcotry always at 0 byte, and still return success to every write attempt.

    In Windows10, if you want to use NUL like a file e.g.

    robocopy .\test NUL /move /minage:30 
    # delete all files older than 30 days using robocopy
    

    These answers all don't work.

    You get the error:

    ERROR 123 (0x0000007B) Accessing Destination Directory \\.\NUL\
    The filename, directory name, or volume label syntax is incorrect.
    

    However, it works if you do in cmd.exe:

    echo 1 > NUL
    

    So NUL doesn't behave exactly like a /dev/null file.

    However, for the robocopy command, you can do something like:

    robocopy .\test NUL\null /move /minage:30 
    

    Then it works!

    In Powershell, the $null works only as stdout redirection

    echo 1 > $null
    

    But you can't use $null in a command like for robocopy instead of a file. Neither does $null\null work.

    So all I could find to have the same effect like cmd.exe in PowerShell, is to call cmd.exe from within PowerShell like this:

    mkdir test1
    cd test1
    echo "" > test1.txt
    echo "" > test2.txt
    echo "" > test3.txt
    $path = '.\test1'
    cmd.exe /c "robocopy $path NUL\null /move"
    # also this works:
    cmd.exe /c "robocopy $path .\NUL\null /move"
    

    So NUL doesn't behave exactly like /dev/null folder but like a folder which can have phantom files inside it when used as a target file except you use it with > redirection, then it behaves as it is like a null device/file.

    In addition it is to be mentioned that cmd.exe creates a NUL when first used. But one cannot look into it.

    Doing the above with robocopy will actually create a folder called NUL, which isn't really what is desired here, especially since the folder then can't be deleted using normal means (e.g. Windows Explorer). – tomasz86 Sep 5, 2022 at 10:59 @tomasz86 Thank you for the remark! Perhaps there is no real equivalent to Linux's /dev/null, unfortunately. – Gwang-Jin Kim Sep 5, 2022 at 12:36 If only I read the comments before trying the Robocopy part of this answer... now to figure out how to delete this folder and its contents! – Edward Millen Nov 27, 2022 at 22:27

    You have to use start and $NUL for this in Windows PowerShell:

    Type in this command assuming mySum is the name of your application and 5 10 are command line arguments you are sending.

    start .\mySum  5 10 > $NUL 2>&1
    

    The start command will start a detached process, a similar effect to &. The /B option prevents start from opening a new terminal window if the program you are running is a console application. and NUL is Windows' equivalent of /dev/null. The 2>&1 at the end will redirect stderr to stdout, which will all go to NUL.

    The only built-in tool, which can deal with NUL is the good old copy. But make sure, you use the switch /b (binary), otherwise the content won't be cached by OS (that was my goal).

    Put a directory (recursive) to OS cache:

    for /f "delims=" %f in ('dir /s /b /a-d D:\Solr\data') do @copy /b "%f" nul > nul
    

    Use the RamMap (from Sysinternals) to verify.

    The question: "What is the equivalent of /dev/null on Windows?" This is not an answer to Q. Also: "The only built-in tool"? The NUL "file device" works on much more than just the MS COPY command. Maybe I misunderstood you? If I did, so did others.. – B. Shea Apr 9 at 13:14