Назад | Перейти на главную страницу

Powershell создает случайные файлы, папки и подпапки с глубиной

Попытка создать фиктивные файлы, каталоги и подкаталоги случайным образом на N уровней.

В каждом каталоге / подкаталоге должны быть файлы.

Я смог предоставить каталог и получить случайные папки, созданные со случайными файлами внутри, но у меня возникли проблемы с циклом для перехода на N уровней.

Вот что у меня есть:

    function New-DemoData ($Path)
    {
      # Usage: New-DemoData “D:\Company”
      Push-Location
      1..10 | % { Set-Location -Path (New-Item -ItemType directory -Name $([System.Guid]::NewGuid().ToString()) -path "$path\").fullname -ErrorAction SilentlyContinue
      for ( $i=1; $i -le (Get-Random -Minimum 10 -Maximum 200); $i++ )
        {

          #2147483648 bytes = 2GB  
          #20971520 = 20MB
          fsutil file createnew ($([System.Guid]::NewGuid().ToString()) + ".txt") (Get-Random -Minimum 1024 -Maximum 20971520)
        }
      }
      Pop-Location
    }

Есть несколько приемов, позволяющих упростить код.

Вы можете создавать столько вложенных папок, сколько необходимо, и все с помощью одной команды, если путь указан полностью. Например, если у вас есть c:\scratch но ничего ниже этого, New-Item -Type Directory c:\scratch\foo\bar\baz создаст foo\bar\baz подкаталоги.

Это позволит вам удалить логику для нажатия и извлечения местоположения, и ваш цикл может просто создавать имена каталогов в строке, многократно добавляя к строке и создавая файлы в каждом каталоге, как и раньше.

Второй небольшой совет - использовать числовые единицы PowerShell. Вместо комментариев, определяющих ваши «магические числа» для случайного размера файла, вы можете вместо этого использовать: (Get-Random -Minimum 1KB -Maximum 20MB)