C:\Program Files (x86)フォルダ内に入っている
ImageMagick*
のフォルダーを検索し、フォルダー名を表示したいのですが
http://ja.stackoverflow.com/questions/4745/
このページを参考にし
cd /d "C:\Program Files (x86)"
setlocal enabledelayedexpansion
set STR=
for /F %%A in ('dir ImageMagick* /B') do (
set STR= %%A
)
echo "%STR%"
endlocal
とやってみました。
すると、
ImageMagick-7.0.2-Q16
というように前にスペースが入ってしまいます。
このスペースを削除したいのですが
http://scripting.cocolog-nifty.com/blog/2007/01/ …
このページの
SET a=%a:~0,-1%
という方法が使えるかと思ったのですが
これを行頭一文字削除にするにはどうすれば良いですか?
あと、
endlocal
の後で変数STRを参照すると空になっているのですが
endlocalの後で参照するにはどうしたら良いですか?
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
えぇっと... 何をしようとしているのかがわからなくなった....
質問文で
「ImageMagick*
のフォルダーを検索し、フォルダー名を表示したいのですが」
とあるけど, これを
for /F %%A in ('dir ImageMagick* /B') do (
set STR= %%A
)
echo "%STR%"
のような形でやろうとすると実際には「フォルダー」が出てくるとは限らない (「ImageMagick*」にマッチするファイルがあったらそれが出てくるかもしれない) よね. さらに, 補足にある
「一回だけDirを使ってパスを取得する」
というのもよくわからない. 「パスを取得する」という「パス」って, なんのパスなんでしょうか? なんでもいいからてきとうに見つかればいいのかな?
質問文にあるように「フォルダーを検索する」というなら, そもそも dir 自体が不要なんだけどなぁ.
No.4
- 回答日時:
あまり良い方法が思い付きませんが、私が思い付く限りだと以下のような方法があるかと思います。
ファイル出力処理(リダイレクト)を使う方法です。
―――――――――――――――――――――
@echo off
pushd "C:\Program Files (x86)"
dir /b "ImageMagick*" > "%TEMP%\OUT.txt"
set /p STR= < "%TEMP%\OUT.txt"
echo."%STR%"
popd
pause
―――――――――――――――――――――
カレントディレクトリの移動を無くす場合は以下の通りです。
―――――――――――――――――――――
@echo off
dir /b "C:\Program Files (x86)\ImageMagick*" > "%TEMP%\OUT.txt"
set /p STR= < "%TEMP%\OUT.txt"
echo."%STR%"
pause
―――――――――――――――――――――
一行にまとめる場合は以下の通りです。
―――――――――――――――――――――
@echo off
dir /b "C:\Program Files (x86)\ImageMagick*" > "%TEMP%\OUT.txt" & set /p STR= < "%TEMP%\OUT.txt"
echo."%STR%"
pause
―――――――――――――――――――――
上記の処理だと、複数の「ImageMagick」から始まる名前のフォルダがある場合、DIRコマンドで一番上に表示される行が変数「STR」に代入されます。
パイプ処理で出来ればスマートだと思うのですが、私の知識ではそれは出来ないので、上記の処理が限界です。
この処理の注意点は、複数のバッチファイルを並行して動かす場合、出力ファイル「%TEMP%\OUT.txt」が他の処理で上書きされてしまう可能性があるので、保存場所を変えるか、重複しないファイル名にする必要があります。
又、ダブルクォーテーションで囲んでから変数「STR」に代入する事が出来ないので、フォルダ名に特定の記号が使われている場合はエラーが発生する可能性があります。
私自身、バッチファイルはよく使いますが、主にUNIXユーティリティの「sed」で処理してしまうので、バッチファイルのこういう事はあまり詳しくないです。
sedだと、例えば、dirの結果から、指定した一行を取り出したり、行頭や行末の何文字かを削除したり、逆に追加したり、指定した文字列を別の文字列に置換したり、様々な処理が簡単に出来るので便利です。
AWKやPerlだと、もっと高度な処理が出来ると思いますが、私はプログラミングの知識が無いので、これらはあまり使えません。
No.3
- 回答日時:
「set STR=」は、変数「STR」の中身を空にしているだけだと思います。
変数「STR」が、既に別の処理で使われていた時の為の掃除のようなものだと思います。
for文の中の「set STR=%%A」がメインとなる本当の代入処理だと思います。
フォルダ名に半角スペースがある場合は、「for /F %%A」の部分を「for /F "delims=:" %%A」等とした方が良いかと思います。半角スペースで名前が切れてしまう事がなくなります。
複数の「ImageMagick~」フォルダが存在する場合、変数「STR」に代入されるのは、DIRコマンドで最後に表示される行のフォルダ名1つだけですので、その点はご留意ください。
No.2
- 回答日時:
「C:\Program Files (x86)」フォルダ直下にある、「ImageMagick」から始まる名前のフォルダのフォルダ名を、コマンドプロンプトの画面に表示したいということでしょうか。
それなら、
dir /b /ad "C:\Program Files (x86)\ImageMagick*"
あるいは、
pushd "C:\Program Files (x86)"
dir /b /ad "ImageMagick*"
で可能だと思うのですが、これでは駄目なのでしょうか。
複数のフォルダ名を一行にまとめて表示したかったり、あるいは、変数にセットして使いたかったりするのでしょうか。
ご質問にある構文なら、
cd /d "C:\Program Files (x86)"
set STR=
for /F %%A in ('dir ImageMagick* /B') do (
set STR=%%A
)
echo "%STR%"
とすれば、行頭のスペースも削除出来、その後も変数を使えると思いますが、これではまずいでしょうか。
ただ、この構文では、複数のフォルダや、半角スペースを含むフォルダには対応出来ません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
夏が終わったと感じる瞬間って、どんな時?
まだまだ暑い今日この頃。 しかしながら、もう夏は終わっている!……はず。 あなたが思う「夏が終わった!」エピソードを教えてください。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
バッチファイルでDirで取得したファイル名を変数に入れる方法
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
エクセルVBAを使用してJPGファ...
-
ftp処理でmove(移動)を行いたい
-
バッチコマンドでファイル名の...
-
バッチファイルで、iniファイル...
-
[DOS] コピー先に同じファイル...
-
VBScriptで特別な意味を持つ記...
-
コマンドプロンプトでファイル...
-
テキストファイルのファイル名...
-
エクセルの文字列順に画像をリ...
-
ファイル名の頭5桁と同名のフォ...
-
ファイル名に ” を使うと エク...
-
コマンドプロンプトで変数が数...
-
DOSのバッチ作成について‐FORの...
-
ターボC ファイルオープンの...
-
コマンドプロンプトのエラーに...
-
大量のフォルダからひとつのフ...
-
バッチでテキストファイルから...
-
.txtではなく.logの方が良いの...
-
バッチ処理でファイルの中身を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
バッチファイルで、iniファイル...
-
コマンドプロンプトでファイル...
-
ftp処理でmove(移動)を行いたい
-
コマンドプロンプトで変数が数...
-
[DOS] コピー先に同じファイル...
-
ExcelVBAのDirでスペース含むフ...
-
バッチコマンドでファイル名の...
-
フォルダ内の更新日時が一番新...
-
ファイル名に ” を使うと エク...
-
VBA GetAttrについて教えてくだ...
-
エクセルVBAを使用してJPGファ...
-
DOSのバッチ作成について‐FORの...
-
access,vbaでフォルダ内のファ...
-
サブフォルダからファイルをコ...
-
.batでファイル名から抽出して...
-
【DOSバッチ開発】末尾のタブの...
-
aタグのhrefにネットワークパス...
-
Windowsコマンドプロンプトで、...
-
word VBA ファイル名 保存
おすすめ情報
ありがとうございます。
これです、うまくいきました。
ちなみに、
for文の前で
set STR=
のようにして代入するというのはどういう意味があるのでしょうか?
forの中でも
set STR=%%A
というように代入しているのに二重で行うのはなぜなのでしょうか?
ありがとうございます。
あと、この方法だとDirをForで回して最後に取得できたパスを取得しますが
一回だけDirを使ってパスを取得するにはどうしたら良いですか?
set STR=%%A in ('dir ImageMagick* /B')
とか
set STR= ('dir ImageMagick* /B')
とかを試してみましたがうまくいきませんでした。
どうすれば良いでしょうか?
ありがとうございます。
Dirを使わずに
for /d %%A in ("C:\Program Files (x86)\ImageMagick*") do (
set STR=%%A
)
でできることが分かりました。
いつもVBを使っているのでてっきりDirでファイル・フォルダーの取得だと思っていました。
ところで、上のコードでForループを使わずに検索して出た一つ目のフォルダー名だけを取得するにはどうしたら良いですか?
あるいは、一つ目のフォルダーを取得した時点でForループから抜けるにはどうしたら良いですか?
batでforループから抜けるコードを探してみたのですがなぜか見つかりませんでしたので
教えてください。