在Windows中生成随机文件

29 windows

有没有人有办法在Windows中生成随机数据文件?我想生成50,000个小(2K)文件作为示例.

Bog*_*dan 29

您可以在批处理循环中运行fsutil来创建任何大小的文件.

fsutil file createnew filename.extension 2000
Run Code Online (Sandbox Code Playgroud)

  • 但是,它不会创建随机数据.只是空白文件. (30认同)

use*_*737 16

您可以使用PowerShell为您的文件生成廉价的随机数据:

[Byte[]] $out = @()
0..2047 | % {$out += Get-Random -Minimum 0 -Maximum 255}
[System.IO.File]::WriteAllBytes("myrandomfiletest", $out)
Run Code Online (Sandbox Code Playgroud)

这使用的算法带有从系统时钟中获取的种子,因此不要将其用于任何严重的加密应用程序.

另外,要小心Get-Random增加输出文件大小时的性能下降.更多关于这方面的信息:


Dav*_*ers 15

我一直在使用随机数据文件创建器并喜欢它,它创建了填充伪随机位的二进制文件(即非文本文件),它可以快速创建非常大的文件.要使用它来创建多个小文件,您需要编写脚本,这很容易,因为它是命令行.


gwi*_*rrr 8

Powershell中的单线程:

$out = new-object byte[] 1048576; (new-object Random).NextBytes($out); [IO.File]::WriteAllBytes('d:\file.bin', $out)
Run Code Online (Sandbox Code Playgroud)

与@ user188737解决方案相比,这是快速的.

  • 你确定是这种情况吗?我在我的系统上尝试过,运行了 3 次,得到了 3 个不同的文件。`Random` 类型的构造函数默认是基于系统时间的,所以如果你快速连续多次运行它,你可能会得到相同的文件。您可以通过创建单个 `Random` 对象,然后为每个连续文件重用它来避免这种情况:`$rnd = New-Object Random;` 在顶部一次,然后是 `$rnd.NextBytes` 而不是 `(New- Object Random).NextBytes` 生成文件时。 (2认同)

EBG*_*een 5

由于您没有指定语言,我只需随机选择一种语言.这是一个PowerShell脚本:

$rootDir = 'C:\Temp\TestRandomFiles\'
$baseFile = $rootDir + "base.txt"
$desiredFileSize = 2*1KB
$fileCount = 50000
"start" | Out-File -Filepath $baseFile
While ($(Get-ChildItem -path $baseFile).Length -lt $desiredFileSize)
{
    $(Get-ChildItem -path $baseFile).Length | Out-File $baseFile -APPEND
}
for($i=1;$i -lt $fileCount;$i++)
{
    Copy-Item $baseFile "File$i.txt"
}
Run Code Online (Sandbox Code Playgroud)

您必须将变量更改为您想要的参数.


Mar*_*man 5

我没有根据 user188737 和 mguassa 建议使用 Get-Random 生成文本,而是通过使用 GUID 提高了速度。

Function New-RandomFile {
    Param(
        $Path = '.', 
        $FileSize = 1kb, 
        $FileName = [guid]::NewGuid().Guid + '.txt'
        ) 
    (1..($FileSize/128)).foreach({-join ([guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid -Replace "-").SubString(1, 126) }) | set-content "$Path\$FileName"
}
Run Code Online (Sandbox Code Playgroud)

生成 1mb 文件需要 491 毫秒。跑步:

New-RandomFile -FileSize 1mb
Run Code Online (Sandbox Code Playgroud)

更新:

我已经更新了我的函数以使用 ScriptBlock,因此您可以将“NewGuid()”方法替换为您想要的任何方法。

在这种情况下,我创建 1kb 块,因为我知道我永远不会创建更小的文件。这极大地提高了我的函数速度!

Set-Content 在末尾强制换行,这就是为什么每次写入文件时都需要删除 2 个字符。我已将其替换为 [io.file]::WriteAllText() 。

Function New-RandomFile_1kChunks {
    Param(
        $Path = (Resolve-Path '.').Path, 
        $FileSize = 1kb, 
        $FileName = [guid]::NewGuid().Guid + '.txt'
        ) 

    $Chunk = { [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid -Replace "-" }

    $Chunks = [math]::Ceiling($FileSize/1kb)

    [io.file]::WriteAllText("$Path\$FileName","$(-Join (1..($Chunks)).foreach({ $Chunk.Invoke() }))")

    Write-Warning "New-RandomFile: $Path\$FileName"

}
Run Code Online (Sandbox Code Playgroud)

如果您不关心所有块都是随机的,您可以简单地 Invoke() 生成 1kb 块一次。这会大大提高速度,但不会使整个文件随机。

Function New-RandomFile_Fast {
    Param(
        $Path = (Resolve-Path '.').Path, 
        $FileSize = 1kb, 
        $FileName = [guid]::NewGuid().Guid + '.txt'
        ) 

    $Chunk = { [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid +
               [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid + [guid]::NewGuid().Guid -Replace "-" }
    $Chunks = [math]::Ceiling($FileSize/1kb)
    $ChunkString = $Chunk.Invoke()

    [io.file]::WriteAllText("$Path\$FileName","$(-Join (1..($Chunks)).foreach({ $ChunkString }))")

    Write-Warning "New-RandomFile: $Path\$FileName"

}
Run Code Online (Sandbox Code Playgroud)

Measure-Command 所有这些更改以生成 10mb 文件:

执行 New-RandomFile:35.7688241 秒。

执行 New-RandomFile_1kChunks:25.1463777 秒。

执行 New-RandomFile_Fast:1.1626236 秒。


jga*_*ant 0

好吧,从技术上讲,你可以写一些东西来为你做到这一点。
我不知道什么具体的..但最简单的方法是创建一个特定大小的文本文件(例如2K)..然后编写一个批处理文件来复制它50000次。