アレルギー対策、自宅でできる効果的な方法とは?

"C:\test\sample\a.bat"を実行した時 %~dp0 で C:\test\sample\ と展開できるのですが、
この時 C:\test\ というパスを取得するにはどうすればいいでしょうか?
バッチファイルから二つ上のディレクトリのパスを取得する方法を教えていただきたいです。
よろしくお願いします。

A 回答 (3件)

C:\test\ という名前が欲しいのであれば、



set A=%~dp0
set A=%A:~0,-2%
for %%A in (%A%) do set A=%%~dpA
echo %A%

アクセスするだけであれば、他の方のように .. で。

そういう意味では、下記でも良いですね。この場合は、C:\test\ でなく、C:\test が得られます。

pushd %~dp0..
set A=%CD%
popd
echo %A%
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
おかげで全て解決しました!

ifでパスの一致の確認ができそうです。
forの使い方も勉強不足でした・・・

お礼日時:2014/11/17 15:36

%~dp0\..



cd でカレントディレクトリを変更してなければ ..\.. でも同じです。

参考URL:http://pentan.info/server/windows/cmd/dp0.html
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
アクセスには使えましたがsample\..がついてしまい、目的には使えませんでした。
もう少し勉強してまいります。

お礼日時:2014/11/17 15:42

ディレクトリコマンドのヘルプを使いましょう。


dir /?
でオプションの一覧と使い方が表示されます。

そこに記述があったと思うんですけど
一つ上のパスはピリオドを2つ付けると表示されます。
dir ..
二つ上なら
dir ../..
こんな感じ。

あとはdirの出力先を標準出力(コンソール)からテキストファイル(パイプやリダイレクトなどの中間ファイルを含む)にしてフィルタコマンドを使うなどして取得しましょう。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
後から回答してくださった方の方法で解決しましたが、パス取得方法の1つとして知識が増えました。

お礼日時:2014/11/17 15:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Qバッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には1行の文字列があります。
このファイルをバッチで読み取り、変数に設定したいです。

例:
test.txt
abcacbacbacbacbacbacbacbacb

test,bat
set DATA=[test.txtを読み込んだ値]

よろしくお願い致します。

Aベストアンサー

これですね。

参考URL:http://www.upken.jp/kb/dqvgHNRUxwFDkmtoqEwfXHUjDrevNv.html

QDosバッチでファイルパスからフォルダパス取得

Dosバッチで引数指定されるファイルパスからフォルダパス部分を抜き出したいと思っています。

例)----------------------------------------------
「C:¥hoge1¥hoge2¥a.txt」が引数で指定されてきた場合、
「C:¥hoge1¥hoge2¥」の部分を変数に格納したい
-----------------------------------------------

ちなみに、指定されてくるパスは不規則です。

どなたか良い方法をご存知でしたらご教授宜しくお願い致します。

Aベストアンサー

わざわざ 2回参照するまでもなく
%~dp1
でよかったりします>#2.

Qバッチファイルの親フォルダを取得するには

WindowsのDOSコマンドを用いたバッチファイルで、バッチファイルと同じフォルダにある実行ファイルを起動したいのですが、どのようにするのがよいのでしょうか?
実行ファイルのファイル名は既知で固定なので、バッチファイルの親フォルダが取得できれば、連結して起動すればよいです。

しかし、バッチファイルの親フォルダの取得方法が分かりません。

カレントフォルダは%CD%で取得できるのですが、バッチファイルの親フォルダがカレントフォルダとは限りません。
バッチファイルのフルパスは%0で取得できるのですが、そこからフォルダ部のみを抽出する方法が分かりません。

よろしくお願いします。

Aベストアンサー

%~dp0
の方がいいんじゃないかな?

Qバッチファイル 文字列にスペースがある場合

for /f %%A in ('dir /b /s c:\a aa*.pdf') do copy "%%A" D:\

これはcドライブのa aaというフォルダ名の中を検索するコードですが、
フォルダ名にスペースがあるため、うまく動きません。

"a aa"のように""で囲ってみましたが、駄目でした。

どうすれば良いのか、教えていただきたいので、お願いします。

Aベストアンサー

for /f %%A in ('dir /b /s c:\"a aa"\*.pdf') do echo copy "%%A" D:\
のようにecho でどのようなコマンドが実行されているか確認しましょう。

この記述ではdirコマンドで表示されるパスの中に空白があるため %%A には空白までの文字列しか代入されません。
以下のように修正して試してみてください。

for /f "delims=" %%A in ('dir /b /s c:\"a aa"\*.pdf') do copy "%%A" D:\

Qバッチファイルで2つ以上の変数を連結し、1つの変数にしたい。

Windows2000でバッチファイルを作っています。
バッチファイルが受け取る2つのパラメータを %1 %2とすると、
それを連結して、新たな変数 A を作りたいのですが、どのようにすれば良いのでしょうか。

Aベストアンサー

SETで変数にパラメータをセットすればOKだと思います。

例)
SET A=%1%2
echo %A%

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

Qコマンドプロンプトの「%1」と「%~1」の違いがわからない

コマンドプロンプトの「%1」と「%~1」の違いがわからない
このサイトにhttp://ykr414.com/dos/bat.html
%~1は「全ての引用句(")を削除して%1を展開する。」とありますがよくわかりません。

%1は入力されたファイルのフルパスだと思っているのですけど。
"%1"=%~1ということでしょうか。

Aベストアンサー

%1は、バッチファイルに指定された「第一引数」です。
バッチファイルに限らず、プログラムを実行するときには引数を指定することができます。
単純に関連づけて実行するとかバッチファイルのアイコンにファイルをにドラッグドロップするとかだと、引数は一つない場合が多いですが、
実際にはショートカットを作ったりコマンドプロンプトから指定するとか、二つ以上の引数を指定することができます。
その際、引数と引数の間はスペースで区切られます。(引数指定全体の文字列を、スペースで区切って各引数に分割する)

一方、例えば、マイドキュメントフォルダ「C:\Documents and Settings\ユーザー名\My Documents」を引数にを指定した場合、そのままだとフォルダ名に空白が入ってるので、
%1=C:\Documents
%2=and
%3=Settings\ユーザー名\My
%4=Documents
と、指定した一つの名前が複数の引数に分断されてしまします。

そこで、こういう場合には、ダブルクオートでファイル名を括ります。
プログラム起動時の引数に 「"C:\Documents and Settings\ユーザー名\My Documents"」
といった感じで、ダブルクオートを付けたものを指定すると、
%1="C:\Documents and Settings\ユーザー名\My Documents"
と、括られた部分がまとめて一つの引数と取り扱われるようになります。
そして、この時%~1は
%~1=C:\Documents and Settings\ユーザー名\My Documents
になります。

%1と%~1の使い分けですが、
引数をこのままファイル名として使う時は、%1をそのまま使えば問題ないのです。
(バッチファイルから別のプログラムを起動するときにファイル指定するとかだったら、
%1を使えば、ダブルクオート込みで渡されるので、そのまま一つの引数としてつかます)

一方、フォルダを指定してそのフォルダ下のファイル名を作る、といった処理をしようとする時には、
ダブルクオートが邪魔なので、そういう時は%~1を使います。
たとえば、指定した引数をフォルダとして、そのフォルダ下の「新規作成データ.txt」ファイルを表すフルパスのファイル名を作りたい場合、

単に
 「%1\新規作成データ.txt」とすると、「"C:\Documents and Settings\ユーザー名\My Documents"\新規作成データ.txt」になってしまいますが、

「"%~1\新規作成データ.txt"」とすれば「"C:\Documents and Settings\ユーザー名\My Documents\新規作成データ.txt"」という、正しくクオートされたファイル名を作ることができます。

%1は、バッチファイルに指定された「第一引数」です。
バッチファイルに限らず、プログラムを実行するときには引数を指定することができます。
単純に関連づけて実行するとかバッチファイルのアイコンにファイルをにドラッグドロップするとかだと、引数は一つない場合が多いですが、
実際にはショートカットを作ったりコマンドプロンプトから指定するとか、二つ以上の引数を指定することができます。
その際、引数と引数の間はスペースで区切られます。(引数指定全体の文字列を、スペースで区切って各引数に分割す...続きを読む

Qバッチでテキストファイルから任意の行のみ取得したい

batファイルを作成していて、
txtから特定の行のみをとりだし、変数に入れたいです。
どうもよくわからないので質問したいと思います。
まず以下の様なテキストファイルがあります。
-------------------
111
222
333
-------------------
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。

行いたい動作は、
-----------------------------------------
1.テキストファイルの1行目を変数Textに入れる(set Text=111)
2.変数Textを使用し色々処理をする
3.テキストファイルの2行目を変数Textに入れる(set Text=222)
4.変数Textを使用し色々処理をする
-----------------------------------------
コレを繰り返します。
2と4は同じ動作ですので、行数のカウンタを設定しループさせる予定です。
n行目を全て取り出す方法がわかれば行けると思うのですが、
どうも見つかりません。ご存知の方がいればお教え願いたいと思います。

batファイルを作成していて、
txtから特定の行のみをとりだし、変数に入れたいです。
どうもよくわからないので質問したいと思います。
まず以下の様なテキストファイルがあります。
-------------------
111
222
333
-------------------
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。

行いたい動作は、
-----------------------------------------
1.テキストファイルの1行目を変数Textに入れる(set Text=111)
2.変数Textを使用し色々処理をする
3.テキストファイルの2行目を変数T...続きを読む

Aベストアンサー

No3ですが、たぶん提示したスクリプトを見ると、ある事に気がつくはず?

findstr /n /r "." a.txt | findstr /r "^3:"

で3行目を表示してくれます。え!? それだけ。そうなんです

ただ、あと、先頭の”3:” をどうやって切り離すか? と言う問題にぶつかる。さらにファイルに先頭に”3:”があった場合、どうするのか? さらに、findstr の正規表現の動作が??? 表示すれるのはいいが、変数にどうやってセットするのか?

となる。結局 for 文を使いまわす事になります。

まあ、適当に改変して、上記の問題を解決してください。

Qバッチファイルで自身の名前を取得する方法

%date% で「現在時刻」を取得できるように、現在実行中のバッチファイル名を取得できる方法はありませんか?

OS : Windows XP SP 2

Aベストアンサー

バッチファイル自身のファイル名は %0 で取得できます。

『コマンドプロンプトを使ってみよう:バッチパラメータ・修飾子』
http://ykr414.com/dos/bat.html#05

パラメータ「%1」はバッチファイル実行時に付加された最初のパラメータを表す。
2番目は「%2」、3番目は「%3」で全部で9個のパラメータを渡す事ができる。
特別なものに「%0」があり、これは実行されたバッチファイル名を表す。

参考URL:http://ykr414.com/dos/bat.html#05


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報