PowerShell -Part 6at TECH
PowerShell -Part 6 - 暇つぶし2ch18:デフォルトの名無しさん
22/02/22 20:22:44.35 wkvlg9SU.net
前スレの質問者に本当に必要だったものは、たぶんこういうのだと思うんだ…
class node {
[node]$val;
[node[]]$children;
}

19:デフォルトの名無しさん
22/02/22 20:24:23.06 wkvlg9SU.net
まちがえた→[object]$val
教えたがりおじさん見苦しい

20:デフォルトの名無しさん
22/02/22 21:34:19.39 5aCEOBVD.net
昔csvdeのエクスポートデータをVBSで木構造に変換したりしたけどその時はジャグ配列でなんとかなった
powershellだと配列に色々罠があるから大変そう
コマンドレット化されてるデータ構造を扱う事は得意でもテキストを1から解析して階層データとして扱うのには向かない気がする

21:デフォルトの名無しさん
22/02/22 22:00:01.99 LHZaRsEg.net
木のテキスト表現がカッコや""等ならbalancing groupでパースするのが便利だよ
perl/Pythonよりdotnetのパターン言語の方が強い(丸パクリだから当然だけど)

22:デフォルトの名無しさん
22/02/22 22:10:34.21 LHZaRsEg.net
組み込み型はスプラッターしちゃうとか罠多いから、内部でキッチリ階層持ちたいなら>>18みたいなロートルな手段が堅牢だったり
仕様覚えるという道もあるけど俺は諦めた

23:デフォルトの名無しさん
22/02/22 22:27:40.62 U3xoo538.net
逆説的だけど、.NETに詳しくない俺みたいな人ほどテキスト処理は抑えておくべき
なんか良く分からん物が返ってきても、オブジェクトの印字表現をOut-Fileで捕まえてテキスト処理にフォールバックできる()

24:デフォルトの名無しさん
22/02/22 22:59:38.55 LHZaRsEg.net
-match一発でパースが済まない木の表現は、段落を使って木を表現するyamlみたいなやつ
balancing group+複数行マッチで頑張れるかもしれないけど、地道にインデント数えてるわ

25:デフォルトの名無しさん
22/02/22 23:31:15.02 +zCOrMmD.net
一見不器用でもインデントレベルは素直に数えるのが正解
例えばpythonインタプリタもカウンタを使って構文をパースしてる
yaml系のシリアル化フォーマットは、インデントを数えるだけでパーサが書ける移植性が売り

26:デフォルトの名無しさん
22/02/23 20:35:53.13 KVH3xsak.net
Chromeでもパスワードにメモを付けて保存できるようになるみたいね

27:915
22/02/25 01:33:26.38 wLKzA9jy.net
変数を文字列の中に入れ込んでしまって、消せないフォルダが出来てしまいました
C:\works\+ $a
削除もリネームもフォルダ移動すら出来ません
どうすれば削除出来ますでしょうか?
お知恵を貸してください

28:デフォルトの名無しさん
22/02/25 02:07:17.42 3hSRN4MI.net
ファイル名に$が入って、$aが展開されちゃう的な?ならエスケープすればいいだけでは
`$a
意図を汲めてるかちょっと自信ないけど

29:915
22/02/25 07:49:52.49 wLKzA9jy.net
>>28
1. 変数を使ってフォルダを作ろうとした
2. 変数に値を代入した $a = 0225
3. C:\works\0225 を作りたかったので
“C:\works\ + $a” としたかったが
’C:\works\ + $a‘ としてしまった
4. + $a という名前のフォルダが
C:\works\ 直下に作られた
5. エクスプローラからもPowershellからも
+ $a と名前のついたフォルダは削除、リネーム、
移動が出来ない
C:\works\ + $a\test.txt のように+ $a フォルダ内に
ファイルを作る事は可能
Win10 Windows powershell 5.1 VSCODEで作成
細かい所はあまり覚えてませんがこんな感じです

30:デフォルトの名無しさん
22/02/25 08:55:58.66 Ex9z+jLY.net
うちの環境では削除できた
なんかのプロセスにロックされてるんじゃないの?

31:デフォルトの名無しさん
22/02/25 09:22:05.48 Ttq2k6xT.net
エラーメッセージを貼らない奴の相手してもしょうがない

32:915
22/02/25 11:29:32.26 omaqMYjV.net
>>31
これは失礼しました
エラーは下記です。普通の名前のフォルダは削除出来ます
Remove-Item : 引数 '$null' を受け入れる位置指定パラメーターが見つかりません。
発生場所 行:1 文字:1
+ Remove-Item + $a
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-Item]、ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

33:915
22/02/25 11:32:06.01 omaqMYjV.net
ちなみにフォルダを右クリックして出てくるプロパティ→セキュリティのタブには
「要求されたセキュリティ権限は利用できないか、または表示されません。」
とのエラーも出てます

34:デフォルトの名無しさん
22/02/25 11:40:38.52 Ttq2k6xT.net
>>32
> ’C:\works\ + $a‘ としてしまった
んなら
Remove-Item ’C:\works\ + $a‘
ってやれよ…

35:915
22/02/25 12:06:55.57 omaqMYjV.net
>>34
すみません。。
やってみました
Remove-Item : パス 'C:\works\ + $a ' が存在しないため検出できません。
発生場所 行:1 文字:1
+ Remove-Item 'C:\works\ + $a '
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\works\ + $a :String) [Remove-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

36:デフォルトの名無しさん
22/02/25 12:16:43.02 SH4WT7RG.net
コマンドプロンプトを管理者権限で起動
rd /s /q エクスプローラーから対象フォルダをD&D
これで無理なら排他制御キャンセルするソフト使うかPCを一旦再起動

37:デフォルトの名無しさん
22/02/25 12:24:59.94 Ttq2k6xT.net
>>35
> Remove-Item : パス 'C:\works\ + $a '
$a の後ろの空白

38:915
22/02/25 12:30:35.39 omaqMYjV.net
>>36
ありがとう御座います
「指定されたファイルが見つかりません」
と返されました。再起動も状況変わらず
Dirコマンドでは+ $a は表示されておりエクスプローラでも見えてるのですが何故か認識されないです

39:デフォルトの名無しさん
22/02/25 12:36:38.88 yKl3/QUV.net
コマンドで消したいだけならワイルドカードやタブ補完で選択すればいいじゃない
再起動後エクスプローラーから消せないか試したの?
何がしたいのか分からん

40:915
22/02/25 12:42:21.42 omaqMYjV.net
>>37
空白で思い出しました
試行錯誤してて
'"C:\works\' + $a + '\"'
のような事もやってました
なので(なのかどうかも分かりませんが)フォルダの名前には + $a と後ろにも空白が入っています

41:915
22/02/25 12:44:41.55 omaqMYjV.net
>>39
エクスプローラからの削除だと削除後も+ $a フォルダが残り続けます
やりたい事: + $a フォルダを削除したい

42:915
22/02/25 12:48:15.22 omaqMYjV.net
追記正確なフルパス名
[]は半角スペースです
C:\works\[]+[]$a[]

43:デフォルトの名無しさん
22/02/25 12:55:42.52 SH4WT7RG.net
その親フォルダにカレントディレクトリを移動して他に$付くフォルダが無い、或いは削除してしまって良いなら
for /d %a in (*$*) do rd /s /q "%~a"

44:デフォルトの名無しさん
22/02/25 13:03:31.62 SH4WT7RG.net
もし>>43で駄目だったら最後のとこ
"%~sa"
を試してみて

45:デフォルトの名無しさん
22/02/25 13:04:14.85 AEqwOQnl.net
C:\worksごと消せばいい

46:915
22/02/25 13:06:19.04 omaqMYjV.net
>>43
やはり指定されたファイルが見つかりませんと返されました
一旦整理します
目的︰ + $a フォルダを削除したい
環境:Win10, Win PS ver 5.1, Vscode 1.64.2
記述:'"C:\works\"[]+[]$y[]+[]"\"' (かなり記憶が曖昧)
フルパス C:\works\[]+[]$y[]
※[]は半角スペース
1. エクスプローラ
1.1 右クリック削除→削除後もフォルダが残り続ける
1.2 リネーム→「この項目は見つかりません。次の場所にはありません。」
1.3 移動→同上
2. PS
2.1 Remove-Item(\works直下)→「引数 '$null' を受け入れる位置指定パラメーターが見つかりません。」
2.2 Remove-Item(フルパス)→「 パス 'C:\works\ + $a ' が存在しないため検出できません。」
3. CMD
3.1 rd /s /q→「指定されたファイルが見つかりません」

47:915
22/02/25 13:07:15.53 omaqMYjV.net
上記 $y → $a です
すみません

48:915
22/02/25 13:10:23.66 omaqMYjV.net
>>44
saでも変わらずでした
>>45
>>46の1.1と同じでした

49:デフォルトの名無しさん
22/02/25 13:11:33.74 AEqwOQnl.net
フォルダが消したいだけならPowershell関係ないからこちらでどうぞ
Windows 10 質問スレッド Part82
スレリンク(win板)

50:デフォルトの名無しさん
22/02/25 13:17:48.06 MEIpOner.net
\\?\C:\fogo

51:デフォルトの名無しさん
22/02/25 15:04:10.02 gazry23L.net
>>47
> 上記 $y → $a です
> すみません
だからさあ、入力した内容とエラーメッセージをそのまま貼ってくれよ…

52:デフォルトの名無しさん
22/02/25 20:57:30.79 FVUZxr5Y.net
dir "*a*" などとして対象のフォルダだけ表示されることを確認して
dir "*a*" |

53:デフォルトの名無しさん
22/02/25 20:58:43.73 FVUZxr5Y.net
dir "*a*" | % {remove-item -LiteralPath $_.Name}
でどうだろうか

54:デフォルトの名無しさん
22/02/25 21:06:53.72 zbdaU1gm.net
dir /x
で8.3形式のファイル名があるなら、それで消してみる
だめなら、>>50の形式でフルパスを指定する


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch