Windows上的/dev/null等价于什么?
/dev/null
我认为你需要NUL,至少在命令提示符或批处理文件中。
NUL
例如:
type c:\autoexec.bat > NUL
不创建文件。
(I 相信同样是正确的,如果你试图以编程方式创建一个文件,但我还没有尝试过。)
在PowerShell中,你需要$null:
$null
echo 1 > $null
根据这个消息在GCC邮件列表,你可以使用文件"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”文件。
乔恩·斯基特说得对。下面是Windows Embedded文档中的null设备驱动程序页面(我不知道为什么它不在其他地方…)
这是另一个:
在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位上测试的。
NUL也可以通过编程方式工作。例如:
freopen("NUL", "w", stderr);
按预期工作,无需创建文件。(MSVC + + 12.0)
你必须在Windows PowerShell中使用< em > < / em >开始和NUL美元< em > < / em >:
输入这个命令,假设mySum是你的应用程序的名称,5 10是你要发送的命令行参数。
mySum
5
10
start .\mySum 5 10 > $NUL 2>&1
start命令将启动一个分离进程,效果与&类似。如果你正在运行的程序是一个控制台应用程序,/B选项防止启动打开一个新的终端窗口。而NUL在Windows中相当于/dev/null。末尾的2>&1将stderr重定向到stdout, stdout将全部指向NUL。
start
&
/B
2>&1
如果你需要在微软Windows中执行相当于Linux中/dev/null的符号链接,你可以打开和管理员的cmd并键入:
cmd
的文件:
mklink c:\path\to\file.ext NUL:
或者,对于目录:
mklink /D c:\path\to\dir NUL:
这将使文件/目录始终保持0字节,并仍然返回成功的每次写尝试。
在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只能作为标准输出重定向
$null\null
因此,我所能找到的与cmd.exe在PowerShell中具有相同的效果,是从PowerShell中调用cmd.exe,如下所示:
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。但是我们不能去看它。
copy
/b
将目录(递归)放入操作系统缓存:
for /f "delims=" %f in ('dir /s /b /a-d D:\Solr\data') do @copy /b "%f" nul > nul
使用RamMap(来自Sysinternals)进行验证。