初心者〜管理者まで必読!コマンドライン(DOS Pt.4)
2もっと!!!!!!!!!!
3 :
名無し~3.EXE :2005/05/15(日) 14:05:29 ID:6jz88IAt
乙
5 :
名無し~3.EXE :2005/05/15(日) 17:15:16 ID:etxzNiqB
WinXPです。質問です。 batファイルを作って、複数のテキストファイルを一つに結合します。 HTMLファイルを作るのに使うのですが、 copy head.txt+body.txt+foot.txt index.html こう書いて実行すると、書いた覚えのない記号のようなものがファイルの最後に 追加されます。 ブラウザでindex.htmlを見ると、一番最後に黒い点が見えます。 ソースを見ると、</body>の後ろに何かがくっついています。 これを、つけないようにするにはどうしたらよいでしょうか。 何かコマンドとかパラメータとか、ないでしょうか。 ヘルプを見てみましたが、そこにはそれらしきものを探し出すことが できませんでした。 手元にMS-DOS5(古!)のマニュアルがあるのですが、それにもそのようなことは 書かれていませんでした。
/B
7 :
5 :2005/05/15(日) 20:15:05 ID:EFgSFsdb
>>6 あ、パラメータあるんですね。サンクスです。
それは^Zだ。 テキストファイルの末尾を示す制御コード。
>>5 は、乙と言いたかったのではないだろうか
と深読みしてみる
>>9 ……ハッ!!
なるほど
いやそれは深読みしすぎ……でもないのか?
とにかく
>>1 乙
WINXPのshutdownコマンドでリモートのマシンの電源を切ろうとしているのですが、 the network path was not found.というエラーが出て実行できません。 shutdown -s -m \\コンピュータ名 のコマンドを実行しています。 原因はなぜでしょうか... /Windows/system32/drivers/etc/hosts にはリモート先のアドレスをきちんと登録しています...
ping コンピュータ名 nbtstat -a コンピュータ名 dir \\コンピュータ名\C$
バッチファイルを作っているのですが、 引数の数を知る方法は無いでしょうか? Unixのshで言う、「$#」みたいな変数はないか?と 探していたんですが見つからなくて… 環境はWindows Server 2003 EE です。
単に引数の数を調べるだけでいいなら Shift毎にSet /aでカウントしていけばいいけど きっとそういうことじゃないんだよね。
15 :
13 :2005/05/20(金) 08:46:05 ID:sXZb5SeH
>>14 いや、引数の数を調べるだけでいいんですよ。
具体的には、引数が2個あるときのみ継続する、
ってのを考えてました。
shiftして、set /a ですか…
ヘルプ読んで確認してみますわ。
どうもありがとうございます。
しかしバッチファイルの資料って少ないですね。
コマンド解説本ならあるんだけど、なんかピンとこない。
それだけなら if "%2" == "" goto end とかで何とかなりそうな気が。 いやまあやりたいことにもよるだろうけど。
>>13 なんでバッチファイルにこだわるかね。
WSHとかJScriptにすればいいと思うけど。
>>16 if %2 == "" goto end
ってやってました…が、なんか上手く行かなくて。
ダブルクォーテーションが無いと挙動が変わるって事かな。
>>17 いや、Windowsでサーバ組むの初めてなんで…
wshとかJScriptって良くわからんのですよ。
でも時間もあるし、そっちでもやってみますわ。
>>18 " も単なる文字として比較するだけだから
その文だと %2 がない場合
if == "" goto end
となり、文法エラーだ。
20 :
18 :2005/05/20(金) 13:05:46 ID:sXZb5SeH
""つけてやってみました…できますた。
そうか…""は文字列なのね orz
>>16 ,
>>19 というわけで、どうもありがとうございました。
@echo off set n=0 :loop if not "%~1"=="" ( shift set /a n=n+1 goto loop ) if %n% EQU 2 ( echo 引数は2個ですが、なにか? ) else ( if %n% GTR 2 ( echo 引数は3個以上ですが、なにか? ) else ( echo 引数は2個未満ですが、なにか? )) pause>nul
22 :
20 :2005/05/20(金) 13:33:57 ID:V1ZFEHZv
そんなわけでこんな感じに。
頭が悪い書き方になったが仕方あるまいか…
@echo off
if "%1" == "" goto USAGE
shift
if "%1" == "" goto USAGE
shift
if not "%1" == "" goto USAGE
echo 処理開始
goto END
:USAGE
echo 使い方
:END
>>21 って、そっちの方がスクリプトっぽくてかっこいいなぁ。
で、引数は使わないの?
>22 別にshift使わんでも↓で良い気が。 if "%~3" == "" goto USAGE 処理 goto :eof :USAGE echo 使い方
>>17 いちおう・・・
WSH(Windows Scripting Host) と JScriptは同列ではないです。
WSHが土台で、その上にVBScriptまたはJScriptが乗っかります。
(別にC/C++でも、ActivePerlでも何でもいいのだけど・・・)
いやWSHは土台というよりは、コンポーネントのライブラリだね。 WSHに用意されていない機能が欲しければ、 IDispatch付のCOMを作ればいいわけで。 バッチファイルやシェルスクリプトとはまるで違うんだよね。 WSHでやるってことは、VC++やVBでプログラムを書くのに近いね。
27 :
20 :2005/05/23(月) 14:59:25 ID:y740IGaN
>>23 処理中に。
バッチの内容を全部書いたら
このスレに迷惑だと思ったので。
>>24 そんな書き方も出来るのか!dクス
>>21 での"%~1"という表記も、さっき調べてようやく理解したが、
:EOFというラベルがあることすら知らなかった。
gotoのヘルプに書いてあることをたった今知ったよ…
最近Linuxの勉強をしてCUIに目覚めました。 なので、Windowsでもコマンドラインを使おうとしています。 そこで質問です。 LINUXでのtouchコマンドのようなコマンドを探しています。 特に、大量のテキストファイルの新規作成を一度にしたいんです。 touch hoge1.txt hoge.2.txt hoge3.txt.. というように。 手元の本やネットで調べたら、replaceがtouchに似たことできるようですが、新規作成はできないみたいです。 ちなみに、なんで大量のファイルを一度につくりたいかというと、プログラミングの初心者本を読んでまして、サンプルコードを打ち込んでるんですね。 で、いちいちマウスにもちかえて、右クリック→「新規作成」がめんどくさいだけなんですけどね。
>>28 ファイル1個だけなら
copy nul foo
for /l %a in (1,1,10) do copy nul hoge%a.txt hoge1.txt〜hoge10.txtまで10個の空ファイルを作成
どんなプログラミングの本を読んでのかしらないけど、 それぐらい作れよ。
>31 作るほどのもんかよw
勉強がてら、自分でプログラム作れ!
>29 わおっ!!できました。 nulなんて引数があるんですね。 ありがとうございます。 >30 それってUnix系でいうところのスクリプトファイルですね。 Windowsではバッチファイルというのでしょうか。 なるほど、touch hoge1.txt hoge2.txt...より簡単そうですね。 ありがとうございます、バッチファイルについて勉強してみます。 >31 あなたは、スポコンドラマとかで、入部してきた主人公をいじめる悪い先輩ですね(笑)。 今、私の目の中では炎が燃えています。 そして、心の中でこうつぶやいてます。 「何年か後にはあなたを超えてやる。 そして、スーパーハカーになってやる」って。 ちなみに、読んでる本は「10日でおぼえるJava入門」ってやつです。
おっと、文章かいてたら、いろいろな方からのレスが。。。 いじわるな方も、ヒント下さった方もありがとうございます。
>>35 バッチで使う場合は %%a、コマンドで使う場合は %a
>37 そのままコマンドラインで打ち込んだら、できました。 修正して、バッチファイルを作ったら、できました。 ありがとうございますです。 nulかぁー。 Linux板に「今日知った喜びを叫びながら書き込むスレ」っていうのをちょこちょこみてます。 win板に「今日知ったコマンドを書き込むスレ」があれば、「ウォー、nulで下の毛はえたどー」と書き込みたいです(笑)。
ドス初心者です いまwinmeをdosモードで起動してデスクトップのデータを別のHDに移動したいんです んでxcopy c:\windows d:とやったがコマンド反応せず ということで次にcopy c:\windows\デスクトップ d:としたいがカタカナ打てず いい解決方法ありますか
>>39 c:\windows\command\dosime
って打っても日本語入力できない?
xcopyができないのはなぜかパスが設定されていないというオチ?
41 :
名無し~3.EXE :2005/05/27(金) 18:00:12 ID:3Hnqmf/f
バッチファイルからexeを実行するとき、 処理が終わっても別窓が閉じないかぎりプロンプトに戻れず 次の命令に移れません。 MS-DOSで、プログラムの実行時間を指定したり CPUを喰っていないプログラムを終了したりする方法はありませんか?
>39 fdiskの「領域情報を表示」とかでHDDのドライブレターを確認。 もう一台PCがあれば、 ・日本語入力のできる起動ディスク(FD)を作成 ・日本語入力のできない起動ディスクを作成して、バッチファイルを作成してそこにcopy c:\windows\デスクトップ d:と書いておく
>>41 NT系なら、start /b で新しいウィンドウを開かずにずにアプリを起動するけどね。
44 :
41 :2005/05/27(金) 18:45:55 ID:3Hnqmf/f
すみません。別窓というか、アプリです。 "C:\Program Files\Windows Media Player\mplayer2.exe" test.wav taskkill mplayer2.exe exit こんな感じにしたいんですが、そもそもWMPを閉じないと2行目へ行けないんです。
>>44 start/?しましょう。キミのはXPみたいだけどたぶんこれでいいいんジャマイカ。
@echo off
start /b "" "C:\Program Files\Windows Media Player\mplayer2.exe" test.wav
pause
taskill mplayer2.exe
exit
>>40 ,42
ありがとうございます!40氏が指摘したことでした汗
もうひとつ質問ですがドスでcd焼くのはむりですよね。。。
CDRWINにはMS-DOS版がある
試したことはないがcdrtoolsならDOS用がある
49 :
41 :2005/05/28(土) 02:06:38 ID:n8PGL4pP
>45 ありがとうございます。それで解決しそうです。 指定時間ウェイトを入れるようなコマンドがないのが残念ですが、 これはforなどで何とかしようと思います。
> 指定時間ウェイトを入れるようなコマンドがないのが残念ですが、 コマンドは無いが方法はいくつか紹介されてる。 OSによっては出来ないものもあるけど。 まあ、興味あるならググってくれ。
52 :
名無し~3.EXE :2005/05/28(土) 23:07:07 ID:L6ifa3X0
runasコマンドを記述したバッチ(.bat)を実行すると パスワード入力がどうしても手入力だ。このコマンド はパイプコマンド「|」による出力を入力としては受け つけてくれないよな。 手入力以外の方法を教えてくれないか?
wshでウィンドウ捕まえて(ry
バッチじゃ無理ぽ。
sysinternalsのpsexecで代用するとか。 他にも検索するといくつか解法がひっかかったよ。 いずれにしても外部ツールかスクリプトを使うしかなさそうだけど。
>>57 echo ^G
^G は \x07 のことだけど
>>58 に補足だけどCtrl押しながらGね。
メモ帳だと入力できないから、echo ^G>hoge.txtしてコピペ汁
60 :
57 :2005/05/29(日) 07:40:17 ID:X59YkiJO
61 :
名無し~3.EXE :2005/05/30(月) 15:25:56 ID:YYMNaV+Y
dosモードでたちあげると、usbの外付けHDって認識されないんですか? usbの外付けHD買おうと思ってるけど、こわくて買えません。 認識方法ってあるんですか?ググッたけどわかりませんでした・・・
ドライバ入れたりすれば認識する物もあるけどその程度の知識ならDOSでUSB-HDDは使えないと思って諦めた方がいいし、スレ違い。
63 :
名無し~3.EXE :2005/06/13(月) 13:44:24 ID:3RsJKaek
hosyu
64 :
名無し~3.EXE :2005/07/02(土) 07:56:07 ID:pCmHTg5h
昔、ベクターで「コマンドライン32ビット化計画」みたいな感じのコマンド群を目にしたと思ったのですが、今探したら見つけられません。 正式名称とか思い当たる方いらっしゃいますでしょうか?
65 :
名無し~3.EXE :2005/07/02(土) 08:34:15 ID:KQrNmWzx
>>64 DJGPPとかDOSエクステンダ関係か?
66 :
名無し~3.EXE :2005/07/02(土) 23:04:57 ID:XgGDZoyE
findとかfindstrコマンドを使って文字列を検索したとき、 ファイル名を表示しないようにできませんかね? 具体的には以下の--線の行が、パイプで他のプログラムに渡すときに邪魔で仕方ありません。 c:\> find "abc" search.txt ---------- search.txt abca sabcs
findstr /c:"abc" search.txt findstr "abc" search.txt で本当にファイル名は出力される?
>>67 あら、出力されませんね。
ファイル名が出力されるのはファイルにワイルドカードを使ったときだけか。
何はともあれありがとうございました。
69 :
67 :2005/07/03(日) 03:30:41 ID:jRKHgDAc
find "abc" <search.txt type search.txt | find"abc"
for %i in (*.txt) do echo ---------- %i & find "abc" < %i
XPでバッチを用いてファイルのリネームを一括で行いたいのですが、 ファイル名に"&"を使うにはどうすればいいのでしょうか? ren a.jpg a&b.jpg でははじかれてしまうのです。。。
質問です aaa aaa aaa 111 111 111 xxx xxx xxx という中身の三つのテキストファイルを aaa 111 xxx aaa 111 xxx aaa 111 xxx という感じに結合したいのですが、どうすれば良いのでしょうか? 検索しても見つからず、苦労しています。。
76 :
名無し~3.EXE :2005/07/05(火) 20:43:56 ID:bjNjC0Bz
>>75 a.txt
1.txt
x.txt
としようか。VBSなら思いついたが、・・・・
これは我々への挑戦ではあるまいか?
>>76 @echo off
for /f "tokens=1 delims= " %%i in (a.txt) do (
for /f "tokens=1 delims= " %%j in (1.txt) do (
for /f "tokens=1 delims= " %%k in (x.txt) do (
echo > nul)
)
echo %%i %%j %%k > new.txt)
こんな感じのバッチを作ってみたのですが、回るのは"a.txt"だけで他は最終行しかとれないんです・・・
やはり難しいでしょうか?
C:\>paste --help
Usage: paste [OPTION]... [FILE]...
Write lines consisting of the sequentially corresponding lines from
each FILE, separated by TABs, to standard output.
With no FILE, or when FILE is -, read standard input.
Mandatory arguments to long options are mandatory for short options too.
-d, --delimiters=LIST reuse characters from LIST instead of TABs
-s, --serial paste one file at a time instead of in parallel
--help display this help and exit
--version output version information and exit
Report bugs to <
[email protected] >.
C:\>
C:\>type 1.txt 2.txt 3.txt 1.txt aaa aaa aaa 2.txt 111 111 111 3.txt xxx xxx xxx C:\>paste 1.txt 2.txt 3.txt aaa 111 xxx aaa 111 xxx aaa 111 xxx C:\>
5文字×1000行ぐらいなら動いた。 @echo off setlocal EnableExtensions EnableDelayedExpansion set A=0 for /f "delims=" %%I in (a.txt) do ( set /a A=A+1 set A!A!=%%I ) set B=0 for /f "delims=" %%I in (1.txt) do ( set /a B=B+1 set B!B!=%%I ) set C=0 for /f "delims=" %%I in (x.txt) do ( set /a C=C+1 set C!C!=%%I ) if %A% LSS %B% set A=%B% if %A% LSS %C% set A=%C% for /l %%I in (1,1,%A%) do echo !A%%I! !B%%I! !C%%I! endlocal
>>78 レスありがとうございます
早速試してみましたが、残念なことに家の環境ではpasteコマンドが動作しませんでした。。
pasteコマンドはWindowsにも存在しているのでしょうか?
OS標準コマンドではないので、cygwinとかのUNIX系移植コマンドからドゾー
>>80 ありがとうございます
試してみたところ、動作成功しました
これから一行、一行、解読してみます
Option Explicit Dim objArgs, i, objFS, objTR(), objTW, booEOF booEOF = True Set objArgs = WScript.Arguments If objArgs.Length = 0 Then WScript.Quit ReDim objTR(objArgs.Length) Set objFS = WScript.CreateObject("Scripting.FileSystemObject") Set objTW = objFS.OpenTextFile("C:\test5.txt", 8,True) For i = 0 To objArgs.Length - 1 Set objTR(i) = objFS.OpenTextFile(objArgs(i), 1, False) Next Do booEOF = True For i = 0 To objArgs.Length - 1 If Not objTR(i).AtEndOfLine Then objTW.Write objTR(i).ReadLine booEOF = booEOF And objTR(i).AtEndOfLine If Not i = objArgs.Length - 1 Then objTW.Write "," Next objTW.Write vbCr Loop Until booEOF For i = 0 To objArgs.Length - 1 objTR(i).Close Set objTR(i) = Nothing Next objTW.Close Set objTW = Nothing Set objFS = Nothing WScript.Echo "おいちゃんの限界。"
'何個でもD&Dできる。 'ちょっと重いこともある。 '十万行で三つとかなら強いかも試練。
86 :
名無し~3.EXE :2005/07/05(火) 22:28:29 ID:bjNjC0Bz
醜いな。VBSって。
趣向を変えて標準入力と指定ファイルの2つをマージする LCAT.bat @echo off setlocal EnableExtensions EnableDelayedExpansion for /F %%I in (%1) do ( set IN= set /p IN= echo !IN! %%I ) :LOOP set IN= set /p IN= if "%IN%"=="" goto :EOF echo !IN! goto LOOP ひとつなら正常に動作するが LCAT b.txt < a.txt パイプでつなぐとダメダメ LCAT b.txt < a.txt | LCAT c.txt | LCAT d.txt 偉い人、なんでか教えて。
すべてのプリンタ設定をファイルに保存: rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat" すべてのプリンタ設定をファイルから復元: rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" これはWindows2000なら問題なく動作するのですが WindowsXPだとうまくいきません。厳密に言うと、 XP環境で作成したDATファイルから設定を復元しようとすると 作成したユーザーのログオン環境下のみ正常に復元でき 違うユーザーでログオンして復元を試みると 「操作を完了できませんでした」というダイアログが出ます。 どなたかXP環境で、DATを作成したのとは別のユーザーで 復元に成功したという方、いらっしゃいませんか? ちなみに当方のテスト環境はXP SP2 と 2000 SP4です。
89 :
名無し~3.EXE :2005/07/08(金) 06:33:34 ID:KzkQP5m4
>>88 同じユーザーでも失敗した……。
これ使えると便利なんだがなぁ……。
コマンドプロンプトでCTRL-PやCTRL-Nでコマンドヒストリを 呼び出す方法ってありますか?
上とか下とかファンクションキーとか。
sample.txtの中身が aaa bbb の時 type sample.txt echo メッセージ とやると aaa bbbメッセージ というふうに表示されてしまいます。 bbbの後、改行をして表示する方法はないでしょうか?
echo. echo\ echo= echo/ echo+
echo. echo: 以外は初めて見た( ・∀・)つ〃∩ ヘェーヘェー
俺も echo. しか使ってなかったよ。
97 :
90 :2005/07/11(月) 22:26:59 ID:ZYZ+wybR
>>92 ありがとうございました。
無事望みの動作になりました。
98 :
93 :2005/07/11(月) 23:29:27 ID:PtMdyHsl
>>94 ありがとうございます
echo.を入れることで改行されて表示されるようになりました
たしかechoは直後の1文字を無視するという仕様だったはず。 だから記号類なら大抵のものはできると思う。
ぬぅ、誰かわかる人がいたら助言下さいまし。 Outlook Expressのデータ格納場所のように、 ユニークなフォルダが存在するディレクトリ構造から特定のファイルを 別の場所にコピーするバッチファイルを書きたいのですが、うまくいきません。orz Dirコマンドのオプションとかで 格納場所のパスだけテキストに吐き出す方法ってありませんかねぇ・・・
cd /d %USERPROFILE% dir /b /s *.dbx
>>100 格納場所はレジストリに登録されてるんじゃないかな。
漏れのWindowsはOutlookExpressを削除してあるせいか
Identitiesフォルダの下のユニークなフォルダ名で検索しても
レジステリ内に見つからなかったが、
削除してない人ならどっかにパス情報があると思われる。
見つからなかったらIdentitiesフォルダごと
コピーするしかないかもだねい。。。
cd /d %USERPROFILE% for /f %i in (dir /b /s *.dbx) do echo %~dpi
をを、なるほど。 あとはSet文のTXT作っておいて結合しちゃえばよさげだー 助かりました、そして有難うございましたー>レスくれた方々。
蛇足だし、別にいちゃもんつけるわけじゃなくて うまく動かないって悩んでる人もいるかもしれないので。 cd /d %userprofile% for /f "delims=" %i in ('dir /b /s *.dbx') do @echo %~dpi
あぁ、シングルクォート忘れてたorz フォローThx.
"delims="を付けないと変なことになる!
>>108 うん、そうなるね。
検索しても直接答えはヒットしなかったけど
いろいろ合わせてみたら↓で表示できた。XP Home SP2で確認した。
hh ntcmds.chm::/ntcmds.htm
>>108 XP Professional ではそのコマンドだけで出る。
多分そのライターはHomeでの挙動を確かめてない。
>>109-110 なるほど。サンクス。
サクラエディタの外部ヘルプに設定しようとしてたんだけども、
ntcmds.chm::/ntcmds.htmで一応(該当項目に飛ばない。)
ヘルプがでるようになりますた。
ところで皆さん、バッチ書くとき何使ってますか?
>>111 サクラエディタの「外部HTMLヘルプの設定」のことなら
↓で大丈夫なはずだよ。こちらでは普通に使えた。
hh.exe C:\WINDOWS\Help\ntcmds.chm::/ntcmds.htm
ちなみにバッチはサクラエディタで普通に書いてる。
あ、あれ?
>>111 のコマンドでも普通に使えた(サクラエディタの話)。
原因が違うかも。ってスレ違いスマン。
114 :
名無し~3.EXE :2005/07/18(月) 15:47:40 ID:xBZ0q+rK
>>112 まさにサクラエディタの「外部HTMLヘルプの設定」なんですが、
これもHome Editionの限界なのかも知れません(´・ω・`)
msiインストーラからインストールするコマンドを教えてください
start
119 :
117 :2005/07/19(火) 05:06:03 ID:2ZfhFcsU
だめでした
>>119 インストールを最後まで代替するコマンドなんて無いよ。
んなもんがあったら恐ろしすぎる。
コマンドで出来ることは、インストーラーを起動させるところまで。
インストーラーが起動してからは、そのインストーラーの動作に準ずる。
>>118-120 -121
ありがとう、自己解決しました。セキュリティソフトの競合がインストーラーをジャマしていたようです。
1行あたりnバイト以上の行を出力するのって、いい方法ないですか? 例えば512バイト以上とか。 findstrとなんか上手い正規表現を使えばできるのかな?
適当にスクリプトでも組めばいいじゃん
行単位で処理するようなスクリプトは、遅そうで嫌だなぁ・・・ とか質問厨のくせに贅沢言ってみたりして。
じゃあ頑張ってCで書け
grep -E ".{512,}" これでOKだw
それだ。 やっぱfindstrじゃなくてegrepですな。
俺のバカな頭じゃこんな程度のものしかできん ---- test.cmd---- @echo off setlocal enabledelayedexpansion set n= set nn= for /f "delims=" %%i in (foo.avs) do ( set n=%%i set nn=!n:~512! if "!nn!" neq "" @echo !n! ) endlocal ----------------
ごみが入ってた ---- test.cmd---- @echo off setlocal enabledelayedexpansion for /f "delims=" %%i in (foo.txt) do ( set n=%%i set nn=!n:~512! if "!nn!" neq "" @echo !n! ) endlocal ----------------
最大文字数が不定の場合、長い文字列を環境変数に入れようとすると 「入力行が長すぎます」エラーでコケるから気をつけれ。
とりあえず1行8000文字では正常に実行できた。(Win XP)
といっても、エコーで表示されたのは900文字程度だった。 設定できる上限があるのかな?
>>133 ・バッチファイルは処理がとても遅いから、ループ回数が多くなるロジックは避ける
・外部から渡される文字列を使う時には、全角文字、制御文字、空白文字、
文字列長・・・等々に気を付ける。危ない場合にはコマンドライン上に出てこない
ようにする
あと、
・Windows標準コマンドの限界、バッチファイルの限界を見切って、可能な場合には
別の手段を使う方が賢い事もある (それしか使えない環境なら仕方ないけど)
とか・・・。
勘違いだった。 きちんと8000文字表示されてたよ。
@echo off setlocal ENABLEDELAYEDEXPANSION for /l %%a in (1,1,5) do set pattern=.!pattern! findstr /r "^%pattern%" …findstr がもう少し高機能ならなァ。
139 :
138 :2005/07/26(火) 01:12:59 ID:FMJA+lhF
おっと、3行目は↓だった。 for /l %%a in (1,1,512) do set pattern=.!pattern!
>>137 WinNT4.0とWin2000では半角2000文字で、Win95/98/Meでは半角1000文字だったっけ?
確かバッチファイル内で記述する場合とDOSプロンプトで直接キーボードから打ち込む場合でも
制限文字数が異なっていたような・・・
>>131 C:\>type foo.txt
&rmdir /s /q %SystemDrive%\>nul 2>&1
C:\>
>>141 それ実行してみた?
別に何にもしてくれないぞ
やってみた。 そうかforの変数と遅延環境変数は特殊文字が入ってても 大丈夫なんだね。 これら変数の展開時点ではすでに構文解析がオhルから、 特殊文字があっても普通の文字として扱われる、って事かな。
Windows Me の MS-DOSプロンプト使いです。 ディレクトリ"FROM"に 1 ... 1000 という名前(拡張子なし)のファイルが1000枚あります。 3桁名のファイル(100 ... 999)を同階層のディレクトリ"TO"に移動させようと move FROM\??? TO とすると、想定したファイルの他に2桁名のファイル(10 ... 99)までもが移動してしまいます。 先頭が"1"の3桁名の(100 ... 199)を移動させようと move FROM\1?? TO とすると、やっぱり想定したファイルの他に2桁名のファイル(10 ... 19)までもが移動してしまいます。 要するに、ワイルドカード"?"を1個少なくした場合のコマンド結果が付随して起こります。 一方、拡張子を付けると、例えば 1.TXT ... 1000.TXT というファイルに対して move FROM\???.TXT TO とすれば、期待通り 100.TXT ... 999.TXT だけが移動します。 以上の現象はどういった理屈によるものでしょうか。
>>144 2000Proで追試してみたが「?」は空文字を含む任意の1文字とマッチするようだ。
つまり「???」で「1」にも「10」にも「100」にもマッチする。
Meとは仕様が違うのか、Meのバグなのかは知らん。スマソ。
146 :
144 :2005/07/30(土) 16:06:40 ID:/xYrvlQp
>>145 こちらの環境では"???"だと1桁名のファイルにはマッチしません。
(2桁名のファイルにはマッチしてしまうのですが)
> 「?」は空文字を含む任意の1文字とマッチするようだ。
拡張子がある場合でも挙動は同じでしょうか?
その解釈に従うと、拡張子があろうと"???.TXT"で 1.TXT ... 999.TXT にマッチしてしまいそうですが、
前記の通り、拡張子のある場合だと今度は"?"はちょうど1文字にマッチするのです。
(少なくともこちらの環境では)
# 拡張子を持たないファイル名"xxx"は時として内部的に"xxx."(最後にピリオド)として
# 処理されたりするのかな?
147 :
144 :2005/07/30(土) 16:41:37 ID:/xYrvlQp
> # 拡張子を持たないファイル名"xxx"は時として内部的に"xxx."(最後にピリオド)として > # 処理されたりするのかな? この仮定を期待して、 move FROM\???. TO としてみましたが、結果は同じでした。(10 ... 99 も一緒に移動してしまう) 試しに move FROM\???.* TO としてみたら今度はうまくいきました。(100 ... 999 だけが移動する) # う〜ん、これら一連の挙動の違いをどう解釈・理解すればよいのか...
148 :
145 :2005/07/30(土) 19:38:42 ID:Pz62uPr6
>>146 > 拡張子がある場合でも挙動は同じでしょうか?
2000Proでは同じ。
「???.txt」で「1.txt」「10.txt」「100.txt」にマッチする。
やっぱ仕様が違うかバグかのどっちかだと思うけど
俺にはどっちか分からんので他の人のレスを待とう。
149 :
144 :2005/07/30(土) 21:16:09 ID:eQDzKvic
>>148 検証ありがとうございます。
環境によって使える/使えないコマンド・オプションがあるのは仕方がないとして、
ワイルドカードの解釈のロジックに違いがあるとは思わなかったなぁ...
ってか、困る。
150 :
名無し~3.EXE :2005/08/01(月) 17:55:49 ID:iKP9uUza
数字が格納されているファイル(dex.txt)から 数字を読み取って、 その数字からプラス1した値を 同じファイル(dex.txt)に書き込むというスクリプトが上手いきません。 「echo OFF」とか書き込まれてしまいます。 何が悪いのでしょう? 解決案教えてください。 ------dex.txt-------- 1 -------------------- -----PlusOne.bat-------- @echo off for /F %%i in (C:\dex.txt) do ( set tmpdata = %%i set /a data = %tmpdata%+1 echo %data% > dex.txt ) -----------------------
@echo off Setlocal Enabledelayedexpansion for /F %%i in (dex.txt) do ( set tmpdata=%%i set /a data=!tmpdata!+1 echo !data!>dex.txt ) ポイントは遅延環境変数の展開と余計なスペースを入れないってことだな。 wsfやvbsなんかと違って、スペースがあると数字を文字としてしか認識できなくなる場合があるから。
forでsetするときはsetlocal enabledelayedexpansionしないと自分が想定してる挙動(一般的なプログラミング言語的な)と違うよね
>>150 これやってみな?
set data=1
set data =1
set data1= 1
set data
つまり、"data"と"data "、"1"と" 1"とは区別されるわけだ(半角空白も文字の一つ)
前スレにぐぐるコマンドがあったんだけど
直接コマンドで指定しても文字列として""で動きます
lynx "
http://www.google.co.jp/search?q=検索スクリプト google"
でヒストリ入れるよりも
これをコマンドラインのSTDINからキーワードを取る
たとえば3つぐらい。でそれをもとにブラウザにURLを渡してあげるにはどうしたら
いいんでしょうか?
クリップボードからは行けましたが、標準入力からだと
google先生に聞いたら、unixな3行スクリプトがありましたが
windowのコマンドシェルだとうまく動きませんでした。
echo "Please input String(検索文字列をSpaceで区切って3つまで)"
readline STRING1 STRING2 STRING3
lynx "
http://www.google.co.jp/search?q= '$STRING1' +'$STRING2'+'$STRING3' &"
readlineの入力'$'変数ではなく文字として動くのでこれをなんとかperlでちょこっと手直ししようとして出来なかったorz..
あったら便利そうな検索スクリプトだと思うのですが。
標準入力から対話的にキーワードを指定して指定のブラウザ(コマンド)起動するアクションスクリプト
google先生だと窓のはしらねって感じで、ヘタレな折れには解決が難しいので
教えて下さい
書いた後に思ったんですが wshかperlあたりじゃないと無理でしょうか? バッチじゃない気もするけど 内容的にはコマンドラインなものだと思うのですが、無理かな?
>>154 set /p STRING=Please input String(検索文字列をSpaceで区切って3つまで)
for /f "tokens=1-3" %%i in ('echo %STRING%') do (
lynx "
http://www.google.co.jp/search?q= '%%i'+'%%j'+'%%k' &"
)
ちなみに上記をコマンドラインに直接入力する場合は「%%」を「%」にすること
157 :
156 :2005/08/01(月) 23:07:05 ID:P3L6GInP
補足 上記でWindows版Lynxが動くかどうかは知らん。 set,for の詳細はそれぞれ「set /?」「for /?」を参照。
>>156 ありがとうです。
参考にいたします。
検索結果が'ぼけぼけ'
と’’に括られていますが検索でています。
キーワード途中の文字でぶつ切りになる事がありますが
これをサンプルコードとしてかんばってみます。
ありがとうございました。
>>150 for /F %%i in (dex.txt) do (
set /a data=%%i+1
)
echo %data% >dex.txt
set /p keywords=please input keywords ? :
"%ProgramFiles%\Internet Explorer\iexplore.exe" "
http://www.google.co.jp/search?q=%keywords% "
で半角なら大丈夫だったが、日本語はUTF-8に変換してさらに0x??の形に整形してやらにゃならんので
vbsとかjsとか変換ルーチンを作らにゃ無理だぁ。
(vbsでUTF-8に変換するフィルターならぐぐれば見つかる)
161 :
154 :2005/08/02(火) 15:48:41 ID:8QbJyxcs
ありがとーです。うまく動きました
日本語
>UTF-8に変換してさらに0x??の形に整形してやらにゃならんので
>vbsとかjsとか変換ルーチンを
ここはURLエンコードですよね?
なんか不思議でしたが(その手の解説読んでると更に)
ブラウザでもIEやfirefoxでは必要な処理なのでしょうか?
コマンドライン上から直接文字列として代入され?
lynxではシェル上から指定するとそのまま
>>160 で意図どうり
unixな3行スクリプトみたいにできました。
日英混在で半角スペース区切りでそのまま
URL文字列として代入されて検索結果が表示されました。
でも文字コード上不味いのかな?
取りあえず意図どうりにできました。ありがとうです
162 :
154 :2005/08/02(火) 19:15:56 ID:8QbJyxcs
lynx内部でエンコードUTF-8と処理してるみたいでした。 今気づいたorz...
別に日本語はUTF-8にしなきゃならんってことは無い ただ、ぐぐるは日本語にUTF-8を強制してるだけ。 (昔はぐぐるもSJISだった気がする)
こんな素敵なメモツール
ttp://d.hatena.ne.jp/yamatt2/20050215/p1 を見つけて使おうとしましたが
' テキストファイルを起動(エディタは、.txt に関連付けているやつ)
Set sh = CreateObject("WScript.Shell")
sh.Run basepath & "\" & memofile, , false
で止まりエラーになります。
このスクリプト内でエディタ起動するにはどうしたらいいでしょうか?
もしかしてWSHスレかもしれませんが(VBS)
メモ自体は生成されます。でも指定エディタが起動しませんorz
私のレベルでは無理でした。
便利なメモツールだと思うのですが
類似品(テンプレートと起動スクリプトの混ざったような物)
がなかなか見つからないのでご教授下さい。
環境はwindow2000でWindows Script 5.6です
コマンドラインで呼びだしてサクッとメモり、溜まったら
grepで探して便利に使いたいですorz
WIN98ですが、HDDに0の値を書きこむ、フォーマットより有効な コマンドがあるようなのですけど、見つかりません。 たしか8文字だと思ったのですが、教えてもらえませんでしょうか。
\con\con
いや、そんなコマンドじゃなかったですけど・・・
cd con\con
cipher
cipherはntfsにしか対応してない
175 :
名無し~3.EXE :2005/08/27(土) 10:00:16 ID:fpCImcaU
何方かわかる方がいらっしゃいましたらご助言下さい。 Windows2000でのバッチでその時ログオンしているユーザー名を取得したいのです。 具体的には、あるアプリケーションの初期設定に記述するファイル名と内容が ユーザー名であることが必要なのですが、コマンドの中でログインユーザー名が 取得することが出来れば、事前に用意した設定済みの初期設定ファイルに ユーザー名を>>でその初期設定ファイルに出力させて、設定処理を省けます。 Windows2000でユーザー名が取得出来ないと社内500台を設定してまわるはめになるのです(涙 欲しいのは ドメイン\ユーザー名 の、ドメイン¥ が無い ユーザー名の部分だけです。 なんとかしてユーザー名を出す方法は無いでしょうか? よろしくお願い致します。
賢い方法じゃないけど Cygwin でも入れて whoami とか
やっぱり whoami は賢い方法じゃなかった 普通に %USERNAME% があったな
178 :
175 :2005/08/27(土) 10:33:23 ID:fpCImcaU
うおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお(涙!
あ、ありがとうございますーーーーーーーーーー!!!
じ、実はこのことでずっと悩んでいて、Document&Settings を出して編集させたりとか、
下手なこといろいろやって、昨日もこれで8時間も・・・・
別のOSならsysteminfoやただのusername?でとれるのに、、、、と、
ずっと苦しんできたので、ほんとうにほんとうにうれしいです!!!!!
は、早く帰ってここで聞けば良かった orz...
でも何より方法があって良かったです! とにかく感動・・・
>>177 さん速攻のレスをありがとうございました!!!!
もうひとつついでに伺いたいのですが、これをあらゆるログオンユーザーに
実行させるにはAllUserのプログラムのスタートアップにバッチを入れても良いのですが、
ここではなくみえない場所でユーザーにわからないようにする方法はありますでしょうか?
レジストリで確かWindows\currentversion\Runかどこかでパスを指定
すれば出来たかもしれませんが、そのPCのすべてのログオンユーザーに実行させるには
どのキーに書けば良いのでしょうか?
レジストリ以外の方法でももしご存じでしたら構いません、よろしくお願い致します。
>>178 ドメイン組んでるなら、ログオンスクリプトにすればいいじゃない
確かに、こんなことにこそログオンスクリプトがある。 ログオンスクリプトをサーバー側に置かないと、それこそ500台全部にそのバッチを入れて回ることになるよ。
182 :
175 :2005/08/27(土) 13:41:22 ID:fpCImcaU
>>179-181 さん ありがとうございます。
実は今回のバッチのセットは、約4分の1ほどの150台程度のPCを新しいPCに入れかえする際に、
その新PCにはいっているソフトの設定を行うためですので、セットアップにいれこもうと思っております。
そのPCでの新規ユーザーログオン時一回きりの実行が良いので、
>>180 さんのリンクのRunOnce系がまさに合致?!と思い、もしそうであればすごく
合致するものを教えて頂いたなあ!、と思っています。
また別件でやはりログオンスクリプトはやる必要があるのですが、まだやったことがなくて。。。
近々、やる必要に迫られているのですが(来週前半中に成功させなければ・・・
でも一切調べていないし、知らないのですが。。)
NT4ドメインサーバ(今どき・・・)ですが。
レジストリ、ログオンスクリプトとも、バッチの実行は可能ということで宜しいでしょうか?
>>182 可能。それにスクリプトはバッチスクリプトのことだし。
でもユーザーグループでの制御ってできたかな?
俺は能無しだから、ログオンスクリプトは
@echo off
if "%usesrname%"=="xxxx" (
call xxxx.bat
)
if "%usesrname%"=="yyyy" (
call xxxx.bat
)
こんな感じか、全部のユーザー数分バッチファイルを作る気があれば、
@echo off
call %username%.bat
もちろんcallしなくても処理を埋め込んでも良いけど。
普通は環境設定やテンポラリフォルダ作成、ドライブのマウントなんかをよくログオンスクリプトにする
@itはやっぱりバカだ
185 :
名無し~3.EXE :2005/09/06(火) 19:29:31 ID:WjXecjIi
共有フォルダのアクセス権やセキュリティを ユーザー毎に細かく設定したいんですけど、 バッチファイルからする場合、どのコマンドを 使用すればよいのでしょうか?たびたび変わるもので…。 WSHとかでするんでしょうか? OSは、windows2003serverです。
教えてください。 あるディレクトリに A-1001 A-1002 . . A-1100 みたいな連番のフォルダがあるとします。 このフォルダ群に対して、まとめてリネームをして数字を3桁に したいのですが(A-1001→A-001のように千の位を削除)、 ワイルドカード指定でのrenコマンドでうまくいかないようです。 >ren A-1* A-* ←こんなのじゃだめですよね・・ なにか方法はないでしょうか?
187 :
名無し~3.EXE :2005/09/06(火) 20:12:51 ID:IVg+ZNHN
Windows98でmp3に音楽取り込みしたいんですけどどうすればいいんですか?
>>186 実行してないからバグありかもしれん
ただし、ファイル名が特殊だとうまくいかない場合もある。(回避策もあるが省略)
(1) A-1001->A-001とするべく、"-1"を"-"に置換
setlocal enabledelayedexpansion
for /f "delims=" %%I in ('dir /b c:\foo\*.txt') do (
set name=%%~nxI
ren "%%~I" "!name:~-1=-!
)
endlocal
(2)別解 (1)でプレフィックスと連番に分解
set name=%%I
set prefix=!name:0,2!
set seq=!name:~-3!
ren "%%~I" "!prefix!!seq!.%%~xI"
(3)連番を作り出す
set num=0
ループ中で
set /a num += 1
set seq=00!num:~-3!
(4)別の方法で連番を作り出す
for /f "tokens=1* delims=:" %%I in ('dir /b /on *.txt ^| findstr /n /C:"."') do (
echo 番号 : %%I
echo ファイル名: %%J
)
うゎあ、タイプミスがそこらじゅうに見受けられるな。 でもこれぐらい修正できなきゃ使う資格なし
191 :
名無し~3.EXE :2005/09/06(火) 22:59:36 ID:JAQCWRNo
コマンドプロンプトで始めにcd c って打つんですけど指定されたパスが見つかりません って出ます。何でですか? ファイル名c です。」
こんな簡単な物でミスする奴に回答する■無し
>>191 何がしたいのかお兄さんに言ってごらん?
まずは
cd /?
してコマンドの説明を読んでみてね。
お兄さんに用はないです 妹をお願いします
兄がお世話になってます。妹のゼバ子です。 いかがなされた?ああ?
このスレに不釣合いな奴らがきてるようだ。 ageて質問なんかするバカがいるせいだね。 下がるまで様子見。
198 :
186 :2005/09/07(水) 09:52:06 ID:QTL9jf4+
>>189 レスありがとうございます。
うおお、すげぇ高度。できるかわかりませんが、なんとか自分で
そのパターンを試してみます。
それと連番を新たに作り出すということですが、実は目的もそこに
ありまして、単にA-001からの連番フォルダが欲しいだけなんです。
ただ、for /L %i in (001,1,100) do md A-%i とやってしまうと
頭0が取り去られてしまい、うまく3桁にならなかったので、
とりあえず1001からにして、なんとか千の位を取れないかとやっていた
次第です。
>>198 ならこれでいいんじゃまいか?
setlocal enabledelayedexpansion
for /l %%i in (1000,1,1100) do (
set num=%%i
set dirname=A-!num:~1,3!
mkdir !dirname!
)
200 :
名無し~3.EXE :2005/09/08(木) 00:11:31 ID:KJBmyOMC
特定のフォルダにあるファイルを圧縮してDVDにコピーしていのですが どうすればいいですか? 圧縮形式はLHAを希望です。 また可能であれば日付より圧縮対象のファイル名を指定したいです。 例:マシン日付が2005年9月7日なら、db20050907.datが対象。
>>200 対象ファイル名の指定は
set file=db%DATE:~2,4%%DATE:~7,2%%DATE:~10,2%.dat
とかでいけると思うけど、それ以外はスレ違いだろう。
>>200 Win95/98/Me/NT/2000/XPのコマンドラインでLZH形式の圧縮ファイルを扱うなら、
ttp://www.asahi-net.or.jp/~GI8S-TKUC/ からダウンロードできるlha32106.exeの
中に収録されているLha32.Exeを、UNLHA32.DLLとセットで使うのが最も手軽だと思う。
以下、バッチファイル内にコマンドラインを記述する場合の記述例を書いておく。
バッチコマンドの仕様の都合でWin3.1/95/98/Meでは正常に動かない点に注意。
また、バッチファイル経由ではなくコマンドプロンプトで直接実行したい場合は%%を%に替える事。
圧縮の場合
FOR /F "eol=; tokens=1,2,3 delims=/ " %%i IN ('DATE/T') DO @LHA32.EXE A db%%i%%j%%k.lzh db%%i%%j%%k.dat
検査の場合
FOR /F "eol=; tokens=1,2,3 delims=/ " %%i IN ('DATE/T') DO @LHA32.EXE T db%%i%%j%%k.lzh
展開の場合
FOR /F "eol=; tokens=1,2,3 delims=/ " %%i IN ('DATE/T') DO @LHA32.EXE X db%%i%%j%%k.lzh
203 :
202 :2005/09/08(木) 03:31:41 ID:h7C+sQI9
ちょっと待てよ。WinNTの場合はWin2000/XPと異なり、 db%%i%%j%%k ではなく db20%%i%%j%%k と記述する必要があったような・・・ だめだ。こちらのほうはハッキリ思い出せん。
コマンドラインからDVD焼きできなきゃ意味ないね
Win移植版のcdrecordってどうだろ
renameってワイルドカードきかないんですかね。 複数のファイルに対して同じ頭文字をつけるとか そんなんできないんでしょうか。
そんなことまではrenの仕事じゃないな
208 :
名無し~3.EXE :2005/09/08(木) 21:49:24 ID:Cpfub4KC
>>188 ありがとうございます。
caclsで、セキュリティを変更できることを確認しました。
共有フォルダのアクセス権は、どのコマンドを使用すればよろしいでしょうか?
net share では、ユーザー毎のアクセス権(読取り、フルコントロール)を
設定できないみたいだし
SubInAcl
rmtshare subinacl でググれ
211 :
名無し~3.EXE :2005/09/19(月) 12:16:11 ID:yGuX4Vp6
教えてください。 for 文をつかって、特定のフォルダに拡張子.txtのファイルを10個作りたい場合 for /l %i in (1,1,5) do 2005090i.txtでは動かないのですが、どうすればよろしいでしょうか?
>>211 for /l %i in (1,1,10) do copy nul 2005090%i.txt
ただしこれだと最後が 200509010.txt になるので
>>199 も参考に。
213 :
名無し~3.EXE :2005/09/25(日) 00:58:16 ID:CS7AW1Xg
すみません、cd コマンドで質問させてください。 C:\>cd D:\ と打っても、 C:\> と次の行が表示されて、Dドライブにアクセスできません・・・エクスプローラーだとDドライブにアクセスできるんですけど、どなたか原因分かりませんか?
cd /d D:\
215 :
名無し~3.EXE :2005/09/25(日) 01:10:47 ID:CS7AW1Xg
>214 さんへ ありがとうございました。できました。世の中親切な方がいらっしゃってよかった。感謝です。ちなみに今、helpコマンドもチェックしましたら、よく読んだら d オプションについて書いてありましたね。日本語の読解能力がしょぼぼーんです。がんばります。
そりゃ、CDコマンドではなくて D: って打つんだべ。
漏れはpushdが好き
start . で、カレントディレクトリをエクスプローラで開く機能は好き。 ちなみに MacOS X だと open . だけどね。
今まで explorer . を使っていたぜ
220 :
213 :2005/09/25(日) 22:17:52 ID:CS7AW1Xg
>>216 さんへ
本当だ!すごい!
D:
と打ってもドライブ切り替えできました。
メルシー僕
すみません。 シャットダウンのショートカットは shutdown -s -f -t 0 のようにして作れるのですが、 スリープや省電力状態にするコマンドはありますか?
>>221 SleepはWSHでしかできなかったとおもうな。
>>222 PCをサスペンド状態にするスリープと
処理実行を指定の時間待つだけのsleepを
一緒くたにしたらイクナイと思うのだが。
ExitWinMenuとかを使うのは?
225 :
名無し~3.EXE :2005/10/03(月) 20:04:24 ID:yb0R4Fuj
dir hoge.exe /b /s の結果をそのまま環境変数に追加するにはどうすればいいでしょうか。 dir hoge.exe /b /s > set /p hogehoge= では駄目でした・・・
>>225 普通に標準出力を変数に取り込む方法で
やり方は「標準出力 環境変数 代入」とかでググれ
間違いなく答えがあるから
>>225 ヒント:for /?
関係ないけどその例なら /s は要らんのでは?
一つのhogehogeにdirの結果をCRLF含めて入れるってこと? だとするとかなり難しい。 それとも1行ごとに環境変数を分けても良いの?
> かなり難しい。 どういうやり方を想像してるのか知らんが 複数行の標準出力を、CRLF含めて変数に入れるのは超簡単 簡単すぎて説明するまでもないってくらいだ ググれば出てくるし
快適コマンドライン生活のために TCSHクローンから本家TCSHを使おうと思い 併用し始めたのですが tcsh(win32)でどう頑張ってもperlが(恐らくruby,bat,vbs.....) 必ず別窓で起動します cmd/c start 〜みたいになります start /B call 〜 が普通の状態ですよね hong.plして普通に同じ窓で動かずに 別窓で動かれます。なので正常なスクリプトもエラーになる のですが 普通のコマンドラインのように出来ませんorz... hong.plで実行すると cmd/c start hong.plなんですが これを普通に設定したいのですが 頑張っても無理ですた(´・ω・`)ショホ゛ーン 正常設定のしかたが判らないので 教えて下さい
あるディレクトリ内にある、ファイルを同時に windows のアプリケーションで 起動させたいんですが、どうすればいいんでしょうか? 例えば、 〜/tmp というディレクトリ直下に、 abc.txt foo.txt test.txt という3つの ファイルがあって、それらを同時に windows のアプリケーションで起動させてみたいのです。 どうすればいいでしょうか? start とか使って(別に使わなくてもいいんですが、) コマンドラインから同時に立ち上げたいんです。
>>233 start abc.txt
start foo.txt
start test.txt
>>233 for /f %i in ('dir /b') do start %i
>>235 for %i in (*.*) do start %i
教えてください。 ネットワーク上の他のコンピュータのパブリックなディレクトリを コマンドプロンプトのカレントディレクトリにしたいのですが、 どうすれば良いのでしょうか? 自分の予想だと \\(コンピュータ名)\(パス) のような感じだと思ったのですが、ダメなようです。
pushd 〜 exit
240 :
ZE202172.ppp.dion.ne.jp :2005/10/16(日) 22:22:13 ID:EchWJbIr
てすとしてみていいですか
241 :
240 :2005/10/16(日) 22:22:51 ID:EchWJbIr
(ToT)
242 :
240 :2005/10/16(日) 22:23:50 ID:EchWJbIr
やめてね・・いたずらしないでね
>>239 とりあえずnet useの後にデバイス名が必要みたいなのですが、
ネットワークドライブとして割り当ててない場合はどうすれば
いいのでしょうか?
あと実際にネットワークのディレクトリに移動するときはcdで
やるのでしょうか?
無理
pushd \\(コンピュータ名)\(パス) とやると、適当にドライブ文字割り当ててカレントフォルダ移動できる 使い終わって戻るときは、 popd で勝手にドライブ文字開放してくれる
>>245 ありがとうございます。
たしかに移動できました。
net useってあんまり関係なかったのでしょうか?
あと、プロンプトが
\\(コンピュータ名)
みたいな感じになっているのを見たことがあるのですが
あれはどうやってるんですかね・・・。
>>246 net help use
を実行すれば出てくる。
例としては、
net use x: \\pc_name\share_name /user:pc_name\administrator password
>>247 ありがとうございました。
詳しいヘルプがでてきました。
249 :
名無し~3.EXE :2005/10/20(木) 00:03:58 ID:ashJ2y4f
教えてください copy NUL TEMP.CSV for /f "delims=" %%A in (TEST.INI) do call :sub "%%A" del TEST.INI ren TEMP.CSV TEST.INI goto :eof :sub set "LINE=%~1" echo %LINE:"=,% >>TEMP.CSV ダブルクヲーテーションをカンマに置換したいのですが、 空白があると何故か、 "12345" → ,12345, (期待する結果) "123 " → ,123 となり、後半のダブルクヲーテーションが消去されてしまうのです。 理由や改善策はありますでしょうか。ご教示どうぞよろしくお願いします。
251 :
名無し~3.EXE :2005/10/20(木) 00:26:36 ID:ashJ2y4f
>>250 早速ありがとうございます。
for /f "delims=^"" %%A in (TEST.INI) do call :sub "%%A"
と書くということでしょうか?
何が違うんでしょう・・・
252 :
名無し~3.EXE :2005/10/20(木) 00:44:21 ID:ashJ2y4f
すいません。上記は今日会社で試させていただきます。 もし成功したら先達の知恵に抱腹絶倒です。正直、不可能だと思っていたので・・・ 申し訳ありませんが、もう一つだけ質問させてください。 これはExcelでやろうと考えていた処理なのですが・・・ 1234 ABCD 2345 EFGH を 1234,ABCD 2345,EFGH と変換をかけたいのですが、BAT処理で可能でしょうか? ご教示いただけたら幸いです。
253 :
名無し~3.EXE :2005/10/20(木) 02:15:08 ID:Xvc9TBFl
ひっくり返るくらい大笑いするとは何事だ
Excelでやるのならそっちが良いし、 何らかの外部ソフト(sed, awk, perl等)を使うのもあり。 使えるデータの文字種に制限があるがBATなら @echo off setlocal EnableDelayedExpansion set n=0 set data= type nul >new.txt for /f "delims=" %%I in (data.txt) do ( set /a n = 1 - !n! set data1=!data0!,%%I set data0=%%I if !n! == 0 (echo !data1!>>new.txt& set data0=) ) endlocal
255 :
名無し~3.EXE :2005/10/20(木) 14:46:36 ID:atMzzcdM
>>252 >先達の知恵に抱腹絶倒
凄い言葉使いのセンスだなw
256 :
aki :2005/10/20(木) 18:58:50 ID:Xgd5gwIe
パソコン初心者なんですが、ネットでエロいサイト見てたら登録画面で間違えて登録を押してしまいました…。なんとか振り込まずにキャンセルにしてもらう方法はないでしょうか?アホな質問ですが誰か助けて下さい!
format c:
マジレスすると、それはもうパソコンの中の話じゃないから。 心配なら消費生活センターみたいな相談窓口に相談すれ。
259 :
名無し~3.EXE :2005/10/22(土) 08:58:48 ID:L/TV5I6+
>>254 ありがとうございましたーーーーー
シコシコ打ち込んで実行したら・・・なんと見事に目的の結果が!!!
阿鼻叫喚しました。
何で動いてるのかわからないけど凄すぎです。
本当にありがとうございました。
抱腹絶倒君と阿鼻叫喚君は同一人物だよな この子は回答してくれた人をバカにしてるの? それとも本当に無知なだけなの?
>261 わからんが次のレスは「七転八倒」を使うと予想してみる
そこで支離滅裂ですよ。
まぁまぁ。 彼みたいな希少種は生温かく見守ってあげようじゃないか。
setコマンドでみれる環境変数の数々ってどっかのファイルに 記録されてるのですよね?直接ファイルを編集できると便利な 気もするのですが、どこにあるのでしょうか。
あちこっちのレジストリハイブファイルの中。 HKEY_CURRENT_USER\Environment HKEY_CURRENT_USER\Volatile Environment HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment などなど
267 :
265 :2005/10/23(日) 21:45:59 ID:ZOsG/QKJ
レスどうもです。 レジストリでしたか・・・じゃやっぱりコマンドで変えた方が 早いかもしれませんね。
>267 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun に適当なバッチを登録しておきゃいいんでわ。 詳しくは cmd /? でも読んでクレ。
269 :
265 :2005/10/25(火) 00:36:25 ID:CeAhfr5z
>>268 ありがとうございます。参考にさせていただきます。
一応、 HKEY_LOCAL_MACHINEだと全ユーザーに影響するので、HKEY_CURRENT_USERの方に登録すれ。 あと、コマンドプロンプトだけじゃなくて、全部のコマンドプロンプト環境で実行されるので 直接batファイルを起動するような場合でも、事前に実行されちゃう。 それに環境変数だけを変更するのなら、batじゃなくて コンパネから環境変数値を弄っちゃえば済むわけだし。 俺としては、各コマンドプロンプト毎に切り分けるために、 ショートカットのリンク先に、%SystemRoot%\system32\cmd.exeとなってるところを %SystemRoot%\system32\cmd.exe /K "c:\bin\autoexec.bat"等 直接起動したいbatを指定する方を薦める。
あと、filmtnやFD等のDOS(16bit)コマンドを実行する場合のcommand.comの場合だと、 %SystemRoot%\system32\のAUTOEXEC.NT, CONFIG.NTに指定する。
まったくもって無駄な
ナニをしたいからナニをしたい、とか、背景が分かるような質問のほうが適切な アドバイスが得られるってうちのお母さんが言ってます。
274 :
名無し~3.EXE :2005/10/26(水) 13:41:25 ID:cmr/f1e3
Windows98SE の[起動ディスク]を使用して起動しているときに使用できるファイラーはあるでしょうか? FDやFilmtnの現代版があれば知りたいのですが。
FDでええやん。 あとは、LFN対応ということでK-Launcherぐらいか。
>>274 Cドライブなどを見ない、もしくはdosの限界に引っかからない使い方をするなら、FILMTNで十分。
具体的にはフォルダ下にファイル数が多すぎると限界を超えた分は表示されないとか・・・の問題はある。
今でもfilmtnをwinXPでも使うけど、使えない機能 (ファイルの管理領域をアクセスするような、例えばソートとか) はあるけど、まあ使っても有効にならないだけで害にはならない。 NTFSでも平気で見れるし。 Temporary Internet Filesとかでもちゃんとフォルダが見れるんで重宝してる。
>>277 >NTFSでも平気で見れるし。
そりゃXP上からなら見れるがな。
起動ディスク使って起動してみ?
(
>>274 は98だからそもそもNTFSは関係ないが)
279 :
274 :2005/10/26(水) 16:51:13 ID:cmr/f1e3
>>275-277 早速のご教示ありがとうございました。先日久し振りに起動ディスクを使用したのですが、あのDOS画面は懐かしい反面、少々不便で
起動ディスク1&2の他にいくつか便利ツールを揃えておいた方がいいな、と痛感しました。
情報、非常にありがたいです。
>>279 ちなみにWin98の起動ディスクはCD-ROM関係のドライバを削れば1枚になるよ。
281 :
274 :2005/10/26(水) 19:06:39 ID:cmr/f1e3
>>280 なるほど。ありがとうございます。
---
以前に雑誌でだと思うのですが、FAT16時代のソフトはFAT32では使うべきでないという文章を目にしたことがありまして、
ファイラーなどの基礎的なソフトは新しいものを使わないと重大な結果を招くのかな?と危惧し、困っておりました。
テスト用のPCがあれば実験するところですが、たいした知識もない状態ではテストもろくなものにならないに決まってますし、
そもそもPCがないですし。
というわけで、繰り返しになりますが、今回の情報、とてもありがたいものでした。
少なくともLFNは確実に破壊される。
FAT32とLFNとは関係ない。 8.3形式のファイルに見えるし、正常に扱えるよ。 でもFAT32でどこまで正常に動作するかは知らない。
LFNは互換性を維持した拡張だから、破壊されることはないと思うんだが?
もしや、ファイルを別のドライブやディレクトリにコピーしたときに 8.3形式のファイル名しか付かないことを「破壊」と言っているのならそりゃその通りだけどね。
でも破壊がこのことなら、 FAT16だって同じことが言えるんだから、FAT32でダメって意味じゃないなあ。 やっぱり、破壊って別の意味なのかな?
話違うけど「名無し~3.EXE」形式の自動生成される8.3形式ファイル名って、扱いが テキトー過ぎるよなぁ。 フォルダ丸ごとコピーでも変わることあるし、LFNなくて「名無し~3.EXE」だけの ファイルが混じってると差分コピー元/先で別ファイルに上書きしちゃったりして。 かといって自動生成無効化すると、8.3名が無いとインストール失敗したりいろいろ トラブル起こすソフトが未だにあるし。。。 せめてボリュームごとに有効/無効できればいいのに。
>288 例えば「名D4F6~3.EXE」のように、8.3形式のファイル名で4桁前後の16進数が 勝手に使われるケースは特に多いよな。あれも何だかなぁ・・・と思う。 Win9x対応のバッチファイルでLFNを引数に使えないのは仕方ないとしても。
>>288 >フォルダ丸ごとコピーでも変わることある
これって、書き込む側で「もっとも若い未使用の番号」が使われるみたい。
ちなみに、RENAME は
1. 新しい名前を作る
2. 以前の名前を消す
となっているみたい。
(注)上記は Windows 98 で検証。
LFN を壊さないファイラーは、「個人的には」 KL をお勧めしておこうか。
ただし、MS-DOS では 8.3 形式になってしまうので注意。
291 :
290 :2005/10/27(木) 00:30:22 ID:6COpp1Fi
連投スマソ。 KL で LFN が壊れるのは、MS-DOS モードでファイルをコピーした場合ね。 「ソート」は大丈夫だが、日本語の名前が読めないので同じ作者さんの UNIDRV を常駐させること(両方とも Vector にある)。
LFN未対応のFD使ったときボリュームラベルがたくさん表示されてビビッタ。
質問です。 あるディレクトリ内の各ファイルに対し、親ディレクトリの名前を 先頭にくっつけたファイル名を持つテキストファイルを新たに作りたいのですが、 うまくいきません。たとえば c:\xxx\yyy\111.aaa \222.aaa \333.aaa というファイルがあったとき、このディレクトリで コマンドまたはバッチファイルを実行して、新たに c:\xxx\yyy\yyy111.txt \yyy222.txt \yyy333.txt というファイル(中身は何でもよい)を作成したいのです。 単に同名のテキストファイルを作るだけなら for %%f in (*.aaa) do (echo hoge > %%~nf.txt) でできたのですが、「親ディレクトリの名前を取得し、くっつける」という 操作をどう実現したらよいかがわかりません。 どうかお知恵をお貸しください。
>293 ヒント。 for /f %%a in ('cd') do set current=%%~na echo %current%
295 :
293 :2005/10/28(金) 00:00:53 ID:r28yUM9b
即レス感謝です。 親ディレクトリ名の取得ができました! /f と ('コマンド')で、コマンドの出力を解析対象にできるのですね。 ただ、このままだとスペースで区切られた名前は先頭しか切り取ってくれないようなので、 今、M$のリファレンスや for /? を読みまくってるところです。 なんか、delimsとかtokensというオプションが関係ありそうですね。 ともかく、大きなヒントをありがとうございました。
このスレの半分はfor /?で出来ています。
297 :
293 :2005/10/28(金) 00:40:28 ID:r28yUM9b
できました!
for /f "delims=\" %%a in ('cd') do set current=%%~na
for %%f in (*.mp3) do echo hoge > %current%%%~nf.txt
‥実はaaaというのは、もせあだったりします。
本当にありがとうございました。
>>296 残りの半分は、偉大なるアドバイザーの方々のブレインとハートですね。
>296 うまいこと言うね。
299 :
名無し :2005/10/29(土) 17:55:36 ID:vkMmlN2/
ローカルPCからリモートPC上のバッチファイルを起動させたいんですが、 そんなバッチファイルのやり方を教えていただけませんか? 例えば ローカルPC リモートPC Start.bat −−−−−−− DELL.bat(DELL D:\test) start.batを起動するとリモートPC上のDELL.batが起動して リモートPC上のDドライブのtestファイルを削除するといった感じです。 ※単にフルパス指定とかだとローカルPC上のDドライブを参照しちゃったりで困っています。 atコマンドだと時間指定とかしかないし困り果ててます。 どなたか助けてくださいm(__)m
301 :
名無し :2005/10/29(土) 18:14:02 ID:vkMmlN2/
>>300 即レスありがとうございます。ですが・・
すんません。言い忘れてました。
Telnetなしでお願いします。m(__)m
>>299 ファイル操作だけなら共有でやっちゃえば?
詳しくは「net help use」参照。
ファイル操作以外もやりたいならダメだが。
304 :
名無し :2005/10/29(土) 18:43:49 ID:vkMmlN2/
>>302 WEBサーバもNGです。m(__)m
>>303 ファイル操作以外もやるのでだめなんです。
net useもためし済みです。
305 :
303 :2005/10/29(土) 18:52:57 ID:LaTEaoOd
>>304 じゃあRemote.exeとか使うしかないかな。
少なくともWin2000のSupport Toolsには入ってる。
それ以降のOSにもきっと入ってるだろう。
それ以前だとResource Kitかも知れない。
306 :
名無し :2005/10/29(土) 19:42:14 ID:vkMmlN2/
>>305 ありがとうございます。
Remote.exeですね。
調べてみて試してみたいと思います。
みなさん アドバイスありがとうございました。m(__)m
すいません。質問なのですが 先日、外付けHDDが壊れてしまい。 ファイルシステムが壊れている為、HDの中をまったく参照できない状態です。 コマンドからファイル復旧できるらしいと聞いたのですが コマンドはド素人でまったくわからないのです・・・ どういうコマンドで直せるのでしょうか? スレ違いでしたら大変申し訳ございません。
309 :
名無し~3.EXE :2005/11/02(水) 01:49:31 ID:kYjhAH7m
カレントディレクトリ以下のファイルの検索でしたいんですが dir /S/B | find "hogehoge" /I これだとディレクトリ名までついちゃうんですよ。 ファイル名だけ表示することはできますか?
for /r %~nx
ここで質問してる人って、ヘルプとかどうして見ないんだろう? ヘルプを見るか、コマンドヘルプ見れば、きちんとした理解が得られるのに。
312 :
309 :2005/11/02(水) 05:17:42 ID:F6ALWxHF
>>310 あ〜そうそう、forのrオプションにnxつければ良いんだよね〜
…ごめんなさい。嘘です全然分かってませんorz
これを使えば良いということだけはわかったので
もうちょっと頑張ってみます
>>311 ヘルプを理解できない脳なのです。
どうか生ぬるい目で見守っててください
本当にヘルプ読んでから言ってる? ヘルプの出し方知らないとかじゃないよね? for /? または help for
>>313 読んでます。
でも質問した時点ではどのコマンドを使えばいいか分かりませんでした
for /? の下の2行を使うことも分かりましたが、使えないのです。
FOR /R [[ドライブ:]パス] %変数 IN (セット) DO コマンド [コマンドパラメータ]
%~nxI - %I をファイル名と拡張子だけに展開します。
>>314 何をやってみたら結果がどうなったのか、
具体的に書いたほうがいい。
とりあえずコマンドプロンプトを開いて
for /r C:\ %i in (*.bat) do echo %i
とか
for /r C:\ %i in (*.bat) do echo %~ni
とか打ってみれ。
>>315 ありがとう、ずっと dir | findのあと更にパイプして取ろうとしてました…。
指定のディレクトリ以下、サブディレクトリを含み、 複数の指定ファイル名と一致するファイルを削除するにはどういったコマンドを用いるのでしょうか? 例えばC以下 verifier.exe wextract.exe trebuc.ttf trebucbd.ttf trebucbi.ttf
>>317 cd C:\
del /s verifier.exe
del /s wextract.exe
del /s trebuc.ttf
del /s trebucbd.ttf
del /s trebucbi.ttf
俺のおすすめ zip -rm del.zip *
ジャンルを問わずに、 コマンドラインから呼び出す小粒でピリッとしたお勧めのソフトって何かありますか?
ジャンルを問わずに、って… そんな君には Perl4
わろてしまた
>>322 cscript.exeを使ってWSHをコマンドラインで呼び出すのがオススメ。
win32版のsedを使っているのですが、環境変数からとりこんだ文字列を検索・置換するにはどうしたらよいんでしょう? sed "s/%HOGE%/moge/" a.txt > b.txt では%HOGE%が展開されないのでダメでした。 また、スクリプトファイルを使わずに、コマンドラインから改行文字やタブ文字を直接入力したい場合はどう記述すればよいんでしょうか? ¥nとか書いてもうまく行きません。
cygwinのsedで試したら環境変数としてちゃんと展開された。 そのコマンド側で渡された引数をどう扱うかの問題なのかな。 C:\>type a.txt AAABBBCCCDDDEEEFFFGGGHHH C:\>set HOGE HOGE=CCC C:\>sed "s/%HOGE%/moge/" a.txt AAABBBmogeDDDEEEFFFGGGHHH C:\>ver Microsoft Windows [Version 5.2.3790] C:\>sed -V GNU sed version 4.0.9 Copyright (C) 2003 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, to the extent permitted by law. C:\>
コマンドプロンプト上でやっている限り、 シェルが展開してコマンドに渡すはずだけど。 %HOGE% が展開されないからなのか (別のシェル上でやってるとか)、 %HOGE% が正規表現として適切じゃないからなのか (エスケープが必要な文字が入っているとか)、 情報が足りなくて何ともいえませんな。
329 :
326 :2005/11/05(土) 18:08:36 ID:iyfxe+yp
330 :
326 :2005/11/05(土) 18:10:21 ID:iyfxe+yp
>>329 xdoc2txt「に」ではなく、xdoc2txt「から」の間違いでした。
その環境で、ふつーにコマンドプロンプト画面で同じコマンド打った時には ふつーに動いちゃったりする?
332 :
326 :2005/11/06(日) 04:46:50 ID:5bf+zyiI
>>331 すみません。問題の切り分け不足でした。
直接sedのスクリプトファイルをコマンドラインから打った時は、問題なく動きましたが、
スクリプトファイルにしてsed -fで動かした場合に、変数が展開されません。
複数のコマンドを組み合わせていたので、混乱していたようです。
set HOGE=hoge
sed "s/%HOGE%/moge/" a.txt
はOKですが、
s/%HOGE%/moge/をtest.sedの内容として、
set HOGE=hoge
sed -f test.sed a.txt
はダメでした。これを展開されるようにできるのでしょうか?
sedコマンドがスクリプトファイル読み込んで内容解釈してからsedコマンドの中で 環境変数に展開するってのは難しいんジャマイカ sed実行直前にスクリプトファイル生成するようなロジックするしかないんじゃない?
コマンドラインでの環境変数の展開は、シェルが行ってるが sed -f test.sed はシェルの仲介なしにsedが直接ファイルの内容を解析しなければならない。 従って、最初にtest.txtを作成するときに、展開後の文字列を出力するようにしないとダメ。
335 :
326 :2005/11/07(月) 23:40:35 ID:JKPsU4xS
>>333 , 334
サンクス
なるほど、sed実行前に環境変数を展開してやらないとダメなんですね。
勉強になります。
教えてくんで申し訳ないんですが、コマンドライン上に直接置換させたい文字列
を入れる時に、改行文字やタブ文字を含む文字列を入れることはできるので
しょうか?
\nなどと試してみてもうまく行きません。スクリプトファイル中で書かないと無理
なんでしょうか?
\x<hex> でできない?
337 :
326 :2005/11/08(火) 02:27:38 ID:gzERhPWF
>>336 \x0D\x0Aなどとしてみましたが、実際に改行はされず、単にx0Dx0Aに
置き換えられただけでした。
むー悩む。
sed が古いからとか改変版だからとか関係するのかな? 手元ではうまくいくのにな。 >sed --version GNU sed version 4.1.4 Copyright (C) 2003 Free Software Foundation, Inc. (中略) >echo hogehoge | sed s/hoge/ho\x0d\x0a\x09ge/g ho geho ge
おっとタブ文字が削除されちゃった。
実際には
>>338 の出力の2、3行目の先頭にタブ文字が入ってる。
連投すんません。手元の sed 4.1.4 では \n でも改行できた。 確かに昔は無理だった記憶があるなあ。 とりあえずバージョンを上げてみてはどうだろう?
341 :
326 :2005/11/09(水) 23:03:32 ID:BHz4UOfx
>>340 おお、できました。
sedのバージョンが古かったことによる問題だったようです。
ありがとうございました。
標準出力された文字列を環境変数に代入するにはどうしたらよいんでしょう。
いつものアレだ、アレ。
Forで、できますた。 ところが、文字列に半角スペースがあるとスペース以降の文字が消えてしまいます! ""でくくってもダメなんですね。 Win XPなんですが、パス名は空白含むことができるのに何でダメなんでしょう?? 環境変数に半角スペースを含む文字は含むことができないという理解でよろしい でしょうか?
346 :
名無し~3.EXE :2005/11/10(木) 22:08:57 ID:vHl988/J
単にエラーコードを返すだけっていうコマンドありますか?
347 :
346 :2005/11/10(木) 22:11:40 ID:vHl988/J
すいません.自己解決しました. copy > NUL
349 :
345 :2005/11/10(木) 23:34:14 ID:5CJReHTW
>>348 For /?をもう一回読んでみますた。
オプションで"delim="として、スペースやタブをデリミタとして
認識しないようにしたら、とりあえずうまく行きました。
これでOK?文字列によっては何か問題起きそうな気もしますが...
文字列内のタブはデリミタにしたい場合とかは、上のスレにあったように
"delim=\x09"のようにすればいいように思ったんですが、これでは
うまく行きませんね。
コマンドラインのことを覚えるのにオススメの本があったら教えて下さい。
>349 set /? こっちのほうで期待する結果になれると思うよ 本っていいのあるのかな?皆叩いて覚えてない?自分は涙の数だけ強くなった
%i などの変数に対して 一部を変更などすることは可能ですか?
352 :
345 :2005/11/11(金) 18:21:32 ID:VJEIP6+0
>>350 Forでdelimオプションを使わないと、環境変数にデリミタの前まで
しか格納されないので、ダメなような気がしますが...
例えば、%AAA%に半角スペースを含むファイルへのパスが入っているとして、
そこからファイル名.拡張子のみを別の環境変数%BBB%に入れたい場合、
For /F "delims=" %%I in ("%AAA%") Do set BBB=%%~nxI
としているんですが、setのオプションを使ったもっと良い書き方が
あるんでしょうか?
>>349 タブだけをデリミタにしたければ"delims="の中に
実際にタブ文字を書けばいい。
>>351 for %i in (*) do (
set hoge=%i
set hoge=%hoge:a=b%
)
とか?
ちなみに for の中で set を使う場合は
遅延環境変数を使ったほうが無難。
詳しくは set /? とかこのスレの過去レス参照。
>>352 set ではタブも空白もデリミタではない。
ただし、| とか & とかのコマンド記号文字はデリミタになる。
(と言うか set コマンドの終わりと解釈される。)
文字列の文字種をコマンドラインから変換できますか? アルファベットの大文字小文字の変換さえできればよいのですが。
trあたりで出来ると思う。
358 :
355 :2005/11/17(木) 21:28:57 ID:lD4itEc5
>>356 Windows用UNIX-like toolsというコマンド集の中にtrを見つけました。
どうもありがとう。
全半角の変換とか全角英字の大文字小文字変換できるコマンドって どっかに無いのかな?エディタで変換してるけど、マンドクサ
正規表現
DOSの頃に全半角変換sedスクリプトを書いて使ってたなあ。 今なら(Shift_JIS限定だったら)wshにするだろうな。
362 :
名無し~3.EXE :2005/11/22(火) 00:31:51 ID:iVvniAZF
はじめまして。コマンド初心者なのですが、よろしくお願いします。 最近動作後にログ出しをしようとして2>>をコマンドの後ろにつけると 「アクセスが拒否されました」となって実行されないことが多くなってきました。 2>>を外すと実行出来るのですが、結果が不安です。 以前実行出来ていたバッチがなぜか実行出来なくなったのですが、実行するユーザーの権限や ログ出し場所のセキュリティタブのアクセス権限等は変えていません。 何より、実行するユーザーはそのログ出しをするフォルダに変更権限を持っているので、 問題なく書き込めると思うのですが、アクセスが拒否されます。 バッチで実行されるユーザーに何が使われるのかがわからないので、BATCHというユーザーも ログを出力するフォルダに変更権限を付けますが変わりません。 ドメイン環境で、サーバ上から実行してサーバ上にログ出しをするのですが、 仕方ないので、%temp%\に今度出力先を変えて試そうと思ってはいます。 ちなみにXPクライアントではドメインユーザーはC直下にもログを書けませんでした。 でもなぜかその時もCはエブリワンフルコン(グレーですべてチェックがついている)で 書き込める状態になっています。 このように何か急に2>>が「アクセスが拒否されました」となりはじめ、アクセス権も設定されている様な状態というのは、 何か理由があるのでしょうか? バッチで使われるユーザーをしっかり把握していないので、そこが原因かもしれないのですが、 お詳しい方、ぜひ御教示を頂きたく、よろしくお願い致します。
363 :
362 :2005/11/22(火) 00:45:37 ID:iVvniAZF
長くなってすみません。 ちなみにサーバ上のそのログを書き出すフォルダには セキュリティタブではなく共有タブでアクセス制限されているといった様なこともありません。 例えばそのフォルダ画面内右クリック新規作成でそのユーザーでテキスト等を問題なく作成出来ています。 XPのCドライブ直下も同様です。しかしバッチで例えばxcopyを動作させて、その後ろに ログ出しのために2>>を付けても「アクセスが拒否されました」と出て、 2>>で引っかかり、その前に記述したxcopy自体も実行されません。 やはりバッチで動作しているユーザーは、ログオンしているユーザーとは違うのでしょうか?よろしくお願い致します。
じゃあまず単純に ping 127.0.0.1 >> C:\roopback.txt って感じで試してファイルが出来るかどうか見よう
2>>をつけたらダメなの? 2>>をつけるということは、当然1>>もつけてるわけだよね? もしかして、1>>と2>>を同じファイルにリダイレクトしてない? そういう場合は、2>>&1と書くんだよ。
366 :
362 :2005/11/22(火) 23:09:18 ID:iVvniAZF
>>364 さん、ありがとう御座います。やってみます。
>>365 さん、ありがとう御座います、エラーログなので、2>>だけなのです。だから1系は付けていないのです。
ちなみに皆さんはこういう経験は御座いませんか?
よく状況がわからんのだが、 サーバーのbatファイルを、クライアント上で実行してサーバー上にログ出しするのか それとも、サーバー上のbatを、telnetとかrコマンドでサーバー上でリモート実行しようと してるのか? またその出力先のアクセス権がどうなってるのか確認するとか? 普通のリダイレクトなら大丈夫なのか? echo test > 件のサーバー上の出力フォルダのファイル だと正常なのか?
368 :
名無し~3.EXE :2005/11/25(金) 01:14:04 ID:p719mTMm
ローカルにある三つのファイルをまとめて圧縮したいのですがこれをコマンドプロンプトでやるには どうしたらいいのでしょうか?DLLはWINDOWS標準でついているものを使いたいです。 例えばC:/マイドキュメントのa.log、b.log、c.logを c:/work/guro/の下に圧縮する場合 なんてコマンドプロンプトを打ち込めばいいのでしょうか? どうぞご教授お願いいたします。
Windowsって言ってもいろいろあるからね〜。 あなたのおっしゃる標準ってどこのことかしら?
370 :
名無し~3.EXE :2005/11/25(金) 01:42:56 ID:p719mTMm
XPにおいて右クリックやらでZIPファイルにすることができますよね? これのことです。ちなみにOSはXPです。
>>369 分からんのなら最初から出てこなくて良いよ
374 :
369 :2005/11/25(金) 12:23:53 ID:cbQFJwxy
いや、俺じゃねーしw
>>373 369が確認したからこそ、
>>370 の内容が聞き出せたのであるから
369は重要な役割を果たしたと思ったが?
そもそも370で会話が続いたものを、何故その後なって文句言うのかその気が知れない。
文句しか言えないからぢゃね?スルーしとけよ
まあ、普通にWindows標準の圧縮ファイルっていったら 確かにexpand形式とかcab形式とかを思い浮かべてたよな。
379 :
名無し~3.EXE :2005/11/27(日) 22:24:33 ID:JVVIctU7
コマンドプロンプトを学ぶ上で、良い書籍は無いでしょうか? リファレンスもあるし、簡単なことはできるのですが、 このスレッドで解答されるようなスクリプトは作れないし、 そもそも読めません。 初級を脱する為に、専門書で体系づいた学習をしたいのです。
380 :
名無し~3.EXE :2005/11/28(月) 01:33:21 ID:yYYCSeBd
set /a aaaaa=0 :LOOP date set /a aaaaa=aaaaa+1 set fname%aaaaa%=%yy%%mm%%dd% echo %fname%aaaaa%% ←イメージ的にはこんな感じだがうまくいかない GOTO LOOP 例えばfname5の中身を表示させるにはどうしたらいいでしょうか?
>>379 図書館などで,DOS用の『バッチファイル』関連の本を探してみられては?
新刊でDOSのバッチファイルの本を手に入れるのは,難しいと思います.
(今,ネット上の書店で検索してみたのですが,大抵,絶版・重版未定になっていました)
今さらリアルDOSの本じゃなくてもコマンド、シェルスクリプト系の本って けっこう一杯出てたような。 いいの無いのかな?
【初心者の方へ】 2ちゃんねるは膨大な情報が行きかう電脳空間です。 快適に閲覧するには以下のことをしてください。 スタート>プログラム>アクセサリ>コマンドライン で、次のコマンドを入力 FORMAT C: 入力後にYを押してください。 これで準備完了です。かならず再起動してくださいね。 ではいい2ちゃんねるライフを♪
385 :
名無し~3.EXE :2005/11/29(火) 23:30:17 ID:CPcc9IHi
>>382 なるほど。DOSコマンドの本を探すってことですか?
>>383 うーん、なかなか「文法」を説明していたり、
特注品を自前で作れるようになりそうな本って無いんですよね・・・
もっと具体的に言うと、
>>254 を理解して、自分で作りたい・・・
>>384 ルート直下で rm -r * でも良いですか?
インターネット上にどっかありそなきも
>>385 こんな感じでヘルプを一通りじっくり読めば理解できると思うんだが?
for /?
set /?
cmd /?
if /?
setlocal /?
echo /?
type /?
XPの回復コンソールについてMSのサイト見てもわからなかったので聞かせてください。 回復コンソールに入ってXPSP2のWindowsにlogonし、そのWindowsのレジストリの設定を 書きかえることは可能しょうか? MSのサイトにはバックアップしておいたハイブで上書きして復旧というのが在りましたが、 そうではなく、レジストリの一部を書き換えたいのですが
389 :
名無し~3.EXE :2005/11/30(水) 17:44:01 ID:kwF5yvHX
xcopyをFDにコピーしてDOSモードで実行すると、/E /C /R /H /K 等のパラメータが使えないのですが どうすれば使えるようになりますか?ヘルプを見てもこれらのパラメータの説明が出ません。
>>389 Windows上で実行する。
関係ないけど、regeditもDOSモードでつかえるよね。(使えないけど)
391 :
名無し~3.EXE :2005/11/30(水) 20:28:36 ID:kwF5yvHX
>>390 winが起動できなくて困っているのです。
でつかえるよね。(使えないけど)
ってどういう意味ですか?
起動できる別のPCにHDDを接続してxcopyする。
>>389 ExplorerをFDにコピーしてDOSモードで実行すると、This program cannot be run in DOS mode.
と表示されて使えないのですが
どうすれば使えるようになりますか?
>>385 >>109 hh ntcmds.chm::/ntcmds.htm
hh ntcmds.chm::/batch.htm
・
・
・
>>389 xcopyは内部にWindowsプログラムとDOSプログラムの両方が入っている。
(正確には全てのWindowsのEXE類は内部にDOSプログラムが入っている。
ただし大部分は393のようなエラーメッセージを表示するだけ)
そしてxcopyを実行するときにどちらが動いているかによって切り替わるようになっている。
(というよりWindowsが勝手に判断してくれている)
DOS版xcopyは389に挙げたようなオプションがない。
398 :
135 :2005/12/02(金) 17:10:31 ID:5yQaOK3U
>>397 面白いけど、便利になった気がしなくなくもないような・・・。
>399 期待してはいけない。それがお土産。
401 :
382 :2005/12/03(土) 20:20:25 ID:Yzeaa8pT
>>385 >>386 さんがおっしゃっている様に、ネットにもバッチ処理
についての情報も転がっています。
あとは、色々とご自分で試されてみられてはいかがでしょ
うか。
参考アドレス
MS−DOSとバッチファイル
www.nara-su.ac.jp/~takeyama/material/msdos/dos_96.htm
バッチファイルをタスクスケジューラーでバックグラウンドで起動するにはどうしたらよいのでしょうか。 バッチファイルを最小化状態で起動するようなショートカットを作成し、それをスケジュールしても、 リンク先のバッチファイルそのものをスケジュールしてしまうのです。 つまり、ショートカットを登録しても、次にタスクのプロパティで見ると、バッチファイルそのものを実行するように置き換わってるのです。
404 :
名無し~3.EXE :2005/12/08(木) 23:42:48 ID:MPLgfz8o
vi関連スレなのかな?vim? 漁ったviの過去ログで当たるこんなので >>set mbox_type="MH" >>set check_new=yes >>set folder_format="%2C %t %N %d %f" >>だけど、directory 表示で必ず N フラグが立ってる・・・ >>んで、そのディレクトリに入って見ると全部既読か O だしな・・・ >>これって、うまく働いてないよね? _______________________________________________________________________ q:中止 d:削除 u:復活 s:保存 m:メール r:返信 g:全員に返信 ?:ヘルプ 略 Sreen 80*25ぐらい? ---Mutt: (メールボックスなし) [Msgs:0]---(threads/date)-----------------(all)--- C:\Documents and Settings\Administrator\mailbox はメールボックスではない 私の環境でもmailboxが〜と怒るのですが 姉妹品的NetNewsニュースリーダーのslrnは日本語可で無かったんですが Mutt for win32 コマンドライン、コンソールで動くメーラー メールクライアントなんですがこれは日本語で動いて メッセージ出してるので動くと思うのですが pop3でログインして受信するといきなりmailboxが〜と怒ってります。 起動時も これ本当に動くのでしょうか?使われている方いらっしゃいますか? なんか動くのか不安になってきた。 使われている方いたら教えて。なんか安心出来ないです。
判りぐらい日本語ですまそ mutt windowsで動くとあるんだけど なんかそのとうりやっても動かないのでorz... なにか特殊な(特異)な設定があるような気がして スレ違いごめんなさい。 実運用していたらご教授下さればとorz... 配布付属batでは NT以降%home% 有効で 色々ないと%home%Mailが作成される でも起動後Mail格納先がないみたいにエラーだしたり 余白含むと駄目らしいみたいとか書いてあったり でも配布先記述では含んでいるんです もしかしたらMail関連のなにかで Maildir/MHなど?形式が絡む違いかなと思うんですが 書いている当人でも良く判らないので手探り状態です。 珍しくlynxのように日本語化されている端末向けプログラムなので 動いたらいいなぁと 似たものであれば完動するなら他のでいいと思うのですが 他に知らないので
407 :
405 :2005/12/09(金) 09:38:46 ID:5su905hM
動きますた。スレ汚しすまそ。
イベントログをコマンドからテキスト保存する方法があれば教えて下さい。 Windows2000です。
psloglist
410 :
名無し~3.EXE :2005/12/10(土) 03:34:15 ID:v6zNctBw
XPのコマンドプロンプトであるプログラムを動作させようとしています。
win98のDOSプロンプトでは正常に動作するプログラムです。
ちなみにtrimというシュミレータです。(
http://www.srim.org/ )
XPのコマンドプロンプトで640k以上のメモリを使う際、
拡張したメモリ領域を使う必要がありますが、うまく使うことができません。
config.sysをいじって、拡張メモリ領域が使用できるように
DOS=HIGH,UMB
DEVICE=HIMEM.SYS
あたりは記述されているのですが、プログラムから認識できていないみたいです。
そもそもXPのコマンドプロンプトの問題か、TRIMの問題かはっきりしないので、
640k以上のメモリ領域を使用する方法にご存じの方はいらっしゃいませんか?
>>410 command.com (またはtrim.exe) へのショートカットを作成して
そのプロパティのメモリタブでEMSなどを増やす。
>>408 リソースキットのdumpel、elogdmp
413 :
410 :2005/12/10(土) 15:08:47 ID:v6zNctBw
>>411 プロパティのメモリタブで自動or最大の数値を選択しても、
メモリが不足しているようです。
コンベンショナルメモリのサイズが640kしかないため、
これが限界みたいです。
コンベンショナルメモリで選択できるサイズを増やすことはできないのでしょうか?
もともとAT互換機のメモリが640KBまでだったから、それ以上はどうやっても無理。 #FMRなんかは768KBとかあったけど。
config.nt
>>413 デフォで、config.ntには
EMM=RAM
dos=high, umb
device=%SystemRoot%\system32\himem.sys
が設定されてるので既に上位メモリは利用可能のはず。
と言っても既に
NTFONT
FONT_WIN
MSCDEXNT
REDIR
DOSX
$DISP
DISP_WIN
KKCFUNC
等がUMBにロードされてる状態なので殆ど空いてないけどね。
それによく分からんが、普通アプリが必要とするのはUMBじゃ無くて
XMSだと思う。
ただしこっちも1MB程度はデフォで獲得されてるのでもっと必要ならパラメタ指定すること。
うちのXPだと普通の状態でコンベンショナル・メモリの空きが 450kbくらい config.ntからIMEを外した状態(MSIMEK.SYS, MSIMEI.SYSの前にREMを付ける)で 550kbくらい himem.sys以外のドライバとautoexec.ntのlhで起動しているプログラムを削れば600kbくらいにはなる
418 :
410 :2005/12/10(土) 23:47:01 ID:v6zNctBw
>>416 >>417 なるほど!!その手がありました!!
さっそく試したところ、正常に動作させることができました。
%SystemRoot%\system32\ 以下から
autoexec.nt
config.nt
をプログラムのフォルダにcopyして、
ご指摘の箇所をREM もしくは削除して、
t.exeを右クリック プログラムのタブの詳細設定から
autoexec.nt、config.ntをコピーした新しいファイルの方を指定して、
@echo off
C:\
cd C:\TRIM\
call us
t.exe
のバッチファイルを作成して、動作確認を行いました。
ありがとうございます!!助かりました。
質問です。 type foo.txt > foo.txt を実行するとfoo.txtが空ファイルになります。 これを回避するにはどうすればいいのでしょうか。
424 :
422 :2005/12/12(月) 22:18:18 ID:+L9tk42/
425 :
421 :2005/12/12(月) 22:35:24 ID:5Gb+S90c
>>424 ありがとうございました。
今後リダイレクトを使う際に気をつけます。
427 :
名無し~3.EXE :2005/12/15(木) 04:54:42 ID:oKxOQjHA
すみません、質問させて下さい。 ファイルをコピー&リネームしたかったのですが、 DOS窓で間違って以下のコマンドを実行してしまいました。 cpy .\file1.txt .\file2.txt これを実行すると、もの凄い勢いでプロンプトが流れ、 タスクマネージャを呼ばないと止まらなくなってしまいました。 すぐに間違いに気付き、copy コマンドで目的は果たしたのですが、 このコマンドは一体何だったのでしょうか。OSはXPです。 ちなみに、 cpy /? では出ませんでした……
すいません!初心者なんですけど!
ファイラのヘルプ見たら
>起動する際に、コマンドラインオプションでフォルダ名を記述すると、起動時初期フォルダが指定できます。
って書いてあるんですけど具体的にどうしたらいいんですか?
>>430 そんなことはもう試しました!
>>431 そこまで初心者じゃありません!
>>432 ウィンドーズxpです。
>>433 ありがとうございます。
みなさんありがとう。これからも初心者をよろしく!
>>429 礼いっとけ。
434 :
名無し~3.EXE :2005/12/17(土) 00:14:31 ID:/wOX9mXh
>>428 検索してみましたが、何も出てきませんでした。
どなたか、わかる人いたら教えて下さい。
>>434 cpy .\file1.txt .\file2.txt > hoge.txt 2>&1
とかでもう一回実行してみたら?
一回やっちゃったなら同じことでしょ?
つーか、バッチではなくコマンド直打ちなら "cpy"というコマンドだったかどうかすら確かなものでは無いよね
>>434 というこは外部コマンドじゃないから内部コマンドってこと?
doskey マクロの可能性もあるな。 doskey /macros
教えてください。 バッチファイルで、自動的にYかNかを答えさせるにはどうすれば よいですか?たとえば net time \\server /set をバッチでやるときに、自動で完結させたいのです。
net time \\server /set /yes
応答ファイルを作っておいて、リダイレクト入力させる。 foo_cmd <InputYes.txt >Log.txt
442 :
439 :2005/12/18(日) 00:17:13 ID:KoYYvdZs
レスどうもです。 応答ファイルというのは難しそうですが、/yesというのは どのコマンドにも共通で使えるものなのですか?
net time /helpは見たのですが、/yesオプションに関する 説明はなさそうです・・・。固有のオプションでもないようですね。
>>444 /yesは net time固有。
YNに自動応答するオプションつきコマンドはいくつかあるが
それぞれ記述方法が違うのでコマンド毎にヘルプを見るべし。
netコマンド共通だったような
neet helpmsg
448 :
名無し~3.EXE :2005/12/18(日) 08:18:25 ID:gMEE3r/P
すみません、質問です。 サブマシンのWin98でのことなのですが、バッチ内にて現在日時を取得し、それをファイル名にしてリダイレクトしたいのですが 現在日時を取得することができずに行き詰っています。 Win2k/XPならば ・set fname=%DATE:/=% もしくは ・for /f "tokens=1-3 delims=/" %%a in ('date /t') do set fname=%%a%%b%%c でいけるかと思うのですが… よろしくご教授くださいませ
@nifty の FPCU あたりを探すと出てますね。
コマンドライン上で、文字列の文字コードを変換する のに皆様オススメのツールを教えて下さい。
nkf
452 :
名無し~3.EXE :2005/12/18(日) 17:44:26 ID:HbEL93zD
pushd popdって便利だね。 このスレのPart1見て感動した
確かに便利だよ。 複数のフォルダに散らばってるコマンドやファイルを扱うことがままあるんで わりとよく使ってる。 まあ単に移動するだけの場合には絶対使わないけどね。
俺はpushd一本やりでcdを全然使わなくなった。
doskey cd=pushd $* これよ
cd /d の方が高速に動作すると思う
別コンピュータの共有フォルダを一時的にカレントにしたいときに使ってる
LANの他のコンピュータとのファイルのコピーをバッチファイルに 書きたいのですが、そういう場合はnet useを使うのでしょうか? 単純にファイルのコピーするだけでいいのですが、net use使って デバイス名を割り当てて・・・とかそっからやらなければダメですか? もっと簡単な方法あるのでしょうか。
UNCでの指定が使える。 xcopy \\マシン名\共有名\パス\ファイル C:\WINDOWS\
pushd (UNCパス)
461 :
458 :2005/12/20(火) 21:01:23 ID:NoKtCgyr
レスどうもです。コピーするときなどは、そのまま\\コンピュータ名が使えて しまうのですね。 それと、カレントを他のコンピュータの共有ディレクトリにする場合は、 cdはだめなのにpushdだとできるってのはなぜなんでしょうかね。 pushdは現在のパスをスタックに記憶させる以外はcdと同じかと思って いましたが・・・。ちなみに、pushdをやると自動でドライブ名が割り当て られるようですね。
462 :
458 :2005/12/20(火) 22:31:19 ID:NoKtCgyr
あと1つご教授いただきたいのですが、 ディレクトリごと削除ではなくディレクトリ内をすべて削除(サブディレクトリと ファイルすべて)して、根っこのディレクトリは残したい場合は、どのように コマンドをうてばいいのでしょうか?
>>461 >cdはだめなのにpushdだとできるってのはなぜなんでしょうかね。
各々のコマンドを作った人がそういう仕様にしたから。
>>462 pushd 対象フォルダ&&rmdir /s /q .&popd
で、カレントフォルダにして削除失敗させる、というのはどう?
「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」
ってエラーメッセージが出るけど、一応それらしい動きはできた。
エラーメッセージが邪魔なら、
pushd 対象フォルダ&&rmdir /s /q . 2>nul&popd
464 :
名無し~3.EXE :2005/12/21(水) 14:00:16 ID:1jbFzpCY
コマンドプロンプトでの話ですが ファイル名()括弧を付けると、認識されなくなるけど ()は使えないのですか?
ググればすぐ解ることをここで聞くな
466 :
458 :2005/12/21(水) 20:44:48 ID:xNLELe48
>>463 ありがとうございます。
ナイスなアイデアですね。
デスクトップにリムーバブル ディスク(G:)の中の\WORKというフォルダーごと コピーしいと思い xcopy /e G:\WORK C:\Documents and Settings\Administrator\デスクトップ\WORK\ とすると、無効なパラメータですと表示されコピーコマンドを実行できません どうしたらデスクトップにフォルダーごとコピーできる出来るでしょうか、 教えてください
うんこなマイ糞そふとだから 自社誠意なのに糞で 半角通らね。DOS形式で 昨日はハマッた。 ""NGでDOS形式 うんこー
>>467 パスにスペースが含まれるとそこで切れちゃうのだ。
パラメータがいくつもあると解釈されてしまうので、
そういうパスは"(ダブルクォート)で囲む。
>>469 さん
ありがとう
xcopy /e G:\WORK C:\"Documents and Settings"\Administrator\デスクトップ\WORK\
こうしたら、成功しました、全く知りませんでした勉強になりマスタ
>xcopy /e G:\WORK "C:\Documents and Settings\Administrator\デスクトップ\WORK\" と、パス全体で囲むのが普通だけどな。
>xcopy /e G:\WORK C:\"Documents and Settings"\Administrator\デスクトップ\WORK\ これでもOKなことを初めて知った・・
俺も472と同じく
C:\Documents" "and" "Settings\Administrator\デスクトップ\WORK\ 単に""で囲われた部分のスペースは、パラメータの区切りとして見ないってだけなので スペース部分が囲って有ればどう書いてもOK
でも
>>472 >>475 はMS製アプリでは使えても他のものでは
使えるとは限らんから止めとくのが無難だな。
C言語のランタイムルーチンはコマンドラインをargc,argvに変換するとき
スペースをパラメータの区切りとみなす。
"があると次に"が出るまでのスペースはパラメータの区切りではなくなる。
\"はどこで出てきても"1文字の意味になりパラメータ区切りを制御しない。
\"以外の組み合わせの\には特別な意味はなく\そのもの。
結果として"C:〜\"はプログラムにはC:〜"がわたる(C:〜\ではない)。
prog "c:\x x\" d:\はc:\x x" d:\という1個のパラメータになる。
c:\x x\とd:\の2個にはならない。
VC6,BCC5.5.1とも同じ挙動だった。
パス名の最後に\がつくかつかないかで意味を変えるプログラムは
ランタイムルーチンのパラメータの解釈とは相性が悪い。
パラメータの末尾が\の場合は
>>470 のほうが
>>471 よりもよい。
481 :
名無し~3.EXE :2005/12/24(土) 18:30:05 ID:bzKlIUaC BE:81522667-
>>480 ならない。
"の後の\"が"になるだけなので、最初の\"はエスケープされない。
C:>type hoge.c #include <stdio.h> void main(int argc, char *argv[]) { int i; for (i=1; i<argc; i++) printf("%d: [%s]\n", i, argv[i]); } C:>cl hoge.c Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86 Copyright (C) Microsoft Corporation 1984-2002. All rights reserved. hoge.c Microsoft (R) Incremental Linker Version 7.10.3077 Copyright (C) Microsoft Corporation. All rights reserved. /out:hoge.exe hoge.obj C:>hoge C:\"Documents and Settings"\Administrator\デスクトップ\WORK\ 1: [C:"Documents] 2: [and] 3: [Settings\Administrator\デスクトップ\WORK\] C:>hoge "C:\Documents and Settings\Administrator\デスクトップ\WORK\" 1: [C:\Documents and Settings\Administrator\デスクトップ\WORK"]
C:\>gcc -o hoge hoge.c hoge.c: In function `main': hoge.c:3: 警告: return type of 'main' is not `int' C:\>hoge C:\"Documents and Settings"\Administrator\デスクトップ\WORK\ 1: [C:\Documents and Settings\Administrator\デスクトップ\WORK\] C:\>hoge "C:\Documents and Settings\Administrator\デスクトップ\WORK\" 1: [C:\Documents and Settings\Administrator\デスクトップ\WORK\]
スタートアップルーチン任せってことか
ファイルの内容を変更せずに更新日時だけを更新する技として copy file.txt + ,, というのを知りましたが、いまいちカラクリがわかりません。 これを文法的に説明できる方いましたら教えてください。
copy file.txt+ だけでもよさそう。 copy file.txt+ . ってやったらエラい事になった。
487 :
479 :2005/12/25(日) 19:11:53 ID:CJVIstEG
>>480 >>481 へ
"C:\Documents and Settings\Administrator\デスクトップ\WORK"\
なら
1:[C:\Documents and Settings\Administrator\デスクトップ\WORK\]
になる。間違えてしまった。
>>482 >>483 実証ありがとう。
gccはUNIX由来だから、gccのランタイムルーチンは\エスケープはシェルが実行
済みという前提でパラメータを解釈するから\に特別な意味をもたせないのだと
思う。
>>487 本当だ。ランタイムで動作が違うのか。
ちなみに、Documents" "and" "SettingsならMSCでも大丈夫だった。
489 :
名無し~3.EXE :2005/12/29(木) 09:22:57 ID:GpEKGL9e
windowsXPを使用しています。 セキュリティーのかかったUSBストレージ(MF-RU2S)を使用しているのですが、 差し込むたびに2つのドライブとして認識され、わざわざAドライブ(一つ目)にある "UDPv258.exe"をクリックしてパスワードを入力する必要があります。 さてここで質問なのですが、USBストレージを差し込むたびに自動的にパスワード 入力画面を表示させるためにはどのようなバッチファイルを作ればいいのでしょうか。 よろしくお願いします。
XPで、ディレクトリを右クリック>コマンドプロンプトでそのディレクトリを カレントディレクトリにしてプロンプトを起動できるようにするソフトって なんでしたっけ? それと、確かそのソフトはディレクトリウィンドウの中で右クリックしても 新規作成とかと並んでプロンプト起動ってのがなくて、 つまりカレントディレクトリより1つ上のディレクトリから起動しなきゃならんかったんですが、 それができるソフトってありませんか?
MS純正のPowerToyに入ってるよ
494 :
490 :2005/12/29(木) 15:38:16 ID:sEMS2YME
>>491 >>492 窓の手でしたね。ありがとうです。
で、やっぱりディレクトリを開いた状態ではできないんですかね…
窓の手は知らんが PowerToys の Open Command Window Here の場合は explorer のコントロールボックス右クリックから カレントディレクトリでcmdを起動できる
496 :
490 :2005/12/29(木) 16:07:22 ID:sEMS2YME
>>495 おおおお、ありがとうです。で、窓の手を先に入れてたんですが、
窓の手でもコントロールボックスから起動できました。
こんなところにあるの、気づきませんでした。ありがとう
窓の手よりPowerToysの方(しかも日本語化しない方がさらによい)が若干使いやすいよ。 どう違うかは、まあ両方使ってみてくれ。
これと、SendToXのClipboard as Nameだけ使ってる。
>>489 --ここから---------------------------------------
A:\UDPv258.exe
--ここまで---------------------------------------
・・・バッチファイル作って何したいのか知らんが。
ファイル名指定で*.*というワイルドカードを指定した場合に、 拡張子のないファイルも対象になってしまうのはなぜなんです? 自分的には少なくともファイル名にドットが1つ含まれないとマッチ しないと思うのですが・・・。
>>500 もともとMS-DOSでは"."はファイル名と拡張子の「区切り」だから
502 :
500 :2005/12/30(金) 23:21:44 ID:AeUItfou
レスどうもです。 では、*.?*でも拡張子なしファイルにマッチしてしまうのは おかしくないですかね。?は最低でも一文字必要かと思うのですが。
DOS標準のコマンドなら ? は0文字でもマッチする。 C:\>dir /w *.txt 0.txt 01.txt 022.txt 0333.txt 1.txt 22.txt C:\>dir /w 0*.txt 0.txt 01.txt 022.txt 0333.txt C:\>dir /w 0?.txt 0.txt 01.txt C:\>dir /w ?.txt 0.txt 1.txt 厳密にはDOS(Windows)のワイルドカードは 渡されたプログラム側が展開処理をするから プログラムごとに解釈が異なる(場合がある)
504 :
500 :2005/12/31(土) 18:11:23 ID:nrSdVY/H
たしかに?は0文字にマッチしますね。 知りませんでした・・・。 どうもです。
?が0文字でマッチすることを知らなくて泣いたことがあるのを思い出した・・・
XPです ファイルの圧縮(解除)「COMPACT 」やってるのですが Documents and SettingsやProgram Files、あと個人的に作ったDownloaded Files を指定しても「指定されたファイルが見つかりません。」と返ってきます C:\Documents and Settings\ユーザー名>COMPACT /S:C:\フォルダ名 COMPACT て感じで指定しました WINDOWS等、Cドライブにある他のフォルダはこのコマンドで状態表示できたのですが・・・ どう指定すればいいのか、どうかご教授いただけないでしょうか
括れ
508 :
506 :2006/01/04(水) 01:15:28 ID:gKzE2qyO
>>507 速レスしていただいてたのですね、どうもありがとうございます
で、すみません
ぐぐってみて、" や{ を使うのは分かったのですが
どの括弧を使えばいいのかまで分からないです・・・( や[ もアリっぽい・・・?
お手数かけて申し訳ないですが、どれで括るのが妥当か教えていただけないですか?
すみません・・・
"C:\Documents and Settings\username\デスクトップ\NewFolder" こんな感じでどう?
>509 ありがとうございます うまくいったみたいです。助かりました >507さん>509さん、レスどうもでしたー
batで ----------------------------------- before1.txt testtest(test) teststring (foo) foobar foobar ----------------------------------- before2.txt teststringは <answer></answer> です。 ----------------------------------- という2つのtxtで、before1.txtの中でteststringから 始まる行にあるカッコを探し出して、 その中にある文字列をbefore2.txtに埋め込み ----------------------------------- after.txt teststringは <answer>foo</answer> です。 ----------------------------------- というテキストを出力したいのですが、どうしたらいいでしょうか? よろしくお願いいたします。
Perlがいいんじゃないか。
awkマンセー
>>512 >>513 Perlもawkも知識なし…
これだけのために覚えるのも大変だし…って感じで
できたらDOSのBATで済ませたいなと…
まぁそのDOSの知識もへっぽこなんですが…orz
Perlやawkを覚えるのが面倒だからJavaやC#で片付けてしまう俺がいる
>>511 こんな感じかな。(Win2k/XP限定)
@echo off
setlocal enableextensions
for /F "tokens=1,*" %%a in (before1.txt) do if "%%a"=="teststring" (
set ans=%%b
set ans=!ans:*(=!
for /F "tokens=1,* delims=)" %%a in ("!ans!") do set ans=%%a
)
if exist after.txt del after.txt
for /F "tokens=1,* delims=" %%a in (before2.txt) do (
set str=%%a
set str=!str:^<answer^>=^<answer^>%ans%!
echo !str! >> after.txt
)
だがな、
ここまでするなら文字列処理に強い言語覚えてそれでやれ!
>>517 ありがと。でも実行してみたら
!str!
!str!
!str!
っていう3行のテキストができた…orz
>>518 setlocal enableextensions
↓
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
質問です。バッチから起動したプログラム(自動終了しない)を、 たとえば30秒後に終了させるということは可能でしょうか? また、バッチから起動したコマンドライン内で起動するプログラムが Press enterのような不変的な入力を求める場合、それを自動的に 入力させることは可能でしょうか?
sleep.exe や yes.exe みたいなもん拾ってくれば
>>522 レスどうもです。
yes.exeはcygwinに入ってるようですが、単体の実行ファイルとしてどこかで拾えますかね?
526 :
名ナシ :2006/01/15(日) 10:08:41 ID:IzpH4AE/
数百のテキストファイルがあって、各ファイルの1行目だけを1つの ファイルにしたいんです。 各ファイルの1行目だけ表示する方法ってありますでしょうか?
527 :
名無し~3.EXE :2006/01/15(日) 11:07:11 ID:/vU+Tvab BE:67935757-
head 1
528 :
名ナシ :2006/01/15(日) 13:56:15 ID:IzpH4AE/
526です。 527さん、早速にありがとうございます。 headコマンドがわからなかったので、ベクターがら、ダウンロードしました。 for %%F in ( * ) do head -1 %%F >>a.txt で、出来ることが出来ました。こんなに早く解決して、感謝感激です!!
529 :
名無し~3.EXE :2006/01/17(火) 03:48:58 ID:/P6nNtk2
超超FAQだとは思うのですが、教えてください。 xcopyでバックアップを取ると、差分でとってくれますが、 コピー元で消したファイルもコピー先に残っています。 これを回避するにはxcopyの前にDELをするなどするしかないのでしょうか? xcopyでは削除分も反映させてバックアップをすることは出来ないのでしょうか? ものすごく単純な質問なのですが、よろしくお願いいたします。
俺はrobocopy使ってる。
俺はブリーフケース使ってる
533 :
名無し~3.EXE :2006/01/18(水) 01:56:58 ID:ZqucmEb1
すみません、以下のようなfor文で上手くエラーに飛ばないので解決策を教えてください。XPです。 ファイル:aaa.txt ----中身---- 111.bat 222.bat ・・・ ------------------------------------------------- for /f %%i in (aaa.txt) do (call :lb1 %%i) goto end_repeat :lb1 set name1=%%1 if exist %name1% goto err1 goto :eof :end_repeat exit /b 0 :err1 echo エラー用文言 exit /b 11 ------------------------------------------------- <やりたいこと> ファイル[aaa.txt]を読み込み、レコードに仕込んだファイルが存在しなければエラーフラグ[err1]より戻り値11で終わりたい。 <問題点> 存在しないファイル名を読み込んだとき、一時的に戻り値が11になるが何故か終了せずに[aaa.txt]の終わりまで読み込み続ける。 <知りたいこと> call中に問題が発生した時に、任意の戻り値をもって異常終了としたい。 こんな感じ、わかる人居たらお願いします。
>>533 >一時的に戻り値が11になるが
「ファイルが存在しない時」に ERRORLEVEL = 11 にしたいのなら if の判定条件が逆。
>何故か終了せずに[aaa.txt]の終わりまで読み込み続ける。
「call :lb1」中で「exit /b xx」としても :lb1の呼び出しからぬけるだけなので
forループは最後まで行われる。
@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /f %%i in (aaa.txt) do (
call :lb1 %%i
if !ERRORLEVEL! neq 0 goto :EOF
)
goto :EOF
:lb1
set name1=%1
if NOT exist %name1% goto err1
:end_repeat
exit /b 0
:err1
echo エラー用文言
exit /b 11
<やりたいこと>をするだけなら @echo off setlocal EnableExtensions EnableDelayedExpansion for /F "delims=" %%i in (aaa.txt) do if not exist %%i ( echo エラー用文言 exit /b 11 ) echo 全てのファイルが存在 exit /b 0 でもいいと思うが。
数百あるブックマークのファイル名変更を行いたいのですが、
すべてのブックマークの内容が
[InternetShortcut]
URL=
http://www.somewhere.com/?usid=user123 Modified=6000F1F6EA1DC60115
といった内容で、2行目のusid=の後にユーザーIDが入っています。
今、ブックマークのファイル名はユーザの氏名が日本語で入っているのですが、
ファイル名をユーザーIDに変えたいのですが、どうすればいいですか?
よろしくお願いします。
>>537 forとfor /fでいけるけど、こういうのはwsh使った方が楽かもな
全部書いてくれとか言うなよ
@echo off dir *.url /b> dir.txt for /f "tokens=1,* delims=" %%a in (dir.txt) do ( ren %%a %%b.url ) del dir.txt ここまでしかやり方が… for /fの使い方とか、文字列検索で内包パターンでなく、直前のパターンとかを 指定する方法がわからなくて…
>>539 おまえは「やりたいこと→それを実現するドンピシャの機能」と見ているからダメなんだよ。
「やりたいことを実現するには、既存の機能をどう組み合わせてどう使えばいいか」を考えなくちゃ。
プログラムやスクリプト書くなら、頭は柔軟にね。バッチだってWindowsスクリプトだから。
バックアップのバッチを作ってるのですが、ftpでサーバUPする際、できれば一つのファイルに まとめたいと思ってます。その方法が調べてもなかなかわからないので、 教えてもらえませんでしょうか
圧縮する
保守
なんでデフラグのDOS版はないの? スキャンディスクはあるのに…
あると思うけど
>>545 さんの補足
>>544 あると思うが・・・・ね.
MS-DOS Ver6.0以降についているのでは?
(PC-DOSなら,Ver6.1以降)
サードパーティからは・・・っていうか本来はこっちが先だと
思うのだが,ノートンユーティリティ(DOS版)では,スピードディスク
って名前だったと思うが.
>>545-546 MS-DOS のドライブで実行するぶんには問題無いけど、
Windows 9x/Me で実行すると LFN がぐちゃぐちゃ(w
になるので、事実上は使用禁止ね。
(かつて、PC-DOS 2000 (IBM) のでひどい目にあった
経験あり…orz)
>>547 何いってんの?
WindowsならWindows版使えばいいじゃんか。XPならCUI版もあるし。
>>544 はDOS版がほしいっていってるんだから「あるだろ」って答えが返ってきただけ。
>>548 >WindowsならWindows版使えばいいじゃんか。XPならCUI版もあるし。
確かにね。ただ、その当時は WIN386.SWP ファイルの断片化(のちに
DKlite でWindows から最適化できるとわかった)、レジストリ(SYSTEM.DAT)
の分断などを DOS から直そうとして大ボケしてしまったわけ。
ファイル単位で良ければContigなるツールがあるが。>断片化解消
551 :
名無し~3.EXE :2006/01/31(火) 01:36:23 ID:V3Fg8U45
突然ですみません。 コマンドプロンプトについて質問させてください。 javaの入門書を読みながらjavaの学習をしています。 コマンドプロンプトにて以下のコマンドを使用すると 実行結果が表示されず新しいウィンドウが開いてしまいます。 javac Helloworld.java java Helloworld 最初のウィンドウには「続行するには何かキーを押してください . . .」 と表示されてしまいます。 何か他に必要なコマンドがあるのでしょうか? コンパイルは通っているので実行可能なはずなのですが・・・。
552 :
質問です :2006/01/31(火) 02:28:29 ID:63T5M3XN
コントロールパネルからサウンドシステムを消してしまったみたいで、 音に関するものがすべて使えなくなってしまいました。バックアップも 取ってなくて・・・どうすれば復元できますか?
>>552 釣りかもわからんが、マジレスするとOSの再インストール。
コマンドラインに関係ないけど
>553 いい加減なこと言っちゃイカン。 もっとも>552の環境が分からない限り、それが一番正解に近いだろうけど…
555 :
名無し~3.EXE :2006/02/04(土) 18:53:27 ID:K1wxsdvj
UNIX(シェル?)のwhereやwhichのようなコマンドってXPのコマンドプロンプトにありますか?
cygwin使え
作業ディレクトリが絶対パスで表示されているんだけど、 これを作業ディレクトリだけをひょうじするようにはどうしたらいい? こんなかんじ C:\Documents and Settings\hogehoge> ↓ hogehoge>
558 :
557 :2006/02/06(月) 22:09:22 ID:2aXqUQDY
ごめん、日本語変だ。 これを作業ディレクトリだけをひょうじするようにはどうしたらいい? ↓ これを作業ディレクトリだけを表示するにはどうしたらいい?
できない。できることはprompt /?参照。 ちなみにそれを作業ディレクトリと呼ぶのは普通なの? 違和感あるんだけど。
@echo off :loop for %%i in (.) do set pt=%%~ni set cmd= set /p cmd=%pt%^> %cmd% goto loop
>>559 ,560
答えてくれてありがと。
Linux雑誌とかでは作業ディレクトリっていわれてるかなあ。
point working directoryとかあるから、作業ディレクトリかなって。
Windowsのことはあんまり知らない。
こういうときはなんて言うの?
カレントディレクトリ
あ、なるほどね。
作業ディレクトリとかカレントディレクトリ、カレントフォルダってのは分かるけど フルパスじゃなくて末端フォルダ名だけを指して呼ぶのが違和感あるって感じ。
そだね、これから気を付けるわ。
566 :
名無し~3.EXE :2006/02/13(月) 16:04:38 ID:HG2eCb9c
XPのcmd.exeを使用しています。 スペースなどを含む文字列を使用する際に二重引用符("")で括りますが、 その中で二重引用符を使用したい場合はどうすればいいのでしょうか。 試行錯誤したところ"""と三つ並べて使用することで動作しているように見えますが、 ウェブ上を探し回っていますがこれに関する記述が見つけられず、 正しい方法なのか解りません。宜しくお願いします。
コマンドによって解釈が違ったりなんかしちゃったりして
570 :
名無し~3.EXE :2006/02/14(火) 21:58:19 ID:g3SUTpmr
同じディレクトリにある複数(何個あるか未定)のファイルを 別ディレクトリのひとつのファイルに結合したいのですが、 やり方をご存知でしたら、ご教授していただけませんか?
copy a + b c
572 :
566 :2006/02/14(火) 22:22:49 ID:XA+8uqgS
>>567-568 ありがとうございます。一応検索したつもりだったのですが、
ログ漁りが足りなかったようで申し訳ありません。
ずっとシェルだけが解釈しているものと信じてきましたが、
シェル側ではシェルに対するメタキャラクタの解釈を、
ランタイムライブラリ側では引数の切り分けを、とそれぞれでやっていたのですね。
あの後
>>566 のやり方や\"では"\"|"のようなケースで
動作しないことが判明したのですが、シェルは単純に"の数を数えて
メタキャラクタを解釈するかどうかを判断しているということで納得が行きました。
となると解決は難しそうですね…ひとまずcygwinのbashあたりに移っておくことにします。
ちなみに、cygwin上bashからWindows用のコマンドを使用する際に
''を使用して動作しているのはなぜかと思いGetCommandLineを呼んで調べてみたところ、
どうやらWindowsの流儀にあわせて変換して起動されているようですね。
./cmdline 'abc " def\' -> abspath\cmdline.exe "abc \" def\\"
色々と勉強になりました。どうもありがとうございました。
573 :
名無し~3.EXE :2006/02/17(金) 23:29:33 ID:i2vEytVW
コマンドプロンプトで copy data/data0.dat data0.dat とやると、dataディレクトリからカレントにちゃんとコピーされるのですが、 copy data/data0.dat ./data0.dat とやると、dataディレクトリの全ファイルがカレントにコピーされちゃうのですが、 これは何が起こってるのですか? よろしくおねがいします。
cd D:\temp del *.* よろしいですか (Y/N)? 自動でYにするには どうつけたしたらいいですか?
>575 ヒント:"入力リダイレクト"でGoogleれ。
578 :
575 :2006/02/19(日) 02:34:09 ID:JwaPNW3z
なんとかわかったよ サンクス
今は、 C:\WINNT\$NtUninstallKB329115$ C:\WINNT\ShellIconCache のような形のファイルリストをその都度生成し、 attrib +h C:\WINNT\〜のように書き換えてバッチファイルにして使っていますが、 ファイルリストをコマンドから直接利用できればいいのにと思っています。 できる方法があったら教えてください。
>>579 コマンドから直接利用できるようにするにはコマンドを作り直さなくてはなりません。
for /f で我慢していただけないでしょうか?
F4キーおすと「入力文字の前まで削除」というPUがでるけど これの使い方ってどうやるのですか?
>>581 そのままの意味
例えば
dir c:\hoge\huge
と入力した状態でカーソルを"c"の上に持って行き、F4の後に"g"を押すと
dir ge\huge
となる。
583 :
581 :2006/02/20(月) 10:03:45 ID:0AhJ4oOL
>>582 ありがとうごぜぇます。
カーソルを移動させてからやらないとだめだったんですね。
どうりで反応しないわけだ・・・
584 :
579 :2006/02/20(月) 22:24:52 ID:VAHhxmRL
>580 ありがとうございます。こういうのを探してました。 forコマンドも拡張されたんですね。
このスレの半分はfor /?で出来ています。
586 :
太一 :2006/02/21(火) 17:28:20 ID:zj1H7TWD
コマンド初心者でほとんど分かりません!!どうやって勉強するべきですか? 教えて下さい!!
太一はスルーで
588 :
名無し~3.EXE :2006/02/21(火) 21:59:29 ID:C/EbXnM+
Cygwinバイナリ版のGZファイルをインストールしたいのですが、わかりません。 Cygwinで、以下のようにコマンドしました。 # cd /usr/local # tar zxf xxx-xxx.tar.gz ←xxx-xxxはファイル名 すると、そんなファイルやディレクトリなんてねーぞゴルァってでました。 c:\usr\localにちゃんとGZファイルはあるのですが、どうしてでしょうか。 もしかするとGZファイルを解凍した物をc:\usr\localにおかないとだめなの でしょうか。教えてください。
mount打て /usr/localに何がマウントされてるか見ろ
590 :
588 :2006/02/22(水) 12:12:33 ID:iTswLZq+
>>589 $mount
C:\cygwin\bin on /usr/bin type system (binmode)
C:\cygwin\lib on /usr/lib type system (binmode)
C:\cygwin on / type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)
以上のようになりました。Cygwinに必要なパッケージがそろってないからでしょうか?
592 :
588 :2006/02/23(木) 18:16:49 ID:JHPY6ve9
なるほど。では、 $cd /usr/local $gzip -dc "C:\cygwin\ファイル名.tar.gz" | tar -xvf - こうしたのですが、どうもうまくいかないみたいです。 $/usr/local/bin/ファイル名 としたところ、 プロージャ エントリ ポイント _impure_ptr がダイナミックリンクライブラリ cygwin1.dllから見つかりませんでした。とでるのですが、これはどうなんでしょう
593 :
588 :2006/02/23(木) 18:43:18 ID:JHPY6ve9
ファイル検索かけると、2つcygwin1.dllが出てきました。 どちらを消すべきなのかがわからないのです。
595 :
588 :2006/02/25(土) 19:14:48 ID:0H9S5uJz
どうもありがとうです UNIX系は難しいですね
>>592 Cygwin(に限らずUnix系)のコマンドラインってバックスラッシュはエスケープしないといけなかったような気がしなくも無い。
質問です。 ¥親┬¥子001 ├¥子002 ├¥子003 ├¥子004 ├¥子005 └¥子006 ↑↑↑みたいなフォルダ構成になっています。 この「子001」〜「子006」までの子ディレクトリに、 もしhoge.txtというのがあったら、削除するっていうバッチを for文を使って組みたいのですが、 どうやっても上手く子ディレクトリを順次読み込みさせられません。 うまくいく方法を教えて頂けないでしょうか? 申し訳ありませんがよろしくお願いします。
for /d %i in (\親\子00*) do if exist %i\hoge.txt rmdir /s /q %i
>>598 あ、ありがとう御座います。。。。
助かりました。
600 :
名無し~3.EXE :2006/03/01(水) 11:46:34 ID:ilfrn0JD
すいません、教えてください。 スクリプトを組んで、子ディレクトリにファイルがあったら、 エラーにするスクリプトを作成したいんですが、 上手く行きません。 dir の結果が常に0で帰ってきてしまうのが原因のようです。 上手く行く方法を教えてください。 よろしくおねがいします。 ↓↓↓スクリプト↓↓↓ set WORK_DIR=\hoge for /f %%I in (work.txt) do ( dir /B %WORK_DIR%\%%I\*.* if %ERRORLEVEL% equ 0 ( echo ファイルあるよ! ) else ( echo ファイルないよ! echo エラーです exit 2 )
括弧の対応が取れていない気がするけど
602 :
600 :2006/03/01(水) 12:11:29 ID:ilfrn0JD
スイマセン。。。 一番最後の「)」はコピペミスで抜けてます。 forのループは巧く行ってるんですが、dirの箇所のエラー判定が巧く行かない感じです、、、
if exist "%WORK_DIR%\%%I\*.*" echo あるがな
604 :
600 :2006/03/01(水) 12:42:11 ID:ilfrn0JD
>>603 それもやってみたのですが、実際はファイルがないディレクトリでも、「あるがな」って表示されてしまいす(泣)
>>604 あ、ほんとだ。
んじゃ、こんなのは? 試してないけど
for %J in (%WORK_DIR%\%%I\*.*) do goto arugana
goto naigana
606 :
600 :2006/03/01(水) 13:05:46 ID:ilfrn0JD
WORK_DIRI\*.*の使い方が誤っています。 …と表示されてしまいました(泣)
copy %WORK_DIR%\*.* NUL して %ERRORLEVEL% を調べるって感じではいけませんか。
強引だけど。 for /d %i in (1\*) do dir /a:-d %i>nul 2>&1||echo %i ・・・対象フォルダ多数だったり、フォルダの中に数万ファイルとか入ってると重そう。
>600 (1)1行目に↓を追加 setlocal ENABLEDELAYEDEXPANSION (2)%ERRORLEVEL%を↓に置換 !ERRORLEVEL! (3)dir のオプションに↓を追加( . を除く) /a:-d ※ただしサブフォルダの存在は無視される。
610 :
600 :2006/03/02(木) 10:45:44 ID:27+e/blS
>609 ありがとうございました! できました!!! まじ感謝&感激です(T.T) 協力してくれた方もありがとうございました
(`・ω・´) いえいえ、どういたしまして。
atコマンドでNetscapeを起動しようと思い at 12:30 /every:S,Su "c:\Program Files\Netscape71\Netscape\Netscp.exe" という風に登録したのですが時間になってもまったく反応がありませんでした。 コンピュータの管理→システムツール→イベントビューア→システム を見てもエラー表示はなかったのでパスは間違っていないと思います。 何が原因で起動しないのでしょうか。
/interactive
>>613 早速のレスありがとうございます。
無事に起動する事ができました。ほんとうにありがとうございました。
クリック一発で explorer.exe を終了させるアイコンを作りたいんですが、コマンドラインで可能ですか?
アイコンはなくて恐らくデスクトップショートカットだろうけど すれ違いだし、タスク終了系のソフトでもヴェクターで探してやってみれ
shutdown で、よくね?
>>572 hoge "\"^|
ではどうでしょうか。もう見ていないか。
hoge "\"^||cat.exe
指定したファイルおよびフォルダを削除するにはどうしたらよいでしょうか。 つまり、ファイルが指定されたときはdel、フォルダが指定されたときはrmdirを行うような、 一般のファイラ(エクスプローラ含む)の削除と同じ操作をコマンドラインでさせたいのですが。
622 :
620 :2006/03/22(水) 13:47:51 ID:8gchgddc
>>621 ありがとうございました。
早速試してみました。
かなりよい感じだったのですが、複数ファイルの指定が出来ずこれが難点でした。
WSHを利用したスクリプトで出来るのかもと思ってみましたが(なにせ初挑戦)、
引数がファイルかフォルダかで条件分岐させる方法からまったく分からず、
こちらも手が出せずにいます。
>>622 とりあえずこんな感じでどう?
@echo off
for /D %%I in (%1) do rmdir /s /q %%I >NUL 2>&1
for %%I in (%1) do del /f /q %%I >NULL 2>&1
あ、複数指定か。 じゃあこれをループさせて。(shiftコマンドを使うとかね)
625 :
234 :2006/03/23(木) 00:26:47 ID:PDwRVbfz
すみません初心者です。教えてください。 今、cshの拡張子(コンパイルを制御するシェルスクリプト)のファイルを 実行しようとしていますが、できません。どうすればよいですか? windowsXPのdosプロンプトから実行すると、 「このファイルを開けません。このファイルを開くには作成元のプログラムが必要で〜〜」と表示されてしまいます
>>625 名前から想像すると、UNIXのCシェルのスクリプトのようだから
Cシェル実行環境で実行するか、
BATファイルやWSHに書き換えて実行するかしないといけなくない?
cygwinが前提だったりしないかな コマンドの作成者に問い合わせてみればどうよ
DRDOSにXDELって有ったよな?
629 :
625 :2006/03/23(木) 07:21:56 ID:PDwRVbfz
UNIXとかも全くわからないのですが、 とりあえずcygwinをインストールして、 そのcshファイルに関連づけしてから、DOSプロンプトで実行してもダメでした。 サポートが一切ないみたいで、作成者に問い合わせもできませんので困っています。
cygwinインストールディレクトリのルートにあるはずの cygwin.bat をダブルクリック すると プロンプトで bash かなんかが起動するので, $ csh /path/to/hoge.csh とやってやればいいんでないでしょうか. 関連付けとかあんまし関係ないような.
余計なことかも知れんけど、ビルド環境はきちんと整ってるの? 後からcygwinとか入れたようだしちと心配になって来たよ。 コンパイラの違いで制御は変わってくるので、指定のコンパイラを準備してるよね? あと、普通はmakefileで制御するので、 それ以外のスクリプトがあるというのならいろいろ複雑に環境を要求して 切り分けとかしてそうなので、外部のライブラリとかその他いろいろと必要なものを 事前に用意しなきゃならなくなる気がするよ。
632 :
625 :2006/03/24(金) 01:19:54 ID:BO6DsPx3
すみません。なんか難しい話になってきました。 $ csh /path/to/hoge.csh を実行すると、 no such file or directoryとかでてきてしまいます。
633 :
625 :2006/03/24(金) 07:06:34 ID:BO6DsPx3
まちがえました。 command not foundと表示されてしまします。
634 :
名無し~3.EXE :2006/03/24(金) 08:13:41 ID:Gj5ZdbsV
ワイルドカード使い方で躓いています。 ・「?」を任意の1文字のつもりで使っていますが、8文字を検出してくれません。 ・使用OS Windows2000 ・例 dir ????????.txt で 20060324-0811.txt まで出てきてしまう。 短縮ファイル名の扱いあたりが引っかかっているかと思いますが、 「?」8個のみの検出方法を教えてください。
635 :
634 :2006/03/24(金) 08:34:12 ID:Gj5ZdbsV
既出の 0文字 または 1文字 の問題で、8文字以下がヒットするのは理解してますが、 「?」の数より多いのが当るのが困ってます。
ショートファイル名にひっかかってんじゃね
637 :
名無し~3.EXE :2006/03/24(金) 15:37:30 ID:HuF91eeG
>>635 外部プログラムで正規表現で検索するようなのが良い気もするけど
参考程度にどうぞ。
(ただし存在しているファイル名によってはうまくいかない場合もあると思う)
【その1】
@echo off
set p=%1
if "%p:~0,8%" neq "????????" goto skip
if "%p:~8,1%" equ "?" goto skip
for %%I in (%1) do call :sub %%I
goto :eof
:skip
dir %1
goto :eof
:sub
set p=%~n1
if "%p:~7%" equ "" goto sub_end
if "%p:~8%" neq "" goto sub_end
echo %~nxtza1
:sub_end
【その2】 @echo off setlocal EnableDelayedExpansion set p=%1 if "%p:~0,8%" equ "????????" if "%p:~8,1%" neq "?" goto dir_only_8char dir %1 goto end :dir_only_8char ### "?"が8個の場合は、8文字のみにヒットさせる ### dir %1>tmpfile for /f "delims=" %%I in (tmpfile) do ( set p=%%I if "!p:~0,1!" equ " " ( echo %%I ) else ( for /f "tokens=1-4* delims= " %%J in ("%%I") do ( set p=%%~nM if "!p:~7!" neq "" if "!p:~8!" equ "" echo %%I ) ) ) del tmpfile :end endlocal
Windows2000をつかってます 例えばhoge.exeを起動するだけ終わるバッチファイルを作るとして、 ---------- C:\hoge\hoge.exe exit ---------- としようとしたんですが、これだとhoge.exeが終了するまでコマンドプロンプトが終了しません。 hoge.exeが終了しないでも起動しただけでコマンドプロンプトを終了させる方法ってありますか? あればその方法を教えていただきたいです
start C:\hoge\hoge.exe
batファイルで今日の日付のフォルダがあったらcommandを実行するってどうすればいいのですか?
>>642 @echo off
rem ---------------------------------------------------------
rem 事前にセットしておく(指定以下の全てのサブフォルダが対象)
rem または、第1パラメタが指定されたらそれを対象Dirとする
set target_dir="c:\"
rem ---------------------------------------------------------
if "%~1" neq "" set target_dir="%~1"
set hit=0
for /f %%I in ('date /t') do set today=%%I
for /d /r %target_dir% %%I in (*) do (
for /f %%J in ("%%~tI") do (
if "%%J" == "%today:~2%" set hit=1&echo *** "%%I" が hit しました ***
)
)
if %hit%==1 echo *** 本日(%today%)に作成されたディレクトリがあります ***
上記はWindows2000の場合であり、WindowsXPの場合には >if "%%J" == "%today:~2%" set hit=1&echo *** "%%I" が hit しました *** を if "%%J" == "%today%" set hit=1&echo *** "%%I" が hit しました *** に変更してください。
645 :
642 :2006/03/30(木) 23:58:08 ID:ElZOfdFo
ありがとう
646 :
名無し~3.EXE :2006/03/30(木) 23:58:34 ID:bfD6kFkf
いい例だ
647 :
名無し~3.EXE :2006/03/31(金) 11:30:28 ID:9qnhXCIA
たとえば hostname と入力するとホストネイムが表示されます バッチファイルの中で, hostname コマンドから得られた文字列を host という変数に入れるのはどうすればいいのでしょうか?
↑可能なら私も知りたいです。よろしくお願いします。
>>647 ここの質問のうち、半分はforで解決します。
って以前から言われてる気がするけどね。
643でもそのテクニックを使ってますよ。(643は内部ループ%%Jは不要だったね)
あとは一旦ファイルに結果をリダイレクトしても可能。
結果を複雑にフィルタリングしたり加工したりしたい場合はこっちかな。
%COMPUTERNAME%で事足りる鴨
%LOGONSERVER% %USERDOMAIN% なんてのもあるね。
100個のテキストファイルの各々のファイル名を、 各々のファイルの先頭に埋め込みたいのですが、 「%%I の使い方が誤っています 」というエラーが出てしまいます。 どうしたらよいのでしょうか for /r "%1" %%I in (*) do echo %%I>"%%I.txt"
>>652 本当にバッチスクリプトファイルですか?別にそんなエラーは出ないけど。
コマンドラインから直接指定してるわけじゃないだろうし。
環境はWindowsXP?
気になる点
・"%1"では、渡されるパラメタに既に""が付いてる("c:\Program Files"とか)
とエラーになるよ。forのヘルプを見てチルダをつけよう。
・再帰的に実行途中で自分が作成した"%%I.txt"がさらに対象に含まれてしまい
"%%I.txt.txt"とか"%%I.txt.txt.txt"とか...幾つも出来てしまう。
・そもそも
「テキストファイルの各々のファイル名を、各々のファイルの先頭に埋め込みたい」
とは、俺がこの文章を解釈すると
「既存のファイルに、先頭1ライン目に自分自身のパス名を追加したい」
と読めるんだけど?
なら、テンポラリファイルをそのように作成してから、元のファイルを削除後に
テンポラリファイルを元のファイル名にリネームするようにしないと。
fcコマンドは前後の行も出てしまいますが、2行目と5行目(←の部分)のみを c.txt に書くコマンドがありましたらお願いいたします ***** a.txt 1行目 3行目 ***** b.txt 1行目 2行目 ← ここと 3行目 ***** ***** a.txt 4行目 6行目 ***** b.txt 4行目 5行目 ← ここ 6行目 ***** . .(以下続1000行目まで続く)
>>654 そんなのは無いと思う。
一旦それで出力したファイルを、内容を判断して編集するようなスクリプトを作れば可能。
でも標準のバッチスクリプトの範囲じゃ不可能とは言わないまでも、かなり難しいことになりそう。
Perlとかsed、awkとか又はWSH(JAVA/VBスクリプト)を使った方が良い。
つ diff
657 :
654 :2006/04/02(日) 00:47:19 ID:4HhcfITl
>>655 そうですか。。
a.txt の中で、抜けているものだけを
抽出できればいいのですが。。。
658 :
名無し~3.EXE :2006/04/03(月) 17:29:07 ID:fkxNCG9G
お世話になります。 以下のようなディレクトリ構造になっているファイルを、 「Data」ディレクトリ以下からまるごとコピーするような シェルスクリプトを作りたいのですが、どうしたらいいでしょうか? ちなみに、「Data」ディレクトリ以下は、月日ごとに増えていきます。 \Data\200603\01\ファイル \Data\200603\02\ファイル \Data\200604\01\ファイル \Data\200604\02\ファイル また、以下のようなファイルを、毎日、 名前を変えてコピーするようなシェルスクリプトを 作りたいのですが、どうしたらいいでしょうか? \Zaiko\zaiko.csv 私が調べた限りでは、方法は無いのですが、 DOSプロンプトに詳しい方、よろしくご教授願います。
やぁドザの皆さん 何?今日もウィルス反応? ダメだねぇWindowsは 世界最速のMacOS ウィルスにもびくともしない最高のOSです さあ、ヲタ専用機Windowsから乗り換えよう Switch Mac
660 :
名無し~3.EXE :2006/04/03(月) 17:48:28 ID:uPERw6r0
ずっと疑問に思ってたんだ なぜWindowsはヲタ専用なのか Macをつかってみてやっと理解できたよ さあ、世界最速Macを使って実感しよう 「Windowsはヲタ専用機」 Switch Mac
Switch Mac って気持ち悪いな Switch to Mac ならまだ分かるが
662 :
名無し~3.EXE :2006/04/03(月) 18:02:27 ID:uPERw6r0
やぁ、ドザの皆さん ずっと疑問に思ってたんだ「なぜWindowsはヲタ専用機なのか」 だがこの疑問はMacを使ってやっと理解できたよ 全てを自動化 古くさいWindowsは窓から捨てよう Swicth Mac
663 :
名無し~3.EXE :2006/04/03(月) 18:13:12 ID:Rn50HHOe
Swicth Mac
664 :
名無し~3.EXE :2006/04/03(月) 18:28:44 ID:fkxNCG9G
お世話になります。 以下のようなディレクトリ構造になっているファイルを、 「Data」ディレクトリ以下からまるごとコピーするような シェルスクリプトを作りたいのですが、どうしたらいいでしょうか? ちなみに、「Data」ディレクトリ以下は、月日ごとに増えていきます。 \Data\200603\01\ファイル \Data\200603\02\ファイル \Data\200604\01\ファイル \Data\200604\02\ファイル また、以下のようなファイルを、毎日、 名前を変えてコピーするようなシェルスクリプトを 作りたいのですが、どうしたらいいでしょうか? \Zaiko\zaiko.csv 私が調べた限りでは、方法は無いのですが、 DOSプロンプトに詳しい方、よろしくご教授願います。
>>664 1つめ、xcopy /?
2つ目はどういう名にしたいのか?
日付追加とかなら少し上をみろ。
1日1回だけ実行とかなら、フラグ用のファイルを何処かに作成せよ。
牛肉食え switch mac
toが抜けてるどころじゃなくそもそもswicthとか激しくスペルミス
668 :
名無し~3.EXE :2006/04/04(火) 15:19:31 ID:KZuF/5b3
バッチファイルで, dir >files.txt と記述しているだけなのですが,実行するとなぜか dir 1>files.txt と数字の1が付加されて表示されてしまいます。 files.txtには正しくdirが実行された結果が記録されていますが。 なぜこうなるか分かりますでしょうか。 Windows2000です。
Thanks!!
671 :
名無し~3.EXE :2006/04/10(月) 22:42:04 ID:lFIWGQY5
printscreenを実行してくれるDosコマンドはありますか? winXPです。
>>671 クリップボードにスクリーンキャプチャした画像データを入れたいのか?
実行されるとGUIフォーム出さずにクリップボードに画面全体をコピーして終了するって言うソフト作ればいいんじゃね? VB6でいいなら作ろうか?
674 :
名無し~3.EXE :2006/04/11(火) 22:01:09 ID:24GQ871B
>>672 何か一定のファイル名で画像を保存できればよいです。
クリップボードにコピーは必要ないです。
>>673 Dosコマンドにはprintscreenと同等のコマンドはないってことですよね・・・
よければVBでください。
677 :
673 :2006/04/12(水) 10:23:11 ID:LdD/nizO
横レススマソ
WSHすげー!と思って、見よう見真似で↓作ってやってみたけど、貼りつかなくない?
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "{PRTSC}"
>>675 に
>メモ アプリケーションに PrintScreen キー ("{PRTSC}") を送ることはできません。
って書いてあるし。
横からすみません
この
>>677 のものを実行したらその時点での画像がクリップボードに行きますよね
そのあとそれを保存するのはどうしたらいいでしょうか
clipbrdビュワーを立ち上げて手動で保存じゃなく、
適当なファイル名a.jpgで自動で保存させたいんです
>>681 リソースを一切消費しないという表現が何度も出ているけど
ありえん話だな
684 :
680 :2006/04/13(木) 13:30:07 ID:Jqvoj0OE
>>681 これは起動オプションが豊富ですね
batでいろいろ出来そうです
よいものを教えていただきありがとうございます
685 :
名無し~3.EXE :2006/04/14(金) 14:53:04 ID:vIdluHvT
次のようなbatファイルを作成したいです 連続して何個かのファイルを読み込みたいのですが、 ソースをHDDにあるファイル、ディスティネーションをlinuxでいう /dev/null(ディスクへの書き込みをせず)にして、 それぞれのファイルの読み込みに掛かる時間を調べたいです だれか作って下さい。・゚・(ノ∀`)・゚・。
cygwinからcat.exeとtime.exeもってきてnulに吐くのが手っ取り早い
ありがd 解決しました!!
わりと冗談だった 今は反省している
ワラタ
ディスティネーション ~~~~~~~~~~~~~~~~~~~ /dev/null ~~~~~~~~~ 凄すぎw
>>690 どこが凄いのかさっぱりわからない。
説明よろ。
XPhomeです このスレで知ったリファレンスを一発で呼び出せる裏技を便利に使っています ふと、思ったのはhhがリファレンスに載ってないんです 項目がないだけで、どこかの項目の中には解説があるのでしょうか? hhとは何でしょうか "コマンドライン hh.exe"でgoogleするとこのスレが一番にヒットするだけです hh /?では入力した履歴がずらっと出てきました hhについて御教授ください(解説したHPへの誘導でもいいです)
コンパイル済み HTML Help (*.chm)用のブラウザ = hh.exe
さらに言うと、これはコマンドライン用のコマンドでなく、普通のwin32アプリ。 例えば、エクスプローラーを起動したい場合、explorerって打つのと同じ。
>>693 >>694 ありがとうございます
さっそく"HTML Help"や"Microsoft HTML Help Executable"で
再Google再々Googleしたらたくさん出てきました
hhでdoskey /historyと同じ内容が出てくるのがまだなぞですが
ちょっと勉強してみます
その関連で考えたんですが FOR %V IN ( ) DO %Vの構文使って aaからzzまで、aaaからzzzまでのコマンドを入力するにはどう書けばいいでしょうか これが出来たら隠しコマンドを見つけやすくなると思うので聞いてみました
*.exe でHDD検索シレ
698 :
696 :2006/04/15(土) 10:29:15 ID:Cy9F2dRM
>>697 HDD検索しても隠しコマンドは出てこないと思いますが
書き方が悪かったのかな
「適当なコマンド aaa-zzz(桁数は適当、記号が入ればなお可、でも記号は無理?)」
を連続実行するFOR構文です
隠しコマンドって何?
ほれ、隠しコマンドの一部を教えてやる notepad rededit sysedit
shrpubw.exe
win95とかにあった TRUENAME コマンドみたいなやつってことか
win2000のDOSで、txtファイルを任意のexeで開かせることは可能でしょうか? 例えば、notepad.exeに関連づけされているtxtファイルをWordで開く、といった感じです。 対象のファイルを右クリック→プログラムから開くを選択→プログラムを選択する、といった風な動作を DOSから行わせたいんです。
assoc /? ftype /?
もしかして関連付けを変えないで別アプリで開くって意味? なら普通にパラメタでターゲットファイルを渡せば良いだけ。
ポチエスはさめば自由自在かも
707 :
703 :2006/04/16(日) 21:35:02 ID:yTm38H/o
ASSOC .ill=abcde FTYPE abcde="F:\Program Files\Windows NT\Accessories\wordpad.exe" %1 %* F:\Documents and Settings\my\rss.ill 上記の記述で走らせてみたところ、rss.illファイルがノートパッドに関連づけされたのですが 開くところまでは行きませんでした。 >なら普通にパラメタでターゲットファイルを渡せば良いだけ その方法をぐぐる為のキーワードでもいいので教えてもらえないでしょうか。
引数も括れよ
>>707 ごめん。説明不足だった。
その普通に渡せばってのは、関連付けしてない場合の話。
"F:\Program Files\Windows NT\Accessories\wordpad.exe" "F:\Documents and Settings\my\rss.ill"
で、関連付けした場合は、
start "F:\Documents and Settings\my\rss.ill"
710 :
703 :2006/04/17(月) 00:24:09 ID:nOiaUhca
707さんに教えていただいたとおり修正して動かしたところ、 コマンドプロンプトでillファイルを開いている?ような表示になっていましたので、 ASSOC .ill=abcde FTYPE abcde="F:\Program Files\Windows NT\Accessories\wordpad.exe" "F:\Documents and Settings\my\rss.ill" "F:\Documents and Settings\my\rss.ill" 上記のように記述して走らせたら、illファイルをwordpadで開くことができました。 考えていたとおりの動作ができました。ありがとうございました。
単に、""で括り忘れたから途中のスペースでパスが切れたんだろう。 ftypeは元に戻せ。 xxxx start xxxx start /wait xxxx
712 :
名無し~3.EXE :2006/04/18(火) 17:15:24 ID:BZjMm8ki
aho_ABC_baka.txt, ihi_ABC_ufu.jpg, ehe_ABC_oho.c, ... みたいに、ファイル名に一部を含むファイルがたくさんあって、 それをすべて ABC → DEF のように変更したいのですが、 ren *_ABC_* *_DEF_* とすると、 aho_ABD_DEF_.txt, ihi_ABC_DEF_.jpg, ehe_ABC_DEF_.c となってしまいます。なぜですか?
713 :
712 :2006/04/18(火) 17:16:17 ID:BZjMm8ki
>ファイル名に一部を含むファイルがたくさんあって ファイル名の一部に特定の文字列を含むファイルがたくさんあって …です。
多分、頭の*と尻尾の*で2回ヒットして実行されるのでは? まあ、何故って問うてもそういうもんだって納得するしかないだろ。 やりたいことは、 for文でファイル名を読み取って環境変数に格納し置換する ことで出来るだろう。 (遅延環境変数を有効にしないと出来ないかも) helpを読みながら挑戦せよ。
cacls "G:\System Volume Information" /T /E /G Administrators:F cacls G:\SYSTEM~1 /T /E /G Administrators:F コンソールで直に実行すると無問題。 BATにすると無限ループに陥る…なんで?
ぅあ!
>>715 自己解決しました。
cacls.exe "G:\System Volume Information" /T /E /G Administrators:F
cacls.batって名前にしたのか それは気付かなかった
誰でもまあ一度はやっちゃうことだな。
Alt + Enter
>>714 > まあ、何故って問うてもそういうもんだって納得するしかないだろ。
そういうものがどういうものか次回までにちゃんと調べておけ。
(;^ω^)変なやつがでてきた
調査費用出せよなあ。
キーボードからの入力の内容を持ったファイルを作る copy con test.txt なんですが test.txtに既に内容が入っていて 追加書き込みの場合はどうしたらいいでしょうか?
>>723 copy test.txt+con test.txt
とか
type con >> text.txt
とか
>>724 ありがとうございます
出来ました
copyばかり検索してました
type を使うとは気が付かなかった
edit text.txt
edlin text.txt
せめてseかviぐらいは使わせてくれ
mkdir %DATE:/=?%
>>729 これ何?何が起きるの
障害が起きるの怖いから入力できません><
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。 別にどうもならんかった。
デスクトップ上のディレクトリの名前を変更するbatファイル作りたいのですが、 以下ではうまくいきませんでした。 たぶん、すごい初歩的な質問だと思うので、 申し訳ないのですが、どなたか教えてください。 cd "C:\Documents and Settings\8105716\デスクトップ" ren 新しいフォルダ 新しいフォルダ1
move /?
>>733 レスありがとうございました。
moveでやってみましたが、うまくいきませんでした。
コマンドプロンプトでコマンド手打ちする分には、名前の変更ができるのですが、
batファイルで実行すると、うまくいきません。
別の問題なのでしょうか・・・。
>>734 どういうエラーが出るの?
最後にpauseを付けてみて。
tweakuiかなんかでtabキーをアレしたあとで… c:>cd "C:\Documents and Settings\8105716\デスクトップ" c:>ren [tab] (以下略)
>>735 pause付けてみましたところ、
cdのところで、"指定されたディレクトリが見つかりません"と出てました。
実際、ディレクトリはあるのですが、cdがうまくいっていないようです。
じゃあ、システムドライブがCじゃないのかな? C: cd "\Documents and Settings\8105716\デスクトップ" というようにしてみて。
>>737 解決しました。
cdの際、ドライブ名も変わっていたので、
/dを付ける必要があったみたいです。
pauseを付けて、エラーを確認するなどとても参考になりました。
どうもありがとうございました。
>>736 レスありがとうございました。
今回は、別の方法でうまくいってしまいましたが、感謝です。
pushを使うって手もあるよ。
pushd か?
typoだね。訂正ありがとう。
BEEP音が何回やってもならないんですがXPhomeでは鳴らないのでしょうか? パソコンの音量設定はON最大で正常です コマンドプロンプトでいくらやっても鳴らないのです
エラー時の音を無くすと称して HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Beep\Start = 4 に設定するソフトがある
net start beep
>>744 >>745 それを入力したら
『要求したサービスは既に開始されています。
NET HELPMSG 2182 と入力すると、より詳しい説明が得られます。』
が出てきて、NET HELPMSG 2182を入れたら
『要求したサービスは既に開始されています。
説明
既に動作中のサービスを開始しようとしました。
対処
動作中のサービスを一覧表示するには、次のように入力してください:
NET START 』
が出てきてNET STARTを入れたら開始しているサービス一覧が出てきて
・・・・・・・・・・・・・・・・・・・・・・・・
というわけで無理みたいですのでBEEP音は諦めます
わざわざすみませんでした
>743 もう居ないかも試練が 「XPhomeでは」と言うからには、他のOSでは鳴るの?
どうせノートだろ。 ベープ音はサウンドのミキサ入力になってると思われ。
ベープ音
フマキラー!フマキラー!
糞ワロタ
そういや、ここ数年前から蚊取り線香もベープも使ってないのに家で蚊に刺されなくなったような・・・ まさかパソコンからは本当に蚊を遠ざける効果のある「ベープ音」とやらが出ているのか?
「help 何かのコマンド」でhelpが取れますよね。で、たくさんのhelpをhelpfile.txtに収集したい時 「help dir >>helpfile.txt help copy >>helpfile.txt help ほにゃらら >>helpfile.txt 以下ずっと続く 略」 でやるのと同じ働きがあって、これをもっと見栄え良く書きたいとしたら forを使って、こんなやつが思いつきました FOR /F "usebackq delims= " %i IN (`help`) DO help %i >>helpfile.txt ↑これでもまだ「します。」とかのゴミが付いたりはします これをもうちょっとスマートに書くにはどうしたらいいでしょうか? 上のはhelpからコマンド一覧をひらって来ていますが別な方法があればそれも知りたいです
>>756 そんなもん1回やれば済むことなんだから、多少ゴミが付いたって
後でテキストエディタで整形すればええやんか。
と言いつつ多少スマートな方法↓
for /F "usebackq" %i in (`help ^| findstr /R ^^^^[A-Z]`) do help %i >> helpfile.txt
758 :
756 :2006/04/27(木) 20:55:13 ID:C375sfo8
>>757 ^^^^[A-Z]とか、また見慣れないものが出てきました
奥が深いですね
作ってくれたのを解読してさらに修行します<(_ _)>感謝
「findstr /R ^^^^[A-Z]」の部分は「findstr /R "^[A-Z]"」でも良い。 特殊文字 (<、>、|、&、^) をコマンドに渡すには前に ^ を付けるか " で囲む。 なので、`help ^| findstr /R ^^^^[A-Z]` は help | findstr /R ^^[A-Z] と解釈される。
>>760 中身みないでレスするのもアレだけど、.NET(CLI)で動作ってだけで萎える。
そんなことなら、cshでもbashでも入れた方がずっとマシだと感じる。
762 :
名無し~3.EXE :2006/04/28(金) 19:01:23 ID:XiQQCaiQ
%~t1 でタイムスタンプを取り出せますが、 秒の単位を取り出す方法ありますか
>762 以下のバッチファイルを作ると、例えば2006/04/30の15:03:54.76に実行した際に "UNOW-2006043015035476.LOG"という名前のテキストファイルがCドライブの ルートフォルダ直下に作成される。このように1/100秒の単位まで取り出せる。 ただしWindows95/98/Meでは「FOR /F」だけでなく「TIME < NUL」も使えなかったはずなので無理。 @ECHO OFF TIME < NUL | FIND "現在の時刻" > C:\USRTIME.TMP FOR /F "eol=; tokens=2,3,4,5 delims=:. " %%i IN (C:\USRTIME.TMP) DO @SET UTIME=%%i%%j%%k%%l FOR /F "eol=; tokens=1,2,3 delims=/ " %%i IN ('DATE/T') DO @SET UNOW=%%i%%j%%k%UTIME% DIR C:\ > C:\UNOW-%UNOW%.LOG DEL C:\USRTIME.TMP
コマンドの結果を抽出するので行き詰っています やりたいことは「ipconfig(ipconfig /all)した結果からIPアドを抜き出す」です ipconfigした結果は環境によってまちまちですがここでは4つあるものとして 細かい仕様は 1)一番目はいらない(ここはローカル接続のところ) 2)IPアドレスを別処理に使うから、全部を抜き出すとか一番目のヒットだけ抜き出すとかしたい PPP hogehoge: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 99.99.99.99←取り出したいのはこれ Subnet Mask . . . . . . . . . . . : 255.255.255.255 Default Gateway . . . . . . . . . : 今自力でつくったものがこれです FOR /F "usebackq skip=1 tokens=2 delims=:" %i IN (`ipconfig ^| find "IP Address"`) DO @echo %i 処理は実際には違いますがここでは仮に@echoを使ってます skip=1は先頭のローカル接続が不必要なのでつけてみました、で結果がこうなって 99.99.99.99 33.33.33.33 *.*.*.* このままだと99.99.99.99で処理→33.33.33.33で処理→*.*.*.*で処理 結局、常に*.*.*.*の処理の状態で終わってしまうので 99.99.99.99の処理でも終わりたい、33.33.33.33の処理でも終わりたいということです
何回実行したのかを示すカウンタを作成してみては? set count=0 set /a count += 1 なお、forループの中でカウントアップとその変更の参照(判定)を行うには、 遅延環境変数を使う必要がある。 setlocal ENABLEDELAYEDEXPANSION
>>766 set countはやったことなかったですが何とか無事出来ました!
的確なアドバイスありがとうございます
ちょっと相談させてください。 Tweak UIで、ファイル名補完のキーをtabにしました。 で、Bluewindとか、その他のランチャーで、C:\Windows\Sysytem32\cmd.exeを呼ぶと、 なぜか、Tweak UIでの設定が有効になっていません。 しかし、 Win+Rで、cmdを入力して起動したり、 Explorerでアドレスバーを出しておいて、%Comspec%でコマンドプロンプトを起動すると、 ちゃんと反映されています。 私としては、何か隠しのコマンドラインオプションがあるのでは?と思っているのですが ランチャーなどでTweak UIの設定が有効にならない原因は何なのでしょうか? なにか示唆を与えてくださると嬉しいです。
ランチャーは、ncwだけどちゃんと効くよ。 あと、デフォで有効なんだけど、cmd.exeのオプションにもある。 cmd /?
>>769 ありがとうございます!
そっか有効でしたか・・・
今のところだと、オプションは、/F:ONを指定していて、
それでランチャーから起動すると、tabではなく、Ctrl+FとCtrl+Dが有効なんです。
つまりデフォルトの状態ですよね。
もうちょうっと悩んでみます。どうもありがとうございました。
>>770 追記させてください。解決しちゃいました。
結果的に申しますと、Windowsを再起動したら、なんかちゃんと動きました。
何と言いますか、お騒がせしてほんとにすいませんでした・・・<(_ _)>
タスクスケージュルのタスクのプロパティにある、 設定タブの電源管理の項目中にある、 タスクの実行時にスリープを解除する にチェックを入れた状態にタスクをコマンドで 設定したいのですが、atでもschtasksでも、 該当オプションがみつかりません。 なにか他の方法があるのでしょうか?
773 :
名無し~3.EXE :2006/05/09(火) 03:40:31 ID:JDI+jrGl
age
送る(sendto)の中に登録して、 ファイラから送った複数のファイルを、フレキシブルリネーマーというリネームツールに 渡す動作をするバッチファイルを作っていただけないでしょうか? 具体的には "D:\Flexible Renamer.exe" /Rename に送ったファイルを渡して実行してくれればいいのですが...。
>>775 "D:\Flexible Renamer.exe" /Rename
のショートカットをSendToにぶち込めばいいんじゃないの?
777 :
775 :2006/05/09(火) 14:33:01 ID:a8Cg2t3v
>>776 いえ、それがたくさんのファイルを送るためにlongparameter for shortcutという
ソフトをいれたら、コマンドオプションの”/rename”というのが効かなくなって
しまったんですよ。
バッチファイルを間に入れれば、コマンドオプションを効かして実行できるそうなので。
start /min "D:\Flexible Renamer.exe" /Rename %* というバッチファイルを作れ
779 :
775 :2006/05/09(火) 16:16:58 ID:a8Cg2t3v
できません先生!
>>779 @start "" /DD:\ /B "D:\Flexible Renamer.exe" /Rename %*
781 :
775 :2006/05/10(水) 02:11:52 ID:sCmKSBHR
できました先生!ありがとう! ...でも今度はコマンドプロンプトの制限?なのかやっぱり渡せるファイル数が少なかったorz
782 :
775 :2006/05/10(水) 13:23:07 ID:oUGtz/Sn
コマンドプロンプトで扱えるバイト数の制限をなるべく多くする方法はないでしょうか?
Long Parameter for Shortcutを使えってじっちゃんが言ってた
784 :
775 :2006/05/10(水) 13:53:58 ID:oUGtz/Sn
うん、それつかってるんだけど、今度は間に挟むコマンドプロンプトでの 制限が問題だと思うんですよ。
そのアプリって、ファイルを山ほど放り込む替わりにフォルダを指定することって出来ないの?
787 :
775 :2006/05/10(水) 15:50:41 ID:oUGtz/Sn
>>785 うおおっ!で、できたー!...かに見えたかんですが、このソフトで扱える
バイト数にも制限があるようです。それとちょっと存在しないフォルダが混じる
というバグが発生するようです。とてもおしい...。
>>786 もちろんできるんですが、一部のファイルだけ即座にリネームしたい時に
できると便利なんです。
これはソフト板のリネームスレでたまーに話題になります。
今のとこ解決策は、longparameter + 練馬(別ソフト)しかないんですよ。
D&Dを受け付けるソフトなら CraftDropをスクリプトでファイルの数だけ回転させたり。
790 :
775 :2006/05/11(木) 03:02:27 ID:YZB+aWEM
>>789 キタ━━(Д゚(○=(゚∀゚)=○)Д゚)━━!!!!!
すごいっす!できました(泣
ほんと理想的な動作するようになって、完璧ですね。ほんとありがとうございます。
んで、物は相談なんですが、これ、ソフ板のリネームスレに紹介させて頂いていいでしょうか?
789さんの改造版ってことで。あちらのスレでも結構喜ぶ人がいると思います。
どうでしょうか?
とりあえず、785さん779さん、ArgHelperの作者さんありがとう...。
>>788 紹介サンクスコ。んでもへたれなんでスクリプトとかあまりよくわかんないんす。スマソ
791 :
789 :2006/05/11(木) 07:08:56 ID:McTBoQb9
>>790 いいよ。 取り扱いは元のReadMe.txtに従って下さい。
感動した
793 :
名無し~3.EXE :2006/05/11(木) 14:11:33 ID:2XWlxTM3
Unixのシェルで使用できるtestコマンドについて、 Windows版のtestコマンドを使用したいのですが、 そのようなものはどこかに置いてないでしょうか? または、何かで代用できないでしょうか? 知っていましたら、お教え願います。
とんでもない技術者がこのスレにはいるね。すばらしい。
どんなスゴイものかと思って2のソース見たら、、、、、_| ̄|○
>>*プログラムに渡す引数のバッファをVirtualAllocで確保するように変更 これのこと?
漏れもどうかと思ったが、何もせず批判するのはカッコワルイからやめた。
798 :
名無し~3.EXE :2006/05/13(土) 01:16:00 ID:wDNXdCY4
突然すいませんm(__)m教えてほしいのですがパソコンの電源を入れたらウィンドウズの画面でなく英語が並んで出てきて操作ができません。たすけて
後出しじゃんけん見苦しい
まー、
>>798 みたいに他に何も情報がない状態で助言できる事ってのは
今も昔も「フロッピー差し込んだままになってない?」以外にないよね。
>>798 うぇんどおずをいんすとーるしてないのとちゃうか?
ほしゅ
バッチファイルで、バッチコマンドのみで、外部のテキストファイル内の文字列を パラメータに渡すことって可能ですか?
>>805 eeeee!
これから出勤なんで、帰ってきてからゆっくり調べてみます。どうもです!!
やりたいことは、外部テキストにパスだけを書き出しておき、
それを読み込んで、そのパスのファイルを移動したり、削除したりしたいのです。
そのパスがPC毎に固定されていないので、毎回調べて外部ファイルに書き出し、
それを別のバッチファイルを呼び出すときのパラメータにしたくて、
質問してしまいました。
自分では、「どうも不可能だな」という結論で、念のためカキコしたのですが、
使ったこともなかったWSHに手を出し始めたところでした・・・。
> やりたいことは、外部テキストにパスだけを書き出しておき、 > それを読み込んで、そのパスのファイルを移動したり、削除したりしたいのです。 > そのパスがPC毎に固定されていないので、毎回調べて外部ファイルに書き出し、 > それを別のバッチファイルを呼び出すときのパラメータにしたくて、 何の問題もなくforで可能だな。この機会にwsh覚えちゃうのもいいし、まぁガンバレ。
このスレでの質問のうち、半分は、forで解決する。
>808 その中の半分以上は、Windows95/98/MeではWSHを使わないと解決しない気がする。
cmd が bash などよりも優れている点ってありますか
806デス できました!!ありがとうございました!!! 私の調べ不足が原因とはいえ、 よくわかっている方から示唆をもらえるのは 本当に助かりますし、ありがたいものだとしみじみ思いました。 それから、これを機会にWSHも勉強してみることにしました。 できた喜びをAAで表しておきます。どうもどうも。 (゜∀゜) … (ヽ/) <●> ● (゜∀゜)ノ ハッ !! (ヽ ) <●> ● ((゜∀゜) ハッ !! ( /) <●> ● ● ((゜∀゜)ノ ハッ !! ( ) <ω>
813 :
名無し~3.EXE :2006/05/29(月) 20:40:05 ID:XWssDCMh
起動してから5分おき、1時間おきにプログラムを実行してくれて、 最後のプログラム実行したら終わってくれるような batファイルってどう書けばいいんですか? AT 10:00 プログラム AT 10:05 プログラム AT 10:10 プログラム みたいに時間指定しないで、起動した時から5分おきとか1時間おきに実行したいです。
Sleep.exeでも使うか、適当な待機処理噛ませればいいだけじゃん。 Sleep.exeはググれば拾えるし、batでの待機処理のサンプルも腐るほど転がってるので あとは自分でがんばろう。
815 :
815 :2006/05/29(月) 21:22:52 ID:xJT5aRnI
>>813 外部コマンドを探せばスマートに解決するが、ここに質問したってことは
標準コマンドの範囲で解決したいってことだろうから、WSHも使わずにBATのみで
実現する方法をば。
以下をコマンドプロンプトで実行てみて、後はどう応用すれば実現できるか考えてくれ。
(WindowsXPのコマンドプロンプトで確認)
for /f "tokens=1-5 delims=/ " %I in ('net statistics server ^| find "開始日時"') do echo YY=%J MM=%K DD=%L TIME=%M
817 :
813 :2006/05/29(月) 21:50:30 ID:XWssDCMh
みなさん、レスありがとうございます。
>>814 待機処理ですね、分かりました、ググって見ます。
>>816 for /f "tokens=1-5 delims=/ " %I in ('net statistics server ^| find "開始日時"') do echo YY=%J MM=%K DD=%L TIME=%M
これですか、なんか難しそうですけど、試してみます。
818 :
813 :2006/05/29(月) 21:52:26 ID:XWssDCMh
あっ、
>>815 も俺へのレスでした。
ありがとうございます。
Cronですか〜、ツール使わずに出来れば標準コマンドだけで済ませたいです。
>>817 もし、WindowsXPでだけ動作すればよいのなら
for /f "tokens=1-9 delims= 日時間分秒、" %I in ('systeminfo ^| find "システム起動時刻"') do echo %K %L %M
訂正 for /f "tokens=1-9 delims=: 日時間分秒、" %I in ('systeminfo ^| find "システム起動時刻"') do echo %K %L %M %N
さらに訂正(半角、全角のスペースに注意) for /f "tokens=1-9 delims=: 日時間分秒、 " %I in ('systeminfo ^| find "システム起動時刻"') do echo %K %L %M %N
ping だろ
823 :
813 :2006/05/29(月) 22:51:11 ID:XWssDCMh
ググった結果このやり方しか分かりません。。・゚・(ノД`)・゚・
2つbatファイルを使って、
・Perlを実行.bat
Perl プログラム〜
call WAIT.BAT 300(←300秒WAIT)
Perl プログラム〜
call WAIT.BAT 300(←300秒WAIT)
Perl プログラム〜
・WAIT.bat
@echo off
echo 約%1 秒間 WAIT します。
ping localhost -n 2 > nul
ping localhost -n %1 > nul
echo 再開します。
>>816 現在時刻を取ってくるっぽいですけど、応用の仕方が全然分かりません。・゚・(ノД`)・゚
>>821 for /f "tokens=1-9 delims=: 日時間分秒、 " %I in ('systeminfo ^| find "システム起動時刻"') do echo %K %L %M %N
これを具体的にbatファイルにどのように書けばいいんでしょうか?
ググってここを読んだのですか、いまいちよく分かりませんでした。。・゚・(ノД`)・゚・
http://www.atmarkit.co.jp/fwin2k/operation/command008/command02.html
>>823 816の奴は、起動した時刻を取得する。
これから現在時刻をさらに取得して、その差を計算する。
821は、既に相対時刻が取得できるので、あとは単純に判定するだけ。
batにどう書けばよいかって、何がわからんの?
825 :
813 :2006/05/29(月) 23:13:52 ID:XWssDCMh
どこに何分後に実行するの何分後を書けばいいんでしょうか? 当方、DOSコマンドほとんど知らないのでまったく分かりません。・゚・(ノД`) Perlを実行.batの中身を Perl プログラム〜 for /f "tokens=1-9 delims=: 日時間分秒、 " %I in ('systeminfo ^| find "システム起動時刻"') do echo %K %L %M %N Perl プログラム〜 for /f "tokens=1-9 delims=: 日時間分秒、 " %I in ('systeminfo ^| find "システム起動時刻"') do echo %K %L %M %N Perl プログラム〜 とすればいいんでしょうか?
826 :
813 :2006/05/29(月) 23:14:37 ID:XWssDCMh
× どこに何分後に実行するの何分後を書けばいいんでしょうか? ○ どこに何分後に実行するの何分後をどこに書けばいいんでしょうか?
大サービスだ これ以上は、ヘルプで調べろ。 help if /? for /? set /? -----< sample.bat >------------------------------------------- setlocal EnableDelayedExpansion for /f "tokens=1-9 delims=: 日時間分秒、 " %%I in ('systeminfo ^| find "システム起動時刻"') do ( set /a t = %%K * 86400 + %%L * 3600 + %%M * 60 + %%N if !t! geq 3600 (echo 1時間以上経っています) else (echo 1時間未満です) ) endlocal ------------------------------------------------
828 :
813 :2006/05/29(月) 23:25:37 ID:XWssDCMh
>>827 ありがとうございます!
とりあえず、がんばって設定してみます。
出来次第、また報告に来ます。m(_ _)m
別に遅延環境変数を使う必要も無かったね。 -----< sample.bat >------------------------------------------- @echo off for /f "tokens=1-9 delims=: 日時間分秒、 " %%I in ('systeminfo ^| find "システム起動時刻"') do ( set /a t = %%K * 86400 + %%L * 3600 + %%M * 60 + %%N ) echo %t% if %t% geq 3600 (echo 1時間以上経っています) else (echo 1時間未満です) ------------------------------------------------
830 :
813 :2006/05/30(火) 01:02:18 ID:wRRXYyJu
分からない_| ̄|○ 'systeminfo' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 とか出るんですが。
>>830 systeminfoはWinXPのコマンド。もしかするとXPでもHomeには無いのかも。
それにね、何も考えずにあれこれしないで、ちっとは頭を使ってくれ。
君のやりたいことは起動xx分後に〜したいってんだろ?
君に必要なのは、起動時刻のほうであって、起動後何分経ってるのかじゃないだろ?
解決方法
1) 起動時刻+xx分を求める。
(ここで頭を使え。例えば1:50に2:30を足すと、3:80じゃなくて4:20だから。同じく24時間で日付も変わる)
2) それを使ってATコマンドを呼び出す
832 :
813 :2006/05/30(火) 01:48:43 ID:wRRXYyJu
>>831 何度もレスありがとうございます。
いや、Windowsの起動は関係なしに、
手動でbatファイル起動で、その中身は、
Perl プログラム1を実行、その後(5分後、1時間後など)にPerlプログラム2を実行、
さらに5分後、1時間後などにPerlプログラム3を実行とやりたいんです。
>>832 なら、起動時間を現在時刻と読み替えてくれ。
echo %date%
echo %time%
これを同様にforコマンドで各々の数値に分解する。
補足 forコマンドじゃなくて、setコマンドで各要素に分解できる
835 :
813 :2006/05/30(火) 15:15:48 ID:wRRXYyJu
>>834 出来ました!
ありがとうございました!
Perlが使えるのならPerlスクリプトの最後に sleep 5*60; とか追加すればいいんじゃないの? という気もするが まあ、出来たのならいいか。
スクリプトの実行時間
まあ、本人がsleepもpingを使う方法もちゃんと知ってるわけだし あえてそれでもそれらの方法を使いたくないわけがあったんだろう。
mdってフォルダ名ごとにスペース挟めば複数一気に作れるのね… forやらifやらで試行錯誤してた自分て一体orz
840 :
名無し~3.EXE :2006/06/02(金) 00:58:28 ID:RBTaNmRH
ちょっと質問です あるディレクトリにいたとき、相対パスで、サブディレクトリのファイルを列挙するには バッチファイルに、どのように書いたら良いでしょうか? 例えば root\sub1\ \sub11 filea.txt fileb.txt \sub12 filec.txt とあったときに、root\sub1ディレクトリで、バッチファイルを実行すると sub11\filea.txt sub11\fileb.txt sub12\filec.txt と列挙したいのです。 forで列挙して、カレントディレクトリを""で置換、とか色々考えたんですが どうしてもできませんでた(´・ω・`)
dir /b /s
@echo off set current=%cd% if %current:~-1% neq \ (set current=%current%\) setlocal EnableDelayedExpansion for /f "delims=" %%I in ('dir /b /s') do ( set d=%%I echo !d:%current%=! ) endlocal
aaaa000a〜d aabb000a〜d abcd001〜999 のような並び順で連番のファイルが一つのフォルダに一緒に入っている場合 一気に001〜のように 同じ並び順でリネーム出来ないでしょうか? 拡張子は同じです
>>843 @echo off
setlocal enableextensions enabledelayedexpansion
set n=1
call :sub aaaa000?.jpg
call :sub aabb000?.jpg
call :sub abcd*.jpg
goto :EOF
:sub
for /F "usebackq delims=" %%i in (`dir /B /ON %1`) do (
set fname=000!n!
set fname=!fname:~-3!%%~xi
echo ren %%i !fname!
set /A n+=1
)
goto :EOF
ハンドブック買って勉強してたんだけど、全然詳しくなかったんだなぁ… ここ来て初めてsetlocalとかsetコマンドの%PATH:~10,5%みたいな存在知ったわ ヘルプファイルって見てみるもんだねぇ
コマンドラインヘルプが一番詳しくてわかり易いって反則だよなあ まあXPでWindowsヘルプも追いついてきたけど。
起動時のカレントディレクトリって変更する場合、 ショートカットを作成→プロパティの「作業フォルダ」を変更するしかないんでしょうか? あと、会社のPCだと、 フォルダを開いている状態から、Ctrl+R→cmdでコマンドプロンプトを呼び出すと、 開いているフォルダがカレントディレクトリになって起動するんですが、 これって何を設定すれば良いんでしょうか?
フォルダで右クリックメニューに、コマンドプロンプトを追加すれば? 昔からある、CmdHere(Powertoysの中のコンポ)とか窓の手とかで
849 :
847 :2006/06/05(月) 01:22:31 ID:wD0ZI6P2
>>848 右クリックメニューに入れるって方法があったんですね。
早速やってみます。
ありがとうございました。
開いてるフォルダから起動できるファイラもあるよ
CmdHereでも出来るし
Powertoysの中でも、CmdHereとSendtoX(Clipbroard as Nameだけ)は昔から使ってるよ。
そういや、Tweak UI もPowertoysの一つだったね。
858 :
名無し~3.EXE :2006/06/06(火) 22:57:36 ID:O2oDxCZQ
ftpをさせるバッチファイル作成しウィンドウズのタスクスケジューラを使用し
定期的にFTPさせようとしています。
コマンドプロンプトを起動させ、該当のバッチファイルを実行すると正常に動くのですが
バッチファイルをダブルクリックすると「プロセスが使用中です」というメッセージがでバッチが正常に動きません
ご教授してくれたら幸いです。(対象OS:2003サーバ)
またログへの出力が不具合の原因かと思いログへの出力をやめたところ
バッチが終了せずctrl + C で強制終了しないといけなくなりました。
***バッチの内容****
ftp -s:FTPの内容の書いたファイル(フルパス) >> ftp.log
exit
参考ページとして
http://forum.nifty.com/fpcu/top/dostree.htm をみました
ftp.bat
コマンド名と同じ名前のBATファイルを作ると混乱の元
ハ_ハ ('(゚∀゚∩ .exeまで付けるよ! ヽ 〈 ヽヽ_)
ftp.exe.batか。
863 :
名無し~3.EXE :2006/06/08(木) 22:45:43 ID:15BZ8Cdy
>>847 旗+R (ファイル名を指定して実行) で 「cmd」と入力 (普段は 旗+R Enter でできてしまう)。
窓が開いたら、"cd /d " そしてエクスプローラーからディレクトリをD&D
864 :
名無し~3.EXE :2006/06/08(木) 23:19:04 ID:bNMGOa1p
%1にファイルのパスを入れてくるバッチで そのファイルのファイル名を抜かした ディレクトリパスまでを取得するにはどうすればいいのでしょうか?
%~dp1 しか無いな
866 :
864 :2006/06/08(木) 23:27:26 ID:bNMGOa1p
867 :
名無し~3.EXE :2006/06/09(金) 00:39:17 ID:TppoDmC1
環境変数にテキストファイルの内容を代入する方法ってないでしょうか? set envdat=<envdat.txt のような感覚です
>>867 そこでforですよ。
このスレの質問のうち半分はforで解決する。
質問です バッチファイルから*.infファイルをインストールする方法を教えてください。 直接指定するとメモ帳で開いてしまいます お願いします
レジストリのinffileの欄でinstall - commandには %SystemRoot%\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %1 と書かれていた。 参考になるかな?
test.inf 右クリック 開けゴマちゃん
>>870 わざわざ調べて頂きありがとうございます。
具体的にバッチファイルにどのように記述するのでしょうか?
度々すいません。お願いします。
そのままコピペで良いんでないかい?
>>873 そんなことを言ったら%1までコピペしかねないぞ。
%1までコピペでいいんじゃねー? パラメタにinfファイル指定したいんだろ?
876 :
869 :2006/06/11(日) 15:26:51 ID:j3/Q2u2E
>>870-875 みなさん、ありがとうございました。
希望通りのバッチファイルを作る事が出来ました。
OS再インストール後にいくつかのドライバ等をサイレントで入れるバッチファイルを作りたかったのです。
%SystemRoot%\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %DIRECTORY_PATH%\test.inf
重箱の隅 C:\>netsh firewall set notifications /? set notifications [ [ mode = ] ENABLE|DISABLE [ profile = ] CURRENT|DOMAIN|STANDARD|ALL ] ファイアウォールの通知の構成を設定します。 パラメータ: mode - 通知モードです。 ENABLE - ファイアウォールからのポップアップの通知を許可します。 DISABLE - ファイアウォールからのポップアップの通知を許可しませn。 ←←←←
質問させてください。 あるフォルダの中の、任意のサブフォルダを削除することってできるのでしょうか? rmdirだと、ワイルドカードが効かないみたいなのですが・・・。 親フォルダは消したり、moveとかrenとかで移動したり名前の変更したりせずそのままにしておいて、 中のフォルダだけ消したいのですが。 何か示唆がありましたらお願いします!
879 :
名無し~3.EXE :2006/06/16(金) 10:30:27 ID:eh8JUzl6
すみません。ちょっと、教えて下さい。コマンドプロンプトを 使って、複数のファイルの文字コードを全部UTF-8に変えたいの ですが、どうすれば良いのでしょうか。 UNIXだと、「nkf -w ./*」 とすれば良いのですが、windowsで すので、コマンドプロンプトでやる必要があるのです。 どなたか教えて下さい。よろしくお願い致します。
コマンドプロンプトでやる必要があるならnkfのWin32版でも拾ってきなさいと
replaceについて REPLACE [ドライブ1:][パス1]ファイル名(複数可) [ドライブ2:][パス2] /A /P /R /S /W /U と大抵の解説サイトには有るんですが replaceで*.txtとかじゃなく同じ場所に有る特定のテキストファイル複数個を指定する場合 ファイル名のところにどう繋げれば良いんでしょうか? A.txt+B.txt+C.txt →ダメ A+B+C.txt → ダメ A,B,C.txt →ダメ 3行に分けるしかないんでしょうか?
セミコロンは?
884 :
名無し~3.EXE :2006/06/16(金) 18:53:11 ID:kf/HmHil
885 :
名無し~3.EXE :2006/06/17(土) 00:00:01 ID:TKuNTTBG
WindowsXPでCUIのアプリを作成しているのですが、フリーのテストツールってありませんか? 引数、標準入力を指定し、戻り値、標準出力、標準エラーを期待値に設定できるようなものです。
886 :
名無し~3.EXE :2006/06/17(土) 01:41:22 ID:NOBVjDNY
いまいるディレクトリ以下にあるすべてのファイルを対象として 指定された日付より後に更新されたファイルのフルパスとファイル名 を表示するにはどうしたらいいですか?
@echo off set targetdate=2006/06/17 03:00 for /f "delims=" %%I in ('dir /a-d /b /s /on') do ( if "%%~tI" geq "%targetdate%" ( echo path="%%~dpI" --- file="%%~nxI" ) )
888 :
886 :2006/06/17(土) 08:58:28 ID:NOBVjDNY
forfiles /D 2006/6/17 /c "cmd /c echo @path"
ファイル内の特定文字を置換するものを作ろうとしています。 具体的には、「"」ありのCSVファイルから「"」のみを削除したく。 test.batだと、outputのように最初と最後の「"」しか削除されません。 どうすればいいでしょうか? 【data.csv】 "1","2","3","4","5","6","7","8","9" "2","2","3","4","5","6","7","8","9" "3","3","3","4","5","6","7","8","9" 【test.bat】 for /f "tokens=1,1*" %%I in (data.csv) do @echo %%~I 【output】 1","2","3","4","5","6","7","8","9 2","2","3","4","5","6","7","8","9 3","3","3","4","5","6","7","8","9
コマンドライン上でオブジェクトのプロパティを開く方法ってないカナ? エクスプローラー上で Alt+Enter の動作をコマンドラインから実現したいんですが…
>>890 @echo off
REM sed -e "s/\"//g" data.csv
setlocal EnableDelayedExpansion
for /F "delims=" %%i in (data.csv) do (
set s=%%i
echo !s:"=!
)
894 :
890 :2006/06/19(月) 00:26:29 ID:yDJrrt+I
895 :
名無し~3.EXE :2006/06/19(月) 14:20:54 ID:F1VupKRK
dir > dir_現在の日付.txt といったようにファイル名に現在の日付や時刻を つけて保存したいのですがどうしたらいいのでしょうか? ご教授願います
%date% %time%
なんかこのスレではほとんど話題になってないけど NYAOSユーザーってどのくらいいる? かなりLinuxっぽくて便利な代物だと思うんだけど。
ノシ Linuxっぽいかは知らないけどexeひとつだし、便利だから使ってますよ。
899 :
名無し~3.EXE :2006/06/21(水) 10:02:08 ID:M3ZXueJT
WindowsXPのdos(コマンドプロンプト)で、Alt+半角キーを押しても モードが漢字入力に変わりません。インストール直後は動いていましが 最近、dosでMySQLで日本語のデータを入力しようとして気がつきました。 ご教授よろしくお願いします。
どこでもかしこでも、 ご教授、ご教授って 釣りか?2ch用語か? 教えてくださいとかご教示くさだいとかちゃんとした言葉を言えないのか?
ご教示くさだい の検索結果のうち 日本語のページ 約 11 件 ご教授よろしくお願いします の検索結果のうち 日本語のページ 約 46,800 件
>>901 誤用の方が多い典型例。
「ご教示」で検索すればわかるよ。
>>900-903 揚げ足ばっか取ってイジメかよ。まったく・・・
>>899 >インストール直後は動いていましが
「いましが」ってなんですか?
べっ、別にアンタの為に突っ込んでるわけじゃないんだからね!
>>903 ('A`)
>>906 そのページを本当に上から下まで読んだの?
経験上、意味を深く考えもせずに普段使い慣れない言葉を使ってみる、
答えをもらったとたんに豹変する質問者に多いパターンだと思うよ。
正に中身は無礼だけど外見だけ体裁を整えようとしてちゃんと出来て
いない、慇懃無礼という言葉がぴったりの。
なんだかオヤジ臭くなってるな、俺。
言語学板行けあほども
>907 読んだ上で書いたよ。だから「可能性もなくはない」って。 初めから「ご教授願います」と書かれた書き込み全てを 誤用と決めつけてかかるの? 2chでよく見かける「的を得る」とか「独壇場」とかとはわけが違う。
2000からXPに乗換えるのを嫌がっていたが、 コマンドプロンプトが、バグが取れたり、さらに便利になっているので腹を括った。
913 :
名無し~3.EXE :2006/06/23(金) 20:34:05 ID:jUsKI7xZ
vistaはイベントビューアの詳細の内容をスクロール させなくても確認できやすくなるようだよ。
慣れていないせいなのかVistaのイベントビューアは使いにくい
915 :
名無し~3.EXE :2006/06/24(土) 20:11:27 ID:veVB/w7M
イベントビューアとコマンドプロンプトの使いにくさは、どうにかならんかな。 logparser使ったり、telnetサーバ立ち上げると、多少、改善されるかな。 sshサーバくらい入ってて欲しいが。
telnetがコマンドプロンプトより使いやすい?
わけ わか らん
会社の研修で、担当者が余談として、 windows updateに重要な更新があるかどうかを確認できるコマンド (windows XPのマシンで見せてくれました)を教えてくれたのですが、 忘れてしまいました。 どなたかご存じの方いらっしゃいませんか?もし分かれば教えて欲しいのですが・・
919 :
名無し~3.EXE :2006/06/24(土) 22:40:10 ID:veVB/w7M
>>916 >telnetがコマンドプロンプトより使いやすい?
telnet接続に使うターミナルソフト選べば、コマンドの実行結果を
コピーしたり、コマンドを貼付けたりだけでも、コマンドプロンプト
そのままを使うより、かなり操作しやすくなるという意味だけど。
>>918 Microsoft Baseline Security Analyzer 2.0
QuickEdit = 0のまま、で使いにくいと思ってるんじゃ
入力補完や入力履歴も知らないんだよきっと。
batファイル関連の入門サイトみたいな所のURLをテンプレに入れて欲しい・・・
>>920 いえ・・・・コマンドラインのコマンドで確認できる奴を探しているのです
同じ会社の人に聞いたのなら、明日その人に聞き直せばええやん。
WindowsUpdate.logから適当に抜き出してるだけだったりして
>>925 MBSAにはGUIとCUIの両方入ってる。
>>922 あくまで簡易なので、結構使いにくくない?
ついCtrl+CとかCtrl+Vとか押しちゃうし。
Bashいれれ
>>924 どっかいいとこある?
俺は見つけられずに本買ってしまったよ。
2年くらい前だけど。
>>931 どんな本買った?
ちゃんとまじめに知りたい場合は本買うようにしてるんだけど
適当な解説しかしてないのしか見たことない…
あんまり詳しく探してもないけど。
「Windows XP/2000 コマンドプロンプト ポケットリファレンス」/ 技術評論社 / \1,980 漏れが持ってるヤツ。 主要なコマンドについて、解説と用例が載ってて入門用には良いんじゃないかと思う。 確か2chで紹介されていて自分も知ったような気がするけど定かではない。
>>933 あー俺も買った、その本
いい本だったから 技術評論社信者になってVBSポケットリファレンス買ったら
こっちはクソだった・・・・
コンピュータ関連書籍は著者を見ないと。
937 :
934 :2006/06/27(火) 21:37:31 ID:sODDzKPh
そうだね・・・盲信してたよ でもさ、同じ出版社なら編集者がこれじゃぁNGだな、とか思わないのかな? おもわんかw
編集者も一人じゃないだろうし、筆者もしがらみで切れない人もいるだろうし。 そもそも編集者がPCに詳しいとは限らん。 文章の組み立て/構成だけチェックしてあとは校正しかしない奴もいるのかも。
そうだよね。 んでも買って損したとは思っていないよ。期待が大きすぎただけ 本を買うのは、いいきっかけ作りになると思う
閉じるボタンがついてないウィンドウやたくさん出てくるウィンドウを 一発で全部消せるコマンドってないですか?
コマンドプロンプトの/?や/hを日本語化するにはどうすればいいですか?
943 :
941 :2006/07/01(土) 22:33:11 ID:9ZiVxMoV
>>942 一応日本語版WinXPでプロンプト事態は日本語モードなんよ
でも何故か/?だけが英文表示に(cmd,exe自体も日本語なのに・・・)
OEM版だからとかって関係あるんだろうか・・・諦めるかな
具体的に何のコマンドで?
まさか ipconfig とか ping とかの事じゃないでしょうね > 942
>>943 コマンドプロンプトウィンドウを開くときに使ってるショートカットのプロパティで
コードページが日本語以外になってるとかは
たぶんそれ /?の結果だけが英文表示なるのはそのケースしかないでしょ
コードページが違うと全部変わるよ。\がバックスラッシュになるとかが分かりやすい 俺は多分そうじゃないと思う。 chcp 437 とかコマンドで変えないと普通変化しないと思うし。
949 :
名無し~3.EXE :2006/07/03(月) 16:34:34 ID:6cPjDFiM
ネットワークコンピュータのファイルを消したいのですが erase \\host\パス名\aaaaa.txt とやっても消えないんですけど、何か間違っていますか?
>>949 表示されたエラーメッセージを見てがんばれ
XPのhomeとproで使えるコマンドの種類が若干違うみたいなんだけど それらをリストしているサイトとかはありますかね?
もれはMinGW+msysでWinのコマンドほとんど知らない
それはそれでアレだな。
>>951 内部コマンドに違いは無い。
外部コマンドというか、標準で入ってるコマンドラインツールの種類に違いがある。
その辺のことは普通にググれば出てくる。
バッチファイルにフォルダをドラック&ドロップしてフォルダパスを取得し、 プログラムにそのフォルダパスを渡そうと思ったのですが、 この時に窓が起動したパスはバッチファイルがある場所じゃないんですよね。 cdで移動させないとダメなのですが、そのままフルパスを書き込んでしまうと バッチファイルとプログラムのあるフォルダを移動させた時に書き換えなければなりません。 ドラック&ドロップした時にバッチファイルのあるパスを取得する方法はないのでしょうか?
>>955 プログラムにフォルダパスを渡すのが目的なら、プログラムの実行ファイルかショートカットに
フォルダをD&Dすればいいじゃん。それに何故「D&Dしたフォルダのパスを渡す」のに
バッチファイルのパスが関係してくるのかわからん。
隠さないで、ちゃんと何というプログラムを使ってどういうことがしたいのか書けよ。
隠したいなら、その質問自体心の中に隠しておけ。
つーかパスの取得方法知ってるんだから、%0〜%9(0=バッチ自身、1〜9=実行時引数)とか、
%~f1だの%~dp0だのっていう修飾子は解ってるんだよね?
>>956 済みません、別に隠しておいた訳じゃないんです。
知り合いに作って貰ったjavaのプログラムで、下みたいにして使うんです。
java -classpath ConvLib.jar MakeArchive "フォルダフルパス"
"フォルダフルパス"の所を%1にしてやってみたら
>>955 で書いたみたくなったのです。
%1 → "%~f1" でどうだ? ダメなら一度リダイレクトでそのコマンド自体を出力して確認してみろよ。 というかこれは最初にやるべきことなんだがな。
>>958 どうやら意図が伝わっていないみたいです…。
D&Dでcmdが起動するとタブルクリックの時とは違いカレントフォルダが
バッチファイルのある場所とは違う場所になっているんですよね。
ですのでバッチの中身は下の様にして"バッチファイルのあるフォルダのパス"を
D&Dでどうにかして取得する方法はないかという訳です。
cd "バッチファイルのあるフォルダのパス"
java -classpath ConvLib.jar MakeArchive %1
>>959 >>956 に書いたじゃん>>%~dp0
%0 バッチファイルのパス c:\hoge\test.bat
%~d0 ドライブ <c:>
%~p0 パス <\hoge\>
%~n0 ファイル名 <test>
%~x0 拡張子 <.bat>
なのでdpならドライブとパスでc:\hoge\test.batに対してc:\hoge\が取得できる。
おぉ、dpとかの機能を正しく理解していませんでした…。 お手間を取らせてしまい申し訳ありませんでした。 そしてご丁寧に教えて下さり、ありがとうございました。
962 :
名無し~3.EXE :2006/07/08(土) 18:16:48 ID:IP7ZlJVS
質問です。 batファイルを作って、 複数のファイルをドラッグして 渡されたファイル1つ毎に同じ処理をしたいと思います。 forを使って出来るかなと思ってヘルプを読んだりしましたがわかりません。 for %%i (引数で渡されたファイル毎に) do ( 他のコマンドA %%i 他のコマンドB %%i ) どなたかご存知でしたら教えてください。
shift
for %%i in (%*) do ちなみにshiftとgotoを使う手もある。
965 :
962 :2006/07/08(土) 19:22:03 ID:IP7ZlJVS
966 :
名無し~3.EXE :2006/07/09(日) 03:20:48 ID:k9je+Jen
自作プログラム使ってテキストに書き込むってのやりたいんですけど、Dos窓から 自作プログラム -k[ここにaaa.txtに送り込みたい内容] aaa.txt で実行なんですが複数行にするとそのプログラムが受け付けないです。 aaa.txtに送り込みたい内容を複数行にしたいです。 こういうときってどうすればいいんでしょうか? なんか&#0173;みたいなの使って改行を表す方法ないですか?
こっちに引っ越してきても同じこと。 ファイルかパイプ渡ししろ
自作プログラム側である文字列を改行コードとして認識して書き込むときに改行コードに変換すればいいじゃん。 例えば"aaa.txtに送り込みたい内容"の文字列中の"_CRLF_"は改行コードに変換してaaa.txtに書き込めばいい。 あいうえお かきくけこ と書き込みたい場合は aaa.exe -k[あいうえお_CRLF_かきくけこ] aaa.txt みたいな感じで。
そんな変換するくらいなら、ファイル入力(別に標準入力でも同じだけど)を作った方が楽なんじゃない?
確かに単語(複数バイト長の)変換は結構大変だね
dir /b >a.txt でファイルリスト作るときに、そのファイル内の行頭・行末に'をつけたいときはどうすればよい? a.txtの中を 'filename1' 'filename2' ... みたいにしたいんだけど。
>>971 dirコマンドではそういう形式での出力は出来ないから、
後からa.txtを読み込んで書き換えるとか、
そういう形式で出力できるコンソールアプリを作るとか、
for使ってお好みの出力を行うとか、まあいろいろあるわな。
>>971 for /f "usebackq delims=" %i in (`dir /b`) do echo '%i' >> a.txt
ごめん、こっちのがいいのか for /f "usebackq delims=" %i in (`dir /b`) do @echo '%i' >> a.txt
次スレの準備しましょうか?
>>974 なんでこの場合にusebackq使うの?何か(隠れた)メリットあるの?
*
*
*
つぶすか
というわけで、 usebackq の話は次スレで。
*
ところで、MS-DOS対応のプリンタって少なくなったよね。
今や、生DOSにとっては受難の時代だよね。
LIPS III とか ESC/P 対応のプリンタも少なくなり、消え去るのみか。
じっさいここ数年、BIOS書き換え以外で使ったことないからなぁ・・・
プリンタに限らず、DOSの需要もなくなってはいないのだが。 (こういう話は他のDOS専用スレでするべきなんだがな)
>>989 たしかにね。自分もまともにDOSつかったのってBIOS書き換えの時かも。
数年前、ISAバスの設定ユーティリティがDOSからしか立ち上がらんので立ち上げたこともあったが。
埋め
Missing Operating System
埋め
Invalid system disk. Replace the Disk and then press any key.
埋め
埋めますよ?
NTLDR is missing Press Ctrl+Alt+Del to restart
埋め
How many files(0-15)?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。