[前の記事]« pauseのプロンプトに好きな文字列を表示したい
[次の記事]テキストファイルに改行なしで文字列をアペンドしたい »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「REG,SCANREG…レジストリとコマンド・プロンプト」索引へ
▲カテゴリー「SET, PATH, %環境変数%」索引へ

空白付きのカレントディレクトリ名を1つの変数に入れるには

989.
空白付のカレントディレクトリを変数に
2006年02月09日(木) 12時02分
しろまさ
条件:ファイル出力無しに変数を取得したい。
for /f %%A in ('cd') do set CurPath=%%A

パスに空白が無い場合これで取得できますが、
空白があると正しいパスが取得できません。
ダブルクォーテーションを付けたりして試したのですが
うまくいきません。
良い案を教えて下さい。お願いします。
990.
Re:空白付のカレントディレクトリを変数に
2006年02月09日(木) 13時02分
じゃく
>条件:ファイル出力無しに変数を取得したい。
>for /f %%A in ('cd') do set CurPath=%%A
>
>パスに空白が無い場合これで取得できますが、
>空白があると正しいパスが取得できません。

OSが書いていませんが、2000/XPでしたら
set CurPath=%CD%
でカレントディレクトリをセットできますよ。
どうしてもfor文というのならfor /F のオプションである
 delims の使い方を調べてみてください。
この掲示板の過去ログに何度も出てきていますよ。

991.
Re:空白付のカレントディレクトリを変数に
2006年02月09日(木) 18時29分
しろまさ
返信、ありがとうございます。

>OSが書いていませんが、2000/XPでしたら
>set CurPath=%CD%
>でカレントディレクトリをセットできますよ。
 XPです。そんな環境変数があったとは・・
>どうしてもfor文というのならfor /F のオプションである
> delims の使い方を調べてみてください。
 いえ、どうしてもというわけではありません。
 単純に知りませんでした。delimsも調べてみます。
>この掲示板の過去ログに何度も出てきていますよ。
 それは失礼しました。
 この2日でプロンプトを頭に詰め込んで
 かなりオーバーヒートしていましたので質問させて頂きました。
  
 本当にありがとうございました。

  

992.
Re:空白付のカレントディレクトリを変数に
2006年02月10日(金) 09時35分
じゃく
しろまささん、おはようございます。


> XPです。そんな環境変数があったとは・・

set /? で解説があります。
set[Enter]で登録されている環境変数を眺めると使えそうなモノが他にもあると思います。

> この2日でプロンプトを頭に詰め込んで
> かなりオーバーヒートしていましたので質問させて頂きました。

2日詰め込みで、for /F までたどり着いているのですね。すごいですね。

for /? 
set /?
call /?
や、ここの過去ログを眺めると役に立つ記述が見つかると思います。


995.
Re:空白付のカレントディレクトリを変数に
2006年02月10日(金) 18時26分
しろまさ
じゃくさん、ご教授ありがとうございます。
その後、色々試したのですがまたGiveUpです。
目的は、レジストリで"uws"を含むMUIcacheの値名を取得し、削除することです。

Set MUI=HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache
reg query %MUI% | find /i "uws" > TempA
for /f %%A in (TempA) do reg delete %MUI% /v %%A /f

上記では、delimsが空白のため空白付パスがうまく取得できません。
TempAの中身で取得したい文字列の前には半角スペースが4文字あり、
中間にも空白があり(Program Files等)、後ろにはタブがあります。
reg delete は前後に空白があると動作しないため、
delimsをタブにしたり、tokenで*などを使用したり、
前の4文字スペースを消す方法なども試行錯誤したのですが、
どうしてもキレイに取得することができませんでした。

2行目のfindでもう少し絞った文字列が取得できればいいのですが、
forの使い方含めて、何かよい案ありますでしょうか?
996.
Re:空白付のカレントディレクトリを変数に
2006年02月11日(土) 10時02分
じゃく
こんにちは。

>目的は、レジストリで"uws"を含むMUIcacheの値名を取得し、削除することです。
>
>Set MUI=HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache
>reg query %MUI% | find /i "uws" > TempA
>for /f %%A in (TempA) do reg delete %MUI% /v %%A /f
>
>上記では、delimsが空白のため空白付パスがうまく取得できません。
>TempAの中身で取得したい文字列の前には半角スペースが4文字あり、
>中間にも空白があり(Program Files等)、後ろにはタブがあります。
>reg delete は前後に空白があると動作しないため、
>delimsをタブにしたり、tokenで*などを使用したり、
>前の4文字スペースを消す方法なども試行錯誤したのですが、
>どうしてもキレイに取得することができませんでした。
>
>2行目のfindでもう少し絞った文字列が取得できればいいのですが、
>forの使い方含めて、何かよい案ありますでしょうか?

つい最近の過去ログで reg query の話題が出ています。
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/scanreg/4-0937.html

このなかで reg query にバグがあるとのこぶんさんの発言を受けての otn さんの発言にあった
>reg export だと大丈夫ですが、解析が面倒そう
というのを見て、reg export を使ってみました。

reg export で出力した内容は
-------------------------------------------------------------------------
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache]
"LangID"=hex:11,04
"@xpsp1res.dll,-11003"="Internet Explorer ブラウザの起動"
"@xpsp2res.dll,-6100"="デスクトップの表示"
"@xpsp1res.dll,-11001"="Internet Explorer"
"@xpsp1res.dll,-11004"="Outlook Express"
"@C:\\WINDOWS\\system32\\rcbdyctl.dll,-152"="リモート アシスタンス"
"@C:\\WINDOWS\\system32\\SHELL32.dll,-8964"="ごみ箱"
"@C:\\WINDOWS\\system32\\tourstart.exe,-1"="Windows XP ツアー"
-------------------------------------------------------------------------
のように都合良くダブルクォーテーションでくくられて、"="で区切られていますので、"delims==" で取り出せそうです。(値名に"="が含まれたらアウトですがね)
ただ、パスの区切りが"\\"と¥マークが二つになっているのでここを set コマンドで \\→\ に置き換えて、reg delete に渡すようにします。

------------------------------------------------------------ sample.bat

Set MUI=HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache
reg export %MUI% MUI.reg
type MUI.reg | find /i "uws" >TempA
for /f "delims==" %%A in (TempA) do call :sub %%A

:MUI.reg はバックアップなので消さない
del TempA
goto :EOF

:sub
set key=%1
set key=%key:\\=\%

:念のため echo するだけの記載
:reg delete %MUI% /v %key% /f
echo reg delete %MUI% /v %key% /f

goto :EOF

-------------------------------------------------------------------
一応、自分で勝手な値を作ってテストはしましたが、レジストリのことですからバックアップをとって動作確認してから試してみてください。

997.
Re:空白付のカレントディレクトリを変数に
2006年02月11日(土) 17時19分
しろまさ
じゃくさん、完璧です。望む動作ができました。
export を読込むことは思いつきませんでした。

さらに、読込結果に対して2つ以上のコマンドを実行させたいと悩んでいたのも、
: を使用すれば出来るということが解りました。

ありがとうございました。

 
 


カテゴリー「REG,SCANREG…レジストリとコマンド・プロンプト」索引へ
カテゴリー「SET, PATH, %環境変数%」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2006年02月09日 09:57に投稿されたエントリーのページです。

ひとつ前の投稿は「pauseのプロンプトに好きな文字列を表示したい」です。

次の投稿は「テキストファイルに改行なしで文字列をアペンドしたい」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
 
このブログについて | 運営:有限会社メディアポート