여러 디렉토리 : "mkdir dir {1..9}"에 해당하는 Powershell?


11

무엇이 '괜찬아 명령에 해당 PowerShells MD가 여러 디렉토리를 만들 수있는 구문 (또는 MKDIR, 새로운 품목 ...)입니다 mkdir ch{1..9}즉,

~/parent_dir/  
ch1/  
ch2/  
ch3/  
ch4/  
ch5/  
ch6/  
ch7/  
ch8/  
ch9/  

매뉴얼 페이지와 예제에 대한 도움말을 살펴 보았지만 PowerShell이 ​​이러한 간단한 작업을 수행하는 구문을 모릅니다. 감사합니다.

답변:


16

PowerShell을 사용하여 여러 디렉터리를 만드는 구문은 무엇입니까

다음 명령을 사용하십시오.

0..9 | foreach $_{ New-Item -ItemType directory -Name $("ch" + $_) }

작동 방식 :

예:

> 0..9 | foreach $_{ New-Item -ItemType directory -Name $("ch" + $_) }


    Directory: F:\test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       25/09/2016     14:57                ch0
d-----       25/09/2016     14:57                ch1
d-----       25/09/2016     14:57                ch2
d-----       25/09/2016     14:57                ch3
d-----       25/09/2016     14:57                ch4
d-----       25/09/2016     14:57                ch5
d-----       25/09/2016     14:57                ch6
d-----       25/09/2016     14:57                ch7
d-----       25/09/2016     14:57                ch8
d-----       25/09/2016     14:57                ch9

3
다음을 입력하는 것보다 덜 장황한 것은 없습니다 1..9 | % $_{ md -name $("ch" + $_) }.
Mr. Kennedy

1
나도 그렇게 생각해. 그러나 저는 PowerShell 전문가가 아닙니다.
DavidPostill

1
괜찮아 보이지만 나는 그것을 시도하고 참조하십시오 :)
DavidPostill

1
a-HA – 이해 : 1..9 | % $_{ mv ch$_*.* ch$_ }: ^ D
Mr. Kennedy

1
@ Mr.Kennedy 커플 일. 당신은 실행 시도해야 git add하고 반환하는 것을 볼 - 명심를하는 $_foreach는이 의미 마지막 파이프 라인 항목의 개별 배열 항목 (이다 안에 commit당신의 예제의 단계 그렇게 추가, 원시 번호를받지 않습니다 ch다시를 아마 잘못 ). 또한 귀하의 예에서 모든 추가가 완료된 후에 만 ​​커밋이 실행됩니까 (?), 이는 첫 번째 커밋이 모든 것을 얻음을 의미합니다 ... 또는 ;단일 foreach 단계 내에서 여러 명령문 (으로 구분 )을 사용할 수 있습니다 .
Bob

22

New-Item경로 배열을 사용할 수 있으므로 mkdir을 여러 번 호출 할 필요가 없습니다 . 예를 들면 다음과 같습니다.

mkdir $(1..9 | %{"ch$_"})

@DavidPostill은 그의 답변 에서 대부분의 개념을 설명했다 . 또한 명시적인 연결을 수행하는 대신 문자열 보간을 활용 합니다 . 또한 %속기는 대신에 사용 ForEach-Object되지만 의미는 같습니다.

불행히도 bash에서와 같이 문자열을 문자열 배열에 보간하는 쉬운 방법은 없습니다.


2
@DavidPostill 당신은 나보다 훨씬 더 자세히 설명했습니다. 이것은 당신의 대답에 대한 부록이 될 것입니다 : P
Bob

2
@DavidPostill 삭제하지 마십시오. 설명이 매우 유용합니다
Mr. Kennedy

3
최대한 골프 버전 :md(0..9|%{"ch$_"})
벤 N

2
@DavidPostill md은에 대한 표준 별칭이며 mkdirPowerShell 함수입니다. %Bob이 언급했듯이의 표준 별칭은 ForEach-Object입니다. 큰 따옴표로 묶인 문자열 "ch$_"은 변수를 보간하므로 와 같습니다 'ch' + $_. 당신은 실행하여 별칭을 찾아 볼 수 있습니다 Get-Command( gcm그것을).
Ben N

1
@ Mr.Kennedy 다음과 같은 것 : 1..9 | %{"ch$_"} | %{git add "$_"; git commit -m "$_"}또는 1..9 | %{$name = "ch$_"; git add "$name"; git commit -m "$name"}. 댓글이 조금 길어 지므로 추가 질문이있는 경우 질문으로 문의하거나 채팅에 참여하세요.
Bob

1

기억하기 쉽고 많은 상황에 적용될 수 있으므로 for 루프 버전을 사용합니다. 여러 명령에도 사용할 수 있습니다.

이 bash 명령과 동등합니다.

{1..9}에서 i의 경우; 어떻게
내가 MKDIR 채널 $
수행을

... PowerShell 사용시 :

for($i=1;
$i -le 10;
$i++)
{md ch$i}

: 나는 PS1 스크립트와 같이 PowerShell 명령 줄에서 코드를 실행하거나 때 오류가 발생하는 - mamum, 당신은 명확 수 Missing opening '(' after keyword 'for'.:이 명령을 foreach ($i in 1..9) {md ch$i}저 디렉토리 apter "채널"을 번호를 얻을 수 있지만, 나는 당신의 "를 이해하지 않습니다. ..; do ... done "루프.
Mr. Kennedy

여기서 사용한 for 루프는 bash 쉘 (/ bin / sh)입니다. 이 쉘에 익숙해지면 항상 쉘을 bash로 변경합니다. ps의 경우, for 루프에 대해 다른 구문을 사용해야합니다 (첨부 된 링크 ss64.com/ps/for.html 참조 )
Osman Mamun

1
PowerShell : for($i=1; $i -le 10; $i++){md ch$i}고맙습니다 mamun,하지만 아직 "Bourne again ...";) (C ++도 모르지만 "$ i-le"(작거나 같지 않은 경우)을 이해한다고 생각합니다.) "$ i ++"(~ "i + = 1"?) 의미하고 명령을 수행하고 있습니다 ...
Mr. Kennedy

1
예, 인수를위한과 같이 CA는 (1 전을 초기화; i가 작거나 1보다 같만큼 1로 난을 증가)는 {반복적으로 물건을 할}
오스만 Mamun

1

현재 디렉토리 아래에 여러 디렉토리를 작성하십시오.

mkdir ('abc','def','jkl') 

위는 다음의 간단한 버전입니다. 문자열 배열 앞에 포함 된 at 기호와 명명 된 매개 변수 사용에 주목하십시오.

mkdir -Path @('abc','def','jkl')

그리고 모든 길을 가고 싶다면 완전한 기본 명령은 다음과 같습니다.

New-Item -Path @('abc','def','jkl') -ItemType Directory

PowerShell 명령 줄을 사용할 때는 짧은 버전을 사용합니다.

스크립트를 작성할 때 (특히 PowerShell을 처음 접할 수있는) 다른 스크립트를 작성할 때 전체 기본 명령을 작성하는 경향이 있습니다.

가장 적합한 것을 선택하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.