下記のサンプルコードは、何をやっているのでしょう?
PS1
11..10 | % {mkdir $_ -Force ; 1..100 > "$_.txt"; > 1..100 > "$_/$_.txt"}
10個のフォルダを作成し、
1から100までを10個のテキストファイルに書き込み
1..100 > "$/$.txt"の処理が分かりません。
どなたかご教授ください。
実際に動かしてみましたが、下記のエラーが出てしまいます。
> : 用語 '>' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前 が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 発生場所 行:1 文字:49 + 1..10 | % {mkdir $_ -Force ; 1..100 > "$_.txt"; > 1..100 > "$_/$_.txt ... + ~ + CategoryInfo : ObjectNotFound: (>:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException
意味がわかりません。何をしたいのか書き直してください。
まず、1..100 > "$_/$_.txt"の処理は、何をやっているのか。
エラーとなってしまっていますが、どこがどのように間違っているのかが、さっぱり分かりません。
(上記コードは、本のサンプルコードです)
だから、何もやっていません。エラーを起こしているだけです。本の通りなら本が間違っています。
実際には何をしたいのかを人に伝わるよう書いてください。
「1 + ○ と書いたのですがエラーになります。どうしたらいいですか?」という質問の場合、どうなったら正解なのかがわからないので答えられません。
「1 + ○の答えが 1 になるはずなのですが」なら、○と 0 を間違えているのだろうと見当がつきます。
Powershell実践ガイドブックP388に記載されているサンプルスクリプトで
ディレクトリとファイルを作成するスクリプトです。
本を買って読めと?
下記の様にすれば、当然、10個のディレクトリが作成され、10個のファイルが作成されるとともに、
テキストファイル内に1~100までの数値が書き込まれています。
1..10 | % {mkdir $_ -Force ; 1..100 > "$_.txt"}
続けてください。
説明を続けてください。
終わりですか?
もしこれで説明が終わりだとしたら、「間違っていて何もできないコード」が正解になると思いますが。
もちろん、本を写し間違っている場合はその限りではありません。
私もその本を使って PowerShell の勉強中です。
出版社とも著者とも何の関係もありませんが、間違った情報が残ってしまうのは余り良くないと思うので、サンプルについて修正します。
正しいスクリプトは 1..10 | ForEach-Object {mkdir $_ -Force; 1..1000 > "$_.txt"; 1..1000 >"$_/$_.txt"} ですね。
私の持っているのは初版第1刷で、その後修正された可能性も否定できませんが、もう一度間違っていないが確認してみて下さい。
実行すると10個のファイルと10個のフォルダー(中に1個のファイル)ができますね。
>Bullさん
「>」が一つ多かったですね。
10個のファイルと10個のフォルダー(中に1個のファイル)を作成するのであれば、
1..10 | % {mkdir $_ -Force ; 1..100 > "$_.txt"}だけでも実現できると思うのですが、
>"$_/$_.txt"は何を処理しているのかわかりますでしょうか?
私も勉強中の身ですが、それだとフォルダーの中にさらにファイルを作成することができなんじゃないかと。
ファイルをつくる階層が違います。その文を取ったものと入れたもので実行して比べたらわかります。
>Bullさん
1..10 | ForEach-Object {mkdir $_ -Force; 1..1000 > "$_.txt"; 1..1000 >"$_/$_.txt"} のスクリプトブロックの中身ですが、
mkdir $_ -Forceで10個のフォルダを作り
1..1000 > "$_.txt"で10個のファイルに1~1000まで書き込みを行い
"$_/$_.txt"で・・・??ここがよくわからないのですが、ここで作成した10個のフォルダの中に10個のファイルを入れているということでしょうか?
その文を取ったものと入れたもので実行して比べたらわかります。
1..10 | ForEach-Object {mkdir $_ -Force; 1..1000 > "$_.txt"}だけだと、実行したフォルダに
10個のフォルダと、10個のファイルが作成されます。
1..10 | ForEach-Object {mkdir $_ -Force; 1..1000 > "$_.txt"; 1..1000 >"$_/$_.txt"}だと、
実行したフォルダに10個のフォルダと、10個のファイルが作成され、さらに作成したフォルダ内に10個のファイルが作成されている。
結果の違っているところがコードの変更部分のしていることです。
ようやく理解できました。「/」は、一階層下(作成したディレクトリの中)に作成するために
記載してあったのですね。
そうですね。それをパス区切り文字と言います。Windows ではバックスラッシュ(フォントによっては円マーク)が使われ、その他の OS ではスラッシュが使われることが多いです。
書籍に載ってるコードには解説がついているはずなので、それを読み、実際に実行して試すようにしてください。
著者ではありませんが、その本の制作にレビュアーとして携わったものです。
内容についてはすでに解決されている様に書籍の内容の転記ミスかと。
Bullさんの
> 私の持っているのは初版第1刷で、その後修正された可能性も否定できませんが、もう一度間違っていないが確認してみて下さい。
について、こちらの部分は
1..10 | ForEach-Object {mkdir $_ -Force; 1..1000 > "$_.txt"; 1..1000 >"$_/$_.txt"}
で変わっていないことを補記しておきます。
回答2件
あなたの回答
tips
プレビュー