コマンドで使用できるコマンドmkdir /data/rs1 /data/rs2 /data/rs3
お気に入り:
すべてが正しい:
しかし、Powershellでそれを実現する方法は?
たとえば、引用符を使用しようとしています:
引用符を付けると、フォルダーが1つだけになり、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がなければ問題もあり、フォルダはありません :
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
どんな助けにも感謝します。
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
のエイリアスです
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
PowerShellでforeachを使用してこれを行うことができます
ForEach ($Dir in ("Dir1", "Dir2", "Dir3", "Dir4"))
{
New-Item -ItemType Directory -Path [PATH]\$Dir
}
PowerShellの ForEachの詳細を読む
まず、テキストとして簡単にコピーして貼り付けることができるものには、スクリーンショットを使用しないでください。
スクリーンショットのコマンドは次のとおりです。
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
が機能するのと同様に、バッチスクリプトでもまったく同じように機能します。