3

В cmd можно использовать команду mkdir /data/rs1 /data/rs2 /data/rs3 например:пример CMD

Все правильно:

пример папок

Но как реализовать это в powershell?

Я пытаюсь использовать кавычки, например:PowerShell

С кавычками я получаю только одну папку и имею проблему в powershell:пример папок

mkdir : Could not find part of the path "rs3".
строка:1 знак:1
+ mkdir "/data/rs1 /data/rs2 /data/rs3"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\data\rs1 \data\rs2 \data\rs3:String) [New-Item], DirectoryNotFoundException
    + FullyQualifiedErrorId : CreateDirectoryIOError,Microsoft.PowerShell.Commands.NewItemCommand

Без qoutes также проблема и не имеет никаких папок пример папок: PowerShell

mkdir : Can not find a positional parameter that takes an argument"/data/rs2".
строка:1 знак:1
+ mkdir /data/rs1 /data/rs2 /data/rs3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [mkdir], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,mkdir

Чтобы избежать проблем, я могу написать без пробелов:

PS C:\data> mkdir /data/rs1/data/rs2/data/rs3

Но это будет одна папка rs1 которая содержит внутри rs2 и rs3:

C:\data\rs1\data\rs2\data\rs3

Я ценю любую помощь.

4 ответа4

2

Есть много способов сделать это в PowerShell

1..3 | ForEach {MD ".\data\rs$_"}

или же

'RS1','RS2','RS3' | % {New-Item -Name ".\data\$_" -ItemType 'Directory'}

или же

for ($i=1;$i -le 3;$i++){MD ".\data\rs$i"}

или же

MD .\data
Pushd .\data
$Folder = @('RS1','RS2','RS3')
Md $Folder

Где md это псевдоним для New-Item и
% , ForEach - псевдонимы для ForEach-Object

2

Вы можете использовать foreach в PowerShell, чтобы сделать это

ForEach ($Dir in ("Dir1", "Dir2", "Dir3", "Dir4"))
    {
        New-Item -ItemType Directory -Path [PATH]\$Dir
    } 

Узнайте больше о ForEach в PowerShell

1

mkdir может создавать несколько каталогов за один раз, поэтому нет необходимости в foreach . Вы просто должны разделить их запятыми:

Здесь я создал 3 папки (Hello, Hello2, Hello3) в каталоге

PS C:\install> mkdir Hello,Hello2,Hello3


    Verzeichnis: C:\install


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       09.07.2018     10:39                Hello
d-----       09.07.2018     10:39                Hello2
d-----       09.07.2018     10:39                Hello3

Здесь я создал 3 папки в отдельных подпапках в каталоге:

PS C:\install> mkdir .\xy3\Hello, .\yz3\Hello2, .\tr3\Hello3


    Verzeichnis: C:\install\xy3


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       09.07.2018     10:42                Hello


    Verzeichnis: C:\install\yz3


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       09.07.2018     10:42                Hello2


    Verzeichnis: C:\install\tr3


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       09.07.2018     10:42                Hello3
1

Прежде всего, пожалуйста, не используйте скриншот для вещей, которые вы можете легко скопировать и вставить как текст.

Команда на вашем скриншоте выглядит так:

mkdir \data\rs1 \data\rs2 \data\rs3

И это тоже будет хорошо работать в скрипте, если вы находитесь на правильном диске, в этом примере C:

Команда mkdir /data/rs1 /data/rs2 /data/rs3 - это не одно и то же, потому что, как вы можете видеть, в качестве параметров пути используется / качестве разделителя пути, который не будет работать в Windows.

Помещение двойных кавычек вокруг списка путей также не помогает. Таким образом, выражение в двойных кавычках обрабатывается как один единственный путь, а не как три пути.

Короче говоря, так же, как mkdir \data\rs1 \data\rs2 \data\rs3 работает в вашем примере команды, он точно так же работает в пакетном скрипте.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .