痔になりやすい生活習慣とは?

引数1をbatの実行中に変更することは可能でしょうか。

例えば以下のようなバッチで当初「file1」を扱おうとしていたのに、
実行中に「file2」に変更したいというようなことです。

実行
abc.bat file1


abc.batの中身
echo off
set /a flength=%~z1
echo %flength%
pause
exit /b

宜しくお願いします。

A 回答 (6件)

>やりたいのは、batの中で設定したfile2のサイズを表示させたいのです。


no.4で、

set file=%1
としてるところを
set file="file2"
とするだけですよ。
    • good
    • 0
この回答へのお礼

何回も有り難うございました。
出来ました。

何回も前に解決していたんですね、
分からない人間は呆れますね。
申し訳在りませんでした。

これでやりたいことが出来るようになりました。
ライブラリに追加しておきます。

本当に何回も何回もお手間を掛けお世話になりました。
深謝申し上げます。

お礼日時:2017/06/10 16:34

説明不足ですいません。


最初に回答したとおり%1を変えることはできません。
Shiftで複数引数がある場合はずらすことができますが。。。

また引数でない変数に~zするのは先の方法しかないようです。

なので%1をfileという変数に一旦いれて変えたい場合はそのfileって変数を本当は%1にいれたかったものにすれば目的は果たせるのではないでしょうか?
    • good
    • 0
この回答へのお礼

何回も有り難うございます。
言われることは分かるような気がしますが、

>変えたい場合はそのfileって変数を本当は%1にいれたかったものにすれば
 まさに、この「いれたかったものにすれば」が分からないのです。

一つ前に頂いた例示では、
例えば、
sample.bat file1
とやったときに、file1のサイズは表示されますが、
やりたいのは、batの中で設定したfile2のサイズを表示させたいのです。
このfile2をfile1と置き換える方法が知りたいのです。

そもそもが、%~z1が引数にしか使えないことから本件の質問が始まっています。
無理ですかね。

ダメなら諦めます。
宜しくお願いします。

お礼日時:2017/06/09 19:45

うーん、すいません、やっぱり試して回答しないとだめですね。


そのままだとうまくいかないですね。

BATファイルの中で以下のようにするととりあえずとれました。

set file=%1
for %%i in (%file%) do (set filesize=%%~zi)

echo %filesize%

でも、解せないのでもうちょっと調べます。
すいません。
    • good
    • 0
この回答へのお礼

何回もお手間を掛けさせ、恐縮です。

例示いただいたものは分からないなりにやってみました。
問題無く動きましたが、%1を変更する部分が何処にあるのか分かりませんでした。
初めに置いた第1引数はちゃんと参照してくれましたが。

分からなければ諦めますが、
再考していただいているようで心強いです。
引き続き宜しくお願いいたします。

お礼日時:2017/06/09 09:35

>%~z1部分


「~z」は変数に対して実行するものですので、引数以外でも大丈夫です。
SET文をお調べください。
    • good
    • 0
この回答へのお礼

何回も有り難うございます。

申し訳在りません、
set および、 ~z を調べましたが、
駆け出しの私の頭では分かりませんでした。
恐縮ですが具体的な例示を頂けると嬉しいのですが、
お願いできなければ諦めます。
お世話になりますが、宜しくお願いします。

お礼日時:2017/06/08 09:12

引数1を環境変数へ入れるsetコマンドと


別の値を環境変数へ入れるsetコマンドを用意しておき、
そのどちらかへ分岐させるようにすればいい。

都度手入力するのか、あらかじめ決まっている値を設定するのか、
分岐の条件はどうするのか、
など様々な状況が考えられるので、すべてを満たすようなバッチファイルにすると面倒。

何をしたいのかを今一度よく整理してみましょう。
    • good
    • 0
この回答へのお礼

早速有り難うございました。
1番の方と同じなのですが、予め%1に相当するモノが準備できるなら
言われる内容で可能かと思うのですが、
上記例の  %~z1部分をそのまま使いたいのです。
例では割愛してありますが、割愛した部分で最終的にどのファイルを扱うかが決まり、
そのファイルの長さを表示したいのです。
なので、事前に考え得るファイル全てを用意したくないのです。
もし言われていることの解釈が違っていたら申し訳在りません。

頓珍漢とは思いますが、イメージとしては以下のようなことを想定しています。
set %1=file2

宜しくお願いします。

お礼日時:2017/06/07 21:16

要件が不明ですが、引数は事実でしかないので変えることはできません。


しかし、例えば引数で渡されたのを「処理対象仮」の変数に入れておいて、変えたいときに「処理対象仮」にfile2を代入すればいいのではないでしょうか?
    • good
    • 0
この回答へのお礼

早速有り難うございました。
>引数は事実でしかないので変えることはできません。
  了解です、やはりダメですよね。

言われていることは分かるような気がするのですが、
具体的に、上記例の set /a flength=%~z1 の %~z1部分を
このまま使おうとすると、どうしても %1にfile2をset出来ないといけないと思うのですが、
如何でしょうか。
(私のレベルでは思いつかないのですが)

お礼日時:2017/06/07 21:06

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


人気Q&Aランキング