コマンドプロンプトの「%1」と「%~1」の違いがわからない
このサイトにhttp://ykr414.com/dos/bat.html
%~1は「全ての引用句(")を削除して%1を展開する。」とありますがよくわかりません。
%1は入力されたファイルのフルパスだと思っているのですけど。
"%1"=%~1ということでしょうか。
No.1ベストアンサー
- 回答日時:
%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"」という、正しくクオートされたファイル名を作ることができます。
おお詳しくありがとうございます。""が付くかつかないでいいんですね。
何やら複雑な機能があるのかと思っていましたが、安心しました。
No.3
- 回答日時:
No.2 です。
>%1は入力されたファイルのフルパスだと思っているのですけど。
最初、何の事かよくわからなかったのですが、
エクスプローラ画面上で、処理したいファイルを
バッチファイルにドラッグ&ドロップすると
バッチファイルにフルパス名を渡す事ができますが、
フルパスの途中にスペースが入っていると " 付きで渡されます。
バッチファイル内で " が邪魔な場合は %~1 と指定すればいい、
という事です。
No.2
- 回答日時:
コマンド入力時に、バッチファイル名の後ろに与えられたパラメータを
%1 などの変数の形で受け取りますが、デリミタ(仕切)文字がスペースなので、
スペースを含むパラメータは分割されてしまう為、それを防ぐのに " で囲みます。
ところが " 付きのまま渡されるので、それが邪魔な場合には
%~1 と書けばそれを取り除いてくれるという事です。
やってみれば早いんですが。
バッチファイル TEST.bat を1コ作ります。
内容 は2行だけ
------------
echo %1
echo %~1
--------------------
で、DOSプロンプトから
>test "abc def" とコマンド入力すると
>echo "abc def" を実行して
"abc def" と表示され
>echo abc def を実行して
abc def と表示されます。
ちなみに、
>test abc def とコマンド入力すると
>echo abc %1 には abc だけが代入されて表示され、
abc def は %2 に代入されますが
>echo abc どこにも使う記述がないので表示もされません。
abc
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 コマンドプロンプトの使い方 1 2022/10/13 14:43
- その他(プログラミング・Web制作) pythonでDepixを起動 5 2022/12/18 08:04
- システム 外付けHDDの初期化について 4 2023/03/05 21:19
- システム 外付けHDDの初期化について 4 2023/03/05 20:00
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- その他(ソフトウェア) コマンドプロンプトについて教えてください。 状況: 画像編集ソフト上でネットから保存した画像を使うの 3 2022/05/26 11:14
- Windows Me・NT・2000 コマンドプロンプトのdisk partについて 2 2023/03/05 15:49
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- UNIX・Linux macOS の % とは? 4 2023/05/05 10:45
- バックアップ 外付けHDDが認識されません 3 2023/03/07 17:11
このQ&Aを見た人はこんなQ&Aも見ています
-
とっておきの「夜食」教えて下さい
真夜中に小腹がすいたときにこっそり作るメニュー、こっそり家を抜け出して食べに行くお店… 人には言えない、けど自慢したい、そんなあなたの「とっておきの夜食」を教えて下さい。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
これが怖いの自分だけ?というものありますか?
人によって怖いもの(恐怖症)ありませんか? 怖いものには、怖くなったきっかけやエピソードがあって聞いてみるとそんな感覚もあるのかと新しい発見があって面白いです。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
【お題】 ・このサンタクロースは偽物だと気付いた理由とは?
-
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
-
4
バッチ処理でファイルの中身を変数に入れるやり方
その他(プログラミング・Web制作)
-
5
コマンドプロンプトのエラーについて
その他(パソコン・周辺機器)
-
6
バッチファイル 文字列にスペースがある場合
その他(プログラミング・Web制作)
-
7
Dosブロンプトでtabを出力したい
その他(プログラミング・Web制作)
-
8
コマンドプロンプトによるフォルダ内のファイル存在有無
UNIX・Linux
-
9
Windowsのバッチファイルで正規表現の置換方法について…
Windows 10
-
10
コマンドプロンプトで変数が数字であることを判定する方法
その他(プログラミング・Web制作)
-
11
バッチファイルで変数の中身をファイル出力したい
UNIX・Linux
-
12
テキストファイルから最終行の抽出
Windows Me・NT・2000
-
13
ファイルの先頭行を全て削除したい
Windows Vista・XP
-
14
Windowsコマンドプロンプトのmoveコマンドが何度も構文エラーエラーを吐き出す件。
その他(プログラミング・Web制作)
-
15
DOS コマンドの~zfの意味を教えてください。
Windows Vista・XP
-
16
DOSコマンドのFOR文で空白を含むファイルパスの指定方法
UNIX・Linux
-
17
xcopyで特定のファイルのみをコピーする方法
Windows 10
-
18
python エラー
その他(プログラミング・Web制作)
-
19
バッチファイルで昨日の日付を取得
その他(プログラミング・Web制作)
-
20
データベース関係で、データの洗い替えとはどのような事を行うことでしょう
IT・エンジニアリング
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/2】 国民的アニメ『サザエさん』が打ち切りになった理由を教えてください
- ・ちょっと先の未来クイズ第5問
- ・【お題】ヒーローの謝罪会見
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
[DOS] コピー先に同じファイル...
-
ftp処理でmove(移動)を行いたい
-
ExcelVBAのDirでスペース含むフ...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
コマンドプロンプトで変数が数...
-
.batでファイル名から抽出して...
-
【vbs】ファイル名の検索と該当...
-
DOSのバッチ作成について‐FORの...
-
■ファイルのリネーム(rename)...
-
フォルダ内の更新日時が一番新...
-
【バッチファイル】forコマンド...
-
ファイル名の頭5桁と同名のフォ...
-
バッチにて複数のcsvファイルを...
-
access,vbaでフォルダ内のファ...
-
[コマンドプロンプト]世代管理...
-
ExifToolでの文字化け対策
-
VBA GetAttrについて教えてくだ...
-
バッチファイルでファイルを置換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
[DOS] コピー先に同じファイル...
-
ftp処理でmove(移動)を行いたい
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
コマンドプロンプトで変数が数...
-
ExcelVBAのDirでスペース含むフ...
-
.batでファイル名から抽出して...
-
フォルダ内の更新日時が一番新...
-
ファイル名に ” を使うと エク...
-
バッチコマンドでファイル名の...
-
サブフォルダからファイルをコ...
-
ファイル名の頭5桁と同名のフォ...
-
access,vbaでフォルダ内のファ...
-
ファイル名を該当フォルダ内か...
-
VBA GetAttrについて教えてくだ...
-
word VBA ファイル名 保存
-
DOSのバッチ作成について‐FORの...
-
【vbs】ファイル名の検索と該当...
-
【DOSバッチ開発】末尾のタブの...
おすすめ情報