[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 22:30 / Filesize : 139 KB / Number-of Response : 837
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【.cmd】 バッチファイルスクリプト %1 【.bat】



1 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 21:33:11 ]
拡張子が .cmd または .bat のバッチファイルの
スクリプティング(プログラミング)にかかわる
質問,テクニック(JScript,Perl等の埋め込みなど含む),
関連情報のためのスレです。

【関連スレ】
バッチファイルプログラミング 3.bat
pc11.2ch.net/test/read.cgi/tech/1148485555/
WSH(・∀・)スレッド! Part 2
pc11.2ch.net/test/read.cgi/tech/1176698934/
Windows PowerShell (正式版リリース)1.0
pc11.2ch.net/test/read.cgi/tech/1163818863/
HTAをもっと流行らせる計画
pc11.2ch.net/test/read.cgi/tech/1124559962/
ユーザー必読!コマンドライン(DOS Pt.6)
pc11.2ch.net/test/read.cgi/win/1176558776/
MS-DOS・Win3.1総合スレッド
pc11.2ch.net/test/read.cgi/win/1025462258/

※なんでも無理矢理バッチでやろうとせずWSH等の使用も
  検討しましょう。

545 名前:デフォルトの名無しさん [2007/09/11(火) 19:14:05 ]
今時バッチの入門書なんて

546 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:16:28 ]
>>543
そもそも動作環境が違うんだから、比較する意味が無いだろう。
むしろ将来的にパワーシェルがWindows標準になる事を考えれば、
そっちのほうが。

バッチファイルはちょっと複雑な事をさせようとすると、感覚的に
わかりづらい記述になるので、バッチファイルを極めるより、WSHを
覚えたほうがマシだね。

ちなみにモレは丁度、一昨日買った所。1キー入力で反応させるのとか目から鱗だった。

547 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 15:32:16 ]
本の宣伝にしか見えないんだけどw

548 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:19:39 ]
宣伝にマジレス。漏れおわった・・・・

549 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 08:44:07 ]
>>543
すげーな。俺この本買ってUNIXに乗り換えるわ。
お前らはいつまでもしょぼいバッチファイルをしこしこ書いてなさいってこった。

550 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 11:23:01 ]
rem文中のメモでも %~~ の表記があるとバッチが落ちて驚いた
ということはremでメモを残すことにもリスクがあるのか

551 名前:デフォルトの名無しさん [2007/09/13(木) 16:20:51 ]
aaa.log というファイルが0バイトなら削除するっていうのはどう書いたらいい?

552 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 16:26:59 ]
call :main c:\test.txt
exit /b

:main
if "%~z1"=="0" del "%~1"

553 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 18:59:32 ]
@echo off && goto enddoc

    指定時間まで寝るコマンド

:usage
    echo Usage: SleepAt TIME [COMMAND]
    echo.
    echo Sample: SleepAt 16:00 %systemroot%\media\tada.wav
    goto exit

:enddoc

    if "%~1" == "/h" goto usage
    if "%~1" == "/?" goto usage
    if "%~1" == "" goto usage

:loop
    title sleepat %~1 now:%time:~0,8%
    if "%time%" gtr "%~1" goto exit
    sleep 1
    goto loop

:exit
    if "%~2" == "" exit /b
    %2 %3 %4 %5 %6 %7 %8 %9




554 名前:903 [2007/09/14(金) 02:04:28 ]
バッチファイルに
Format C とかいて
スタートアップにおいたらどうなります?

555 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 02:09:21 ]
>>554
無効なドライブ指定です。

556 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 08:12:57 ]
>>554
アクセスは拒否されました。

557 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:16:40 ]
質問させてください。
FireFoxとかインストールするときに次へ進むボタンとかあるけど
batだけで全部処理できますか?

558 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 18:38:00 ]
ここはバッチでプログラミングするスレなので、
既にバッチを使いこなせる人を対象としています。

バッチを知らない人やバッチ初心者はこちらへ

ユーザー必読!コマンドライン(DOS Pt.6)
pc11.2ch.net/test/read.cgi/win/1176558776/

559 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 02:29:17 ]
558(荒らし)の言っていることに騙されてはいけませんよ。

560 名前:デフォルトの名無しさん [2007/09/19(水) 10:55:29 ]
ファイルの中に特定の文字列があれば削除するってのはどう書けば良い??

561 名前:560 [2007/09/19(水) 11:04:30 ]
ごめん、できた。
ありがとう。

562 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 13:46:02 ]
特定の文字列があれば、そのファイル自体を削除するのか
その文字列を削除するのかわからないけど
バッチ組めたならアップしておくと参考になっていいと思うよ

563 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 15:07:03 ]
その程度の物に参考も糞もあるかよw



564 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 10:42:30 ]
バッチでバイナリって扱えたっけ?

565 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 16:27:14 ]
/b

566 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 20:55:45 ]
テキストもある意味バイナリ

567 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 21:36:30 ]
いいえ、それはトムです。

568 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 19:41:48 ]
forの中でsetする時などは、遅延展開 !変数! を使うと思いますが、
名前に ! が含まれてるファイルを引数にすると期待通り動かなくなりますよね

callを使って遅延展開を代替することもできますが、やはり限界があると思います
みなさんははどうやって対処していますか?

569 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 19:47:01 ]
初心者はこちらへ

ユーザー必読!コマンドライン(DOS Pt.6)
pc11.2ch.net/test/read.cgi/win/1176558776/

570 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 19:51:13 ]
>568
他のスクリプト言語を使う

571 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:39:23 ]
なんだってエスケープは必要だろ

572 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:46:21 ]
>>568
対処法はWSHを使う

573 名前:デフォルトの名無しさん [2007/09/22(土) 16:47:45 ]
ユーザー必読!コマンドライン(DOS Pt.6) への誘導には
従う必要はありませんので。念のため。



574 名前:デフォルトの名無しさん [2007/09/22(土) 16:54:32 ]
任意のフォルダに任意のテキストファイル(内容在り)を
作成すること可能ですか?



575 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:58:33 ]
>>574
echo 在り > 任意の\任意の.txt

576 名前:574 [2007/09/22(土) 17:04:21 ]
>>575
ありがとうございます!

577 名前:574 [2007/09/22(土) 17:15:08 ]
度々すいません。
echo 「ファイル内容」 > 任意の\任意の.txt
のコマンドですが、
「ファイル内容」を複数行にしたい場合はどう記述すればよいのでしょうか?
\nとかは試してみましたけどダメでした・・・


578 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:29:07 ]
echo 1行目> 任意の\任意の.txt
echo 2行目>> 任意の\任意の.txt
echo 3行目>> 任意の\任意の.txt
……

579 名前:574 [2007/09/22(土) 17:31:19 ]
>>578
すいません。
どうもありがとうございました。

580 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:37:41 ]
小学生?

581 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:39:17 ]
>>580
例の病気の人ですか?

582 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 05:51:46 ]


583 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 14:34:48 ]
どっかで
echo >> filnemae.txt aaaaaaaaaaaaaa
echo >> filnemae.txt bbbbbbbbb
echo >> filnemae.txt cccccccccccccccccccccccccc
echo >> filnemae.txt dddddd

みたいな書きかたしててちょっとよさげにみえた



584 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 19:10:09 ]
filnemae?

585 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 20:14:20 ]
>>583
> filnamae.txt echo aaaaaaaaaaaaaa
>> filnamae.txt echo bbbbbbbbb
>> filnamae.txt echo cccccccccccccccccccccccccc
>> filnamae.txt echo dddddd

こんなんでもいいんだよね

586 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 19:00:48 ]
(
echo aaaaaaaaaaaaaa
echo bbbbbbbbb
echo cccccccccccccccccccccccccc
echo dddddd
) >> filnemae.txt


587 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 05:33:10 ]
へー、美しい書き方だな

588 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 20:31:51 ]
echo aaaaaaaa^
bb^
ccc^
ddd

もいけるぜ改行されないけど

589 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 21:44:08 ]
echo aaaaa^

bbbbb^

ccccc^

ddddd> failname.txt


でも行ける。改行がCR+LFでなくLFだけでも良ければ。

590 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 19:53:17 ]
dllの読み込みって、%path%とカレントディレクトリでどっちが優先されるのでしょうか?

591 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 20:12:46 ]
アプリケーション側で読み込む DLL のパスを指定していなければ
1. アプリケーションのあるディレクトリ
2. カレントディレクトリ
3. システムディレクトリ
4. Windows ディレクトリ
5. 環境変数 PATH に書かれているディレクトリ
の順。、

592 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 20:37:56 ]
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/dllproc/base/dynamic-link_library_search_order.htm
最近のWindowsでは、システム・ウィンドウズディレクトリより
カレントディレクトリの順位のほうが低い。

環境変数PATHより高いことに違いはないけどな。

593 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 20:38:55 ]
上のURLはローカルなms-helpだったな、すまん。
msdn2.microsoft.com/en-us/library/ms682586.aspx



594 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 20:49:39 ]
おまいらスレタイ見直せ

595 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 22:23:01 ]
>>1に書いてある関連情報の範疇

596 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 08:17:15 ]
powershellの話もここで扱うの?


597 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 08:20:41 ]
pc11.2ch.net/test/read.cgi/win/1163764836/

598 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 10:36:38 ]
win板か、じゃぁイラネ


599 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 09:56:34 ]
同一ディレクトリ内に、
同一内容のファイル(ファイル名は異なるが内容は一緒)があれば、
一方を削除して、その消したログを吐き出すっていう
バッチファイルを作りたいんですが・・・。
教えてエロイ人!

600 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 10:07:01 ]
まだ自分でプログラムを作れない初心者はこっちへ↓

ユーザー必読!コマンドライン(DOS Pt.6)
pc11.2ch.net/test/read.cgi/win/1176558776/

601 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 11:41:01 ]
600は荒らしなので無視してかまいません

602 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 11:56:59 ]
>>599
そういうのはWSHでやったほうが

603 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 12:02:15 ]
>>599
ifとforとerrorlevelとfcとdelでできるかも
遅いだろうね



604 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 12:15:46 ]
総当りになるからファイル数の二乗で処理が増えるわな
その前にファイルサイズでふるいにかけて…

UnDupでも使っとけって話だな。

605 名前:599 mailto:sage [2007/10/23(火) 12:46:41 ]
>>600-604

ありがとうございます!
やっぱり総当たりになるから遅いですよね。
ファイルサイズで対象を削ってから・・・なるほど。。。

WSHについても、調べてみますー。

606 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 19:22:57 ]
@echo off
setlocal EnableExtensions EnableDelayedExpansion
pushd %1
set FileSize=-1
set FileName=""
for /f "tokens=*" %%I in ('dir "%TargetDir%" /o:sn /b /a:-d') do (
if !FileSize! EQU %%~zI (
fc /b !FileName! "%%~fI">nul
if not errorlevel 1 echo del "%%~fI"
) else (
set FileSize=%%~zI
set FileName="%%~fI"
)
)
popd


607 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 19:27:23 ]
>>606
消し忘れた

誤: ('dir "%TargetDir%" /o:sn /b /a:-d')
正: ('dir /o:sn /b /a:-d')


あと、十分にデバッグしてもらった後に

誤: echo del "%%~fI"
正: del "%%~fI"


608 名前:606 mailto:sage [2007/10/23(火) 19:30:37 ]
・・・すまん
同じサイズで内容の異なるファイルが3つ以上あるとこれじゃだめだね。

めんどいので、後は任せた・・・

609 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:34:06 ]
>>599
WSHでやるなら↓を流用するといいかも
pc11.2ch.net/test/read.cgi/tech/1176698934/227-228

610 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 22:32:47 ]
わざわざ作ったのか

611 名前:606 mailto:sage [2007/10/23(火) 22:38:09 ]
任せた・・・とか言いながらやっぱり自分で書いてみたりして・・・

@echo off
setlocal EnableExtensions EnableDelayedExpansion
pushd %1
set FileSize=-1
set FileList=""
for /f "tokens=*" %%I in ('dir /o:sn /b /a:-d') do (
if !FileSize! EQU %%~zI (
call :CmpFile "%%~fI" !FileList!
) else (
set FileSize=%%~zI
set FileList="%%~fI"
)
)
popd
endlocal
goto :eof

:CmpFile
fc /b %1 %2>nul
if not errorlevel 1 (
echo del %1
REM del %1
goto :eof
)
shift /2
if not "%~2"=="" goto :CmpFile
set FileList=%FileList% %1


612 名前:デフォルトの名無しさん [2007/10/23(火) 22:48:54 ]
バッチのFOR文ってすごく難しいと思うんですが
自分だけでしょうか?


613 名前:デフォルトの名無しさん [2007/10/23(火) 22:50:38 ]
難しいかどうかは、人それぞれだろうが
奥が深いのは確か。



614 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 22:54:29 ]
難しいと言うより可読性がとても悪いような

615 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:06:15 ]
スペースでインデントするとIEでは(専ブラでも)削除されるからだよ。

エディタにコピペしてみ。

616 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:09:55 ]
for文の可読性の悪さはインデント関係ないよ

617 名前:デフォルトの名無しさん [2007/10/23(火) 23:56:08 ]
java なんてこうだぜ!

for (String str : a) {
 System.out.println(str);
}

コレに比べたら

FOR %%I IN (*.*) DO (
 ECHO %%I
)

こっちがマシ。

618 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:59:18 ]
どう見ても拡張しすぎだよな。
まったく異なる機能が一つのコマンドに無理やり詰め込まれてるって気がする。

ところで in のあとの ( ) は グループ化の ( ) より強いんだろうか?

619 名前:デフォルトの名無しさん [2007/10/24(水) 06:08:18 ]
つーかさっさとマルチタブなcmd.exe作れよ。糞エス
PowerShellでもガワが古いままとかドンだけてぇぬいてんだカス

620 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 07:51:29 ]
そんなぐらい自分でやれよ

621 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 11:28:23 ]
乞食らしくPowerShellIDEでも使わせてもらえよ。

622 名前:599 mailto:sage [2007/10/24(水) 12:02:13 ]
>>606さん

ありがとうございます!
早速、勉強しながらテストさせて頂きます!
こんなことがパッと書けるなんて、すごいなぁ。

>>609さん

おお!こっちも参考になりそうですね!
WSHも勉強してみたいと思います。

皆さん、色々ありがとうございましたー。

623 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:35:14 ]
unixみたいに、コマンドをバックグラウンド実行ってできないのでしょうか?



624 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:38:43 ]
ない
cygwinのbash使うか
start使うと別窓で開くが

625 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:15:39 ]
バッチじゃなくてOSやコマンドラインの話だな

626 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:24:34 ]
>>624
ありがとうございます。

コマンドプロンプトを非表示の状態でバッチを実行することってできますか?

627 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:49:25 ]
ここはパソコンの使い方を教える所じゃなくて
プログラムを作るスレ

628 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 17:08:00 ]
CreateProcessでSW_HIDEで実行すれば非表示に出来るが一般的とは言いがたいな。
start /min で最小化して実行するのが無難だな。

629 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:46:54 ]
627は阿保だろ

630 名前:デフォルトの名無しさん [2007/10/25(木) 03:01:55 ]
スタート⇒ファイル名を指定して実行

もしくはショートカットアイコンでも作ってクリックしろ

631 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 18:37:22 ]
>>626 FAQ >>358

632 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 18:43:48 ]
>>599
つ C:\Program Files\Support Tools\dupfinder.exe

633 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 23:05:33 ]
>>626
つ AT



634 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 23:53:11 ]
フォルダに入っているすべてのWMVをEXEに渡して
とある変換処理をさせています↓

FOR %%F IN (*.WMV) DO C:\CONVERT.EXE "%%F"

しかし、このEXEは出力先が指定できず、同じフォルダ内に結果のWMVを作ります。
それでFOR対象の中に変換後のWMVが入ってきてしまい、
必要のない変換を行ってしまいます。

こういう場合どう書けばいいんでしょうか?
変換後のファイルは頭に'[Converted]-'とつきます。
これがついてるものだけを弾きたいんですが。

私の古い知識では他のバッチを作るとか
リネームして戻すととかくだらない方法しか思いつきませんorz

それと最近のバッチコマンド(WinNT以降?)について
よく解説されてるサイトとかってあります?

635 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 00:18:38 ]
FOR %%F IN ('DIR /B *.WMV') DO C:\CONVERT.EXE "%%F"


636 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 00:21:38 ]
>>626
ftp://ftp.microsoft.com/ResKit/win2000/soon.zip

637 名前:デフォルトの名無しさん [2007/10/26(金) 00:25:34 ]
>>634
>それと最近のバッチコマンド(WinNT以降?)について
>よく解説されてるサイトとかってあります?

pc11.2ch.net/test/read.cgi/tech/1178281991/6

638 名前:デフォルトの名無しさん [2007/10/26(金) 01:26:13 ]
FOR %%F IN (*.CS) DO CALL :convert "%%F"
GOTO :EOF

:convert
SET T=%~1
SET T=%T:~0,12%
IF NOT "%T%" == "[Converted]-" C:\CONVERT.EXE "%~1"
EXIT /B


639 名前:デフォルトの名無しさん [2007/10/26(金) 01:29:56 ]
いかん、まちごた。WMV やった・・・
FOR %%F IN (*.WMV) DO CALL :convert "%%F"
GOTO :EOF

:convert
SET T=%~1
SET T=%T:~0,12%
IF NOT "%T%" == "[Converted]-" C:\CONVERT.EXE "%~1"
EXIT /B

要するに、頭12文字が [Converted]- で無いヤツを処理するサブルーチン
つくればよかたい。

640 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 03:47:01 ]
>>634
同じフォルダ内というのが、CONVERT.EXEのあるフォルダじゃなくて
カレントディレクトリっていうことなら、話は簡単だが?

641 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 03:57:46 ]
>>635より簡単?

642 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 22:02:02 ]
for /f %%s in ('コマンド') do if errorlevel 1 echo %%s

'コマンド'のerrorlevelによって、'コマンド'の出力の処理を変えられますか?


643 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 22:37:44 ]
>642
そういう初歩的な話はこちらへどうぞ↓

ユーザー必読!コマンドライン(DOS Pt.6)
pc11.2ch.net/test/read.cgi/win/1176558776/



644 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 22:39:14 ]
初歩的じゃないんだけど

645 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 22:44:13 ]
643はねんねの時間ですよー(^o^)






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<139KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef