在Windows上,/dev/null的等价物是什么?
/dev/null
toiithl61#
我想你想要NUL,至少在命令提示符或批处理文件内。例如:
NUL
type c:\autoexec.bat > NUL
不创建文件。(我 * 相信 * 如果您尝试以编程方式创建一个文件,也是如此,但我还没有尝试过。)在PowerShell中,您需要$null:
$null
echo 1 > $null
dfuffjeb2#
根据这个message on the GCC mailing list,你可以用文件“nul”代替/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; }
(此代码的作者为;从他的消息中复制粘贴。)您还可以通过重定向使用此特殊的“nul”文件。
xnifntxz3#
Windows中的NUL实际上似乎是任何文件夹中的虚拟路径。就像任何文件系统中的..、.一样。使用任何文件夹后加上NUL都可以。示例:
..
.
echo 1 > nul echo 1 > c:\nul echo 1 > c:\users\nul echo 1 > c:\windows\nul
与Linux上的/dev/null具有相同的效果。这是在Windows 7(64位)上测试的。
shstlldc4#
Jon Skeet是正确的。这里是Windows Embedded文档中的Nul Device Driver页面(我不知道为什么它不在其他地方...)。下面是另一个:
jdg4fx2g5#
NUL也可以通过编程方式工作。例如:
freopen("NUL", "w", stderr);
按预期工作而不创建文件。(MSVC++ 12.0)
wecizke36#
如果您需要在Microsoft Windows中执行相当于Linux中/dev/null的符号链接,您可以打开管理员的cmd并键入:
cmd
对于文件:
mklink c:\path\to\file.ext NUL:
或者,对于目录:
mklink /D c:\path\to\dir NUL:
这将使文件/目录始终为0字节,并且每次写入尝试仍返回成功。
nbysray57#
在Windows10中,如果要像文件一样使用NUL,例如
robocopy .\test NUL /move /minage:30 # delete all files older than 30 days using robocopy
这些答案都不管用。您会看到错误:
ERROR 123 (0x0000007B) Accessing Destination Directory \\.\NUL\ The filename, directory name, or volume label syntax is incorrect.
但是,如果在cmd.exe中执行以下操作,则该方法有效:
cmd.exe
echo 1 > NUL
所以NUL的行为并不完全像/dev/null文件。但是,对于robocopy命令,您可以执行如下操作:
robocopy
robocopy .\test NUL\null /move /minage:30
那就成功了!在Powershell中,$null仅用作stdout重定向
但是你不能在robocopy这样的命令中使用$null来代替文件,$null\null也不起作用。因此,我所能找到的与PowerShell中的cmd.exe具有相同效果的方法是从PowerShell中调用cmd.exe,如下所示:
$null\null
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"
所以NUL的行为并不完全像/dev/null文件夹,而是像一个文件夹,可以有幻影文件在它作为一个目标文件时,除非你使用它与>重定向,然后它的行为就像它是一个空设备/文件。此外,要提到的是,cmd.exe在第一次使用时会创建一个NUL,但我们无法查看它。
>
anhgbhbe8#
您必须在Windows PowerShell中为此使用***start***和***$NUL***:键入此命令,假定mySum是应用程序的名称,510是要发送的命令行参数。
mySum
5
10
start .\mySum 5 10 > $NUL 2>&1
start命令将启动一个分离的进程,效果与&类似。如果您正在运行的程序是一个控制台应用程序,/B选项将阻止start打开一个新的终端窗口。而NUL是Windows中/dev/null的等价物。最后的2>&1将把stderr重定向到stdout,而stdout将全部转到NUL。
start
&
/B
2>&1
idv4meu89#
唯一可以处理NUL的内置工具是好的老copy。但是要确保,你使用开关/b(二进制),否则内容不会被操作系统缓存(这是我的目标)。将目录(递归)放入操作系统缓存:
copy
/b
for /f "delims=" %f in ('dir /s /b /a-d D:\Solr\data') do @copy /b "%f" nul > nul
使用RamMap(来自Sysinternals)进行验证。
9条答案
按热度按时间toiithl61#
我想你想要
NUL
,至少在命令提示符或批处理文件内。例如:
不创建文件。
(我 * 相信 * 如果您尝试以编程方式创建一个文件,也是如此,但我还没有尝试过。)
在PowerShell中,您需要
$null
:dfuffjeb2#
根据这个message on the GCC mailing list,你可以用文件“nul”代替/dev/null:
(此代码的作者为;从他的消息中复制粘贴。)
您还可以通过重定向使用此特殊的“nul”文件。
xnifntxz3#
Windows中的
NUL
实际上似乎是任何文件夹中的虚拟路径。就像任何文件系统中的..
、.
一样。使用任何文件夹后加上NUL都可以。
示例:
与Linux上的
/dev/null
具有相同的效果。这是在Windows 7(64位)上测试的。
shstlldc4#
Jon Skeet是正确的。这里是Windows Embedded文档中的Nul Device Driver页面(我不知道为什么它不在其他地方...)。
下面是另一个:
jdg4fx2g5#
NUL
也可以通过编程方式工作。例如:按预期工作而不创建文件。(MSVC++ 12.0)
wecizke36#
如果您需要在Microsoft Windows中执行相当于Linux中
/dev/null
的符号链接,您可以打开管理员的cmd
并键入:对于文件:
或者,对于目录:
这将使文件/目录始终为0字节,并且每次写入尝试仍返回成功。
nbysray57#
在Windows10中,如果要像文件一样使用NUL,例如
这些答案都不管用。
您会看到错误:
但是,如果在
cmd.exe
中执行以下操作,则该方法有效:所以
NUL
的行为并不完全像/dev/null
文件。但是,对于
robocopy
命令,您可以执行如下操作:那就成功了!
在Powershell中,
$null
仅用作stdout重定向但是你不能在robocopy这样的命令中使用
$null
来代替文件,$null\null
也不起作用。因此,我所能找到的与PowerShell中的cmd.exe具有相同效果的方法是从PowerShell中调用
cmd.exe
,如下所示:所以
NUL
的行为并不完全像/dev/null
文件夹,而是像一个文件夹,可以有幻影文件在它作为一个目标文件时,除非你使用它与>
重定向,然后它的行为就像它是一个空设备/文件。此外,要提到的是,
cmd.exe
在第一次使用时会创建一个NUL
,但我们无法查看它。anhgbhbe8#
您必须在Windows PowerShell中为此使用***start***和***$NUL***:
键入此命令,假定
mySum
是应用程序的名称,5
10
是要发送的命令行参数。start
命令将启动一个分离的进程,效果与&
类似。如果您正在运行的程序是一个控制台应用程序,/B
选项将阻止start打开一个新的终端窗口。而NUL
是Windows中/dev/null
的等价物。最后的2>&1
将把stderr重定向到stdout,而stdout将全部转到NUL
。idv4meu89#
唯一可以处理
NUL
的内置工具是好的老copy
。但是要确保,你使用开关/b
(二进制),否则内容不会被操作系统缓存(这是我的目标)。将目录(递归)放入操作系统缓存:
使用RamMap(来自Sysinternals)进行验证。