web-dev-qa-db-ja.com

PowerShellで複数のフォルダーを作成する方法

コマンドで使用できるコマンドmkdir /data/rs1 /data/rs2 /data/rs3 お気に入り: cmd example

すべてが正しい:

folders example

しかし、Powershellでそれを実現する方法は?

たとえば、引用符を使用しようとしています: powershell

引用符を付けると、フォルダーが1つだけになり、Powershellで問題が発生します。 folders example

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がなければ問題もあり、フォルダはありません folders example: 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

しかし、それは1つのフォルダーになりますrs1を含むrs2およびrs3

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

どんな助けにも感謝します。

7
invzbl3

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

ここで、mdNew-Itemのエイリアスであり、
%ForEachForEach-Objectのエイリアスです

7
LotPings

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
3
SimonS

PowerShellでforeachを使用してこれを行うことができます

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

PowerShellの ForEachの詳細を読む

2
pun

まず、テキストとして簡単にコピーして貼り付けることができるものには、スクリーンショットを使用しないでください。

スクリーンショットのコマンドは次のとおりです。

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

そして、この例ではC:のように、正しいドライブにいる限り、スクリプトでも問題なく機能します。

コマンドmkdir /data/rs1 /data/rs2 /data/rs3は同じではありません。これは、ご覧のとおり、パスパラメータは/をパスの区切り文字として使用するため、Windowsでは機能しません。

パスのリストを二重引用符で囲んでも、役に立ちません。このように、二重引用符で囲まれた式は、3つのパスではなく1つのパスとして扱われます。

つまり、コマンド例でmkdir \data\rs1 \data\rs2 \data\rs3が機能するのと同様に、バッチスクリプトでもまったく同じように機能します。

1
janos