progtips

argcを取得する

最終更新:

progtips

- view
メンバー限定 登録/ログイン

ソース

setlocal
set argc=0
for %%a in (%*) do set /a argc+=1

解説

if "%1"=="" などとしてもよいが、%1の内容にクォートが含まれる場合にはエラーになってしまう。たとえば、下記のように"Program Files"を含みたいような場合。
%1="C:\Program Files\"
if ""C:\Program Files\""=="" echo 1
Files\""=="" の使い方が誤っています。
引数の全指定 "%*" はSHIFTの影響を受けないので、以下のようなソースの場合には問題を生ずる。
echo [%*] %1 %2 %3 %4 %5
shift
echo [%*] %1 %2 %3 %4 %5
shift
echo [%*] %1 %2 %3 %4 %5
引数として(1 2 3 4 5 6 7 8)を与えた場合:
[1 2 3 4 5 6 7 8] 1 2 3 4 5
[1 2 3 4 5 6 7 8] 2 3 4 5 6
[1 2 3 4 5 6 7 8] 3 4 5 6 7
上記の方法では%1と%2を固定しつつ、それ以降を%*として使い、%10以上も安全にアクセスできるようにすることができない(SHIFTをしても%*がシフトされないため)。

実例

alias.cmd
@echo off
setlocal

set argc=0
for %%a in (%*) do set /a argc+=1
set name=%1
set prog=%2
if %argc% lss 2 (
	echo usage: alias alias-name binary-path
	echo example: alias ls c:\bin\ls.exe
) else (
	echo @echo off>d:\bin\%name%.cmd
	echo %prog% %3 %4 %4 %5 %6 %7 %8 %9 %%*>>d:\bin\%name%.cmd
)
記事メニュー
目安箱バナー