【.cmd】 バッチファイルスクリプト %5 【.bat】
1 :
デフォルトの名無しさん :
2009/05/14(木) 11:29:31
start /?
for /?
set /?
.bat を実行すると 「コマンド.exe > テキスト.txt」 と書いてある部分が、 「コマンド.exe 1> テキスト.txt」 と "1" が入るのだが何故なんだぜ?
>7 標準出力が1で標準エラー出力が2 数字を省略すると1、つまり標準出力とみなされる
forfilesをXPに移植してくれ
11 :
デフォルトの名無しさん :2009/05/18(月) 22:17:19
以下のようなテキストファイルの判定を行いたいのですが、 STARTとENDという文字列があり、 STARTの方が、ファイルの先にあり、ENDが後にあると 判定するにはどうすれば良いでしょうか。 test.txt----------------------------------- ランダムな文字列ランダムな文字列ランダムな文字列 ランダムな文字列ランダムな文字列 START ランダムな文字列ランダムな文字列ランダムな文字列 ランダムな文字列ランダムな文字列ランダムな文字列 ランダムな文字列ランダムな文字列 END ランダムな文字列ランダムな文字列ランダムな文字列 -------------------------------------------
>>11 のようなのはのってawkがあると楽だよね
gawk "/START/{s=1}/END/{exit s}" textfile.txt
if errorlevel 1 echo OK
find /n "START" file >temp set /p start=<temp set /a start=%start:~1% find /n "STOP" file >temp set /p stop=<temp set /a stop=%stop:~1% if %start% lss %stop% echo だよ
2003にはついてるらしいからXPでもうごくだろ
7rcのは動かないな
シンタクス間違えてない?
test.xmlファイル内にある「XXX」という文字列を検索して 「XXX」が含まれる行以下4行をコメントアウトしたい場合、どのように組めばいいんだろう。 test.xml <〜〜〜>(id="〜〜〜-XXX-〜〜") <name>〜〜〜</name> <file = "〜〜〜〜〜"/> </〜〜〜> を <!--<〜〜〜>(id="〜〜〜-XXX-〜〜") <name>〜〜〜</name> <file = "〜〜〜〜〜"/> </〜〜〜>--> といった具合にコメントアウトしたい。
バッチ向きではありません
xmlは文字コードがUTFだったりするし わざわざバッチでやるやつがいるか?
>>19-20 うぅむ。難しいんですかね。
文字コードはShift_JISのはずですが。
xmlを公開、配布していて、そのxmlをユーザー側でバージョンアップさせるために
バッチファイルを使って中身を書き換えられれば良いかと思ったのですが。。。
自分で使うなら好きにすればいい。 人に配布するならまともな方法を選ぶべき
()<>"!はバッチで扱いにくいからやめとけ
WindowsのPATH区切り文字ってセミコロンだけど ファイル名に使用できちゃうって事を誰も咎めないの?
パスデリミタはセミコロンじゃないお バックスラッシュだお
””
>>25 PATH環境変数のことだべ
>>26 PATH="c:\hoge;hoge";c:windows みたいに書けと言っとります
レジストリからキーの値を取得して変数にセットすることは可能ですか? HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\TimeZoneKeyName のキーから読み込んだ値を任意の変数にセットしたいのですが REG QUERYを使うまでは分かったものの、そこから先へ進めず手詰まりの状態です
もちろん可能だが、バッチでやる意味がない
for/?
━━ prep. …の代りに, …を代表して; …に向けて; …と引き換えに; …にとって; 〔米〕 …の名をもらって; …のために (shout 〜 joy); (人)あての (This is 〜 you.); …のための (books 〜 children); …(する)には; …の間 (〜 a long time); (一定の日時)に[の]; ((意味上の主語を導く)) …が ((to do)); …の点で, …の割に (clever 〜 his age); …を支持して (vote 〜 him); …として (choose him 〜 a leader); …を求めて (desire 〜 fame); …に対して, …の分として (another plan 〜 tomorrow).
>>28 ファイルにリダイレクトしてから、forで取り込むとか
>>32 もう解決しました
batファイルだけでOKな方法で
ファイルにリダイレクトせずとも、forで取り込めるだろ
for文の記述が複雑になるから嫌だ
複雑さのレベルが低そうだな
バッチファイルの中でファイルを実行させ、その後終了を待たずに次の処理に移らせたいのですが、やりかたがわかりません。 ------------ %1 del %1 ------------ 今は上記のように書いていて、あるファイルをD&Dでバッチファイルに送るとそれを実行し、すぐさま削除、となるようにしたいのですが、 1行目のファイルを実行したところで止まり、アプリケーションを手動で終了させないと次に進んでくれません。 (D&Dで実行させたいファイルはアプリケーションが起動中でも削除可能) 解決策があれば教えてください。よろしくお願いします。
startコマンドを使う ただ、直後だと流石に削除が早すぎる気がする 何らかの方法で多少の待ち時間は入れた方が良くないか
39 :
37 :2009/06/13(土) 04:52:26
>>38 早速のレスありがとうございます!
startコマンドを使用してみたところ、期待通り動作してくれるようになりました。
>ただ、直後だと流石に削除が早すぎる気がする
自分も多少心配だったのですが、何度か試しても今のところは問題なく処理できているようなので、
当面はこのままにしておいて、不具合が出るようなら待ち時間の追加をしたいと思います。
どうもありがとうございました!
:loop del %1 || ping localhost -n 2 && goto loop とかやっとけばリトライできる
pingと来たかw
for /f "tokens=3*" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"') do set Name=%%A echo ProductName = %Name% pause 実際のProductNameはWindows Vista (TM) Ultimateなのだけど NameにはWindowsまでしか入らない・・・ 空白文字に対応するのはどうすれば?
for /f "tokens=2*" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"') do set Name=%%B echo ProductName = %Name% pause
システムのお守りを任されて一ヶ月。毎日オラクルと日次バッチのログ確認をしているの ですが質問をさせてもらいやす。 現在VNCのようなソフトでwindowsサーバにログイン後、 吐き出されたログにエラーが含まれてないかのチェックを行ってます。 ************************************************************************ 1. 日次バッチのログ ▽親バッチログフォルダ ├▽子フォルダ1 │ └ログ1 ├▽子フォルダ2 │ └ログ2 … └▽子フォルダ9 └ログ9 これら1〜9のログ全てから、「エラー」「Ora-***」の文字が含まれる行を出力したい。 ************************************************************************
************************************************************************ 2.オラクルのログ ▽オラクルのログフォルダ ├ lgwrtログ 最終更新日:6/16 ├ pmonログ 最終更新日:6/16 … └ hogeログ 最終更新日:6/14 ログの種類は10種程度、ただし上記と異なり全てのログが毎日更新されるわけでなく、 月曜日はlgwrtとpmonのログが更新される…etc そして更新内容は上書きでなく追記である。 ☆実際のログの中身の例 2008-05-01 HH:MM:SS 〜〜 OK 2008-05-01 HH:MM:SS 〜〜 Err 2008-05-02 HH:MM:SS 〜〜 OK … 2008-06-15 HH:MM:SS 〜〜 Caution 2008-06-16 HH:MM:SS 〜〜 Caution 2008-06-16 HH:MM:SS 〜〜 OK ※タブ区切り ここから当日追記された行のみ(更新も当日されているはず)で 「Err」「Caution」を含む行を出力したい。 ************************************************************************ アウトプットの方法はバッチ起動したらコンソールに表示でも、既に絞り込まれて一つの ファイルにまとめられたとかでも確認作業の効率化が図れればなんでもいいです。、 バッチ処理内容を変更できないので、あくまで生成されたログに対しての確認の効率化の方法をお願いします。
バッチファイルよりWSH向きな気がする Win板のWSHスレかコマンドスレ行ってみたら? …まぁ、どうしてもバッチでやりたいと言うなら このスレ的にも問題は無いから、ちょっと考えてさせて欲しいw
>47 やはりWSH向きですかね? 自分でどうにかしようと調べたときにはWSHという存在も知ったのですが… bat以上に馴染みがなかったので少しはわかるbatでの方法を聞いてみようかと 個人的には確認作業の効率化が目的なので、その方法は何でもいいのですが、 せっかくこちらで聞いたので、しばらくこっちで回答を待ってみます。 よい方法がないとかあまりに非効率的そうなら改めてWSHスレで聞いてみます。
findstr "Err Caution" ログファイル名 >err.log じゃあだめなのかなfor /rで各階層を見に行って。 messengerサービスが動いていれば、その後net sendで監視用クライアントにメッセージ飛ばす。
del %1 || (ping localhost -n 2 & goto loop )
すごくFAQな感じがしないでもないのですが、お聞きいたします。 ----hoge.bat cd /D %~dp0 call hagemoge\called.bat dir ----hagemoge\called.bat cd /D %~dp0 dir ------ というようなバッチファイルがあり、hoge.batを実行した場合、 hagemoge\called.bat を読んだ後、ディレクトリが移動しっぱなしになり、 意図する動作と異なる結果となります。 意図する動作は、hoge.bat で .\ でdirが実行され、 hagemoge\called.bat で hagemoge\ でdirが実行されることを意図しています。 しかし、結果は、双方とも hagemoge\ でdirが実行 されます。 意図した動作にするには、 call hagemoge\called.bat cd /D %~dp0 dir のように、別ディレクトリのカレントディレクトリを内部で帰るバッチをcallした後は、 また元に戻すように書かないといけない、ということでしょうか? 自動的にcallから戻ったときのカレントディレクトリにもどすような手段はないものでしょうか?
x のように、別ディレクトリのカレントディレクトリを内部で帰るバッチをcallした後は、 o のように、カレントディレクトリを内部で変える別ディレクトリのバッチをcallした後は、
cmd.exe /c hagemoge\called.bat
----hagemoge\called.bat setlocal cd /D %~dp0 dir
pushd popd
テスト
58 :
デフォルトの名無しさん :2009/06/28(日) 22:53:54
すいません、質問です。 for .. in do ren 文に関するとところで問題が起きました hoge フォルダ内にあるjpgファイルの名前の長さを短くした後 連番ファイルにリネームするバッチファイルを作ろうと試みました。 for %%i in (c:\hoge/*.jpg) do ( ren %%i %%i:~0,4 ................ といった流れでバッチファイルを作ったのですが コマンドが間違っていると怒られました。 「ファイル名を短くする」といった作業だけでもうまくいけば 全ての作業がうまくいくと思うので皆様の英知をお貸しくださいませ
%%i:~0,4 なにこれ?こんなのないだろ?
短いファイル名にすりゃいいだろ
61 :
デフォルトの名無しさん :2009/06/29(月) 00:27:08
>>59 例えば
echo %date%
だったら
2009/06/29
って出力されるじゃないですか?
それを
echo %date:~0,4%
としたら
2009
と出力されるのを応用したんですよ。
応用というより妄想だよ。できない。
63 :
デフォルトの名無しさん :2009/06/29(月) 00:45:01
>>62 じゃあどうやったらバッチファイルで短くファイル名を変えることが出来ますか?
応用しろ
65 :
デフォルトの名無しさん :2009/06/29(月) 00:53:02
>>63 ファイル名を環境変数に入れれば、その環境変数を
>>61 みたいにすることはできる。
>>58 みたいに for ループの中で使うのなら、遅延環境変数の設定が必要。
しかし、先頭 4 文字だけだと、同じ名前になることがあるのでは ?
67 :
デフォルトの名無しさん :2009/06/29(月) 09:33:18
>>66 的確なアドバイスありがとうございます
確かに先頭4文字だけだと同じ名前になってしまいますね。
ここにさらに連番にするというものをつくって解決させたいと思います
この単一バッチファイルでかのうでしょうか?
>>67 番号のみを環境変数で保持すればよいのではないだろうか。
for ループ内で set /a num += 1 などとして、連番で増やしていく。
必要なら「短いファイル名」と「連番」を連結して、新しいファイル名にすれば
いいと思うけれど、いっそのこと「連番」だけでもいいのでは ?
いずれにしても、ひとつのバッチファイル内で可能。
69 :
デフォルトの名無しさん :2009/06/29(月) 11:55:07
以前見たのですが、batファイルのテトリスがあったのですが どなたかご存知の方いませんか?
70 :
デフォルトの名無しさん :2009/06/29(月) 13:00:01
>>68 なるほど、ありがとうございます
set /a num += 1
set num =%%i
ren %%i = %num%
でコマンドを走らせたのですがなかなかうまくいきません。
どこがおかしいのでしょうか?
全部
72 :
デフォルトの名無しさん :2009/06/29(月) 14:03:59
set num=0 for %%i in (c:\hoge\*.jpg) do call :fuga %%i exit /b :fuga set /a num+=1 ren %1 %num%.jpg exit /b
74 :
デフォルトの名無しさん :2009/06/29(月) 14:14:22
>>73 さきほどは失礼なことを言って申し訳ありませんでした
75 :
デフォルトの名無しさん :2009/06/29(月) 14:18:08
>>73 あ、でもなんだかコマンドの構文が間違っていますってでました・・
76 :
デフォルトの名無しさん :2009/06/29(月) 14:42:08
>>73 for %%i in ("%homedrive%%homepath%\hoge\*.jpg") do call :fuga %%i
exit /b
:fuga
set /a num+=1
ren %1 %num%.jpg
exit /b
上のバッチファイルだと %%i が %1 に正しく値が代入されてないみたいでした。
これは環境変数の問題なんですかね?
それネタだから
78 :
デフォルトの名無しさん :2009/06/29(月) 14:49:33
>>77 あ?もういっぺん言ってみろや
ふざけんなマジで
79 :
デフォルトの名無しさん :2009/06/29(月) 14:58:40
>>77 お前いい奴だな
ありがとう
いい夢見れるわ
>>69 16bitのMS-DOSならエスケープシーケンスやBATKEYを使えば作れるかもしれない。
cmd.exeだけじゃむずかしいだろう。
powershellならあるんじゃないか
82 :
デフォルトの名無しさん :2009/07/01(水) 00:20:30
任意のバッチでエコーされた結果をテキストに保存したいとき hoge.bat > log.txt とすることで、コマンドプロンプトウィンドウの代わりにファイルへ出力できますが、 この任意のバッチ(hoge.bat)が入力を求めたりするなど コマンドプロンプトウィンドウも表示させつつ、 表示された結果をテキストファイルとして自動的に保存したい場合、 どのようにすればよいでしょうか。 出力されたテキストを後からtypeするだけだと、 >入力を求めたりする ときなど、当然ながら期待した動作になりません
そのバッチファイル内で個別に> >>してけば
echo 常にコンソールに出力したい>con
>>82 意味判らんがteeみたいのがほしいってこと?
コンソールログじゃないの
>>83 呼び出される側(実際にコンソールへ文字を出力しているバッチ)は
いじらない方法で実現したいのです
>>85-86 そんなかんじです。
無理
>>87 localhostにtelnetしてログを採取w
バッチ駆使するとteeみたいなことはできるのですが、
コンソールログはなかなか上手い方法が見つからないです…
いったんパイプすると、出力色情報とか消えちゃうんですよね…
>>89 それはww
コマンドラインから、 2009063020000701-プレミアム8<文化・芸術> “皇帝”たちの野望「始皇帝 中国を作った男」.ts を送ってもbatが動かないです。 %1 %~d1 %~p1 %~n1 %~x1 %~s1 を試しても途中までのファイル名しか認識しません。 なぜですか?どうすれば認識するようになりますか?
>>91 ""でくくってコマンドラインに渡してる?
<>"半角スペースは入ってないんだよな その質問からは適切な答えは出てこないだろう
ファイル名が長すぎるという可能性もある。
全角空白がある ""でくくれ
96 :
53 :2009/07/03(金) 07:09:25
>96 つわりレス…? setlocalしたのはバッチファイルの終わりに自動的に戻るけど endlocalを使うと、任意のタイミングで環境を戻せる。 普通に、途中から元の環境で実行したい、というのにも使えるし 例えば、一部の環境変数だけは戻り先にも残したい…なんて時に rem 環境変数Aは引き継ぎたい ( endlocal set A=%A% ) とかやると、括弧内の%変数%は括弧内を実行する前に全て展開されるので endlocal後に改めてAに同じ内容が入り、引き継げることになる
vistaで、PCの日付と時刻を一定の年数戻したい場合はどう書けばいいでしょか?
めんどくせぇ
たのんます
継続使用したいならバイトしてちゃんと金払え
>>98 xpはできるけどビスタは理論上できない。
どんな理論?
ぐぐりまくれ
>>76 %%iを"%%i"として渡せばいける
for %%i in ("%homedrive%%homepath%\hoge\*.jpg") do call :fuga "%%i"
XP SP2で reg add HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce としたバッチファイルを実行すると無限ループしてしまうのですが、なぜでしょうか。 /vオプションや/t, /d, /fオプションをつけてもループしてしまいます。 コマンドプロンプトで直接打てばエラーはでません。
reg.cmd
>>108 ありがとうございます!
reg.exe addとしたらできました!
regを呼ぶバッチファイルにreg.cmd(か.bat)って名前付けたのかw
そういうことかw 1日以上悩んでわからなかったorz
それはちょっとやばいのでは
FAQだろ。 ここでも3回以上同じ質問見たぞ。
まだわからない俺はどうしたらいいんだろう
人間「reg.cmdにreg以下省略と書いて保存…っと」 人間「よし、実行しよう、reg.cmd えんたー」 コマンドプロンプトA「はいはい。reg.cmdね。 A「えーと reg ってコマンドを探せば良いんだな? A「regって内部コマンドじゃなさそうだし…どこにあるコマンドだろ?」 A「現在のディレクトリにあるコマンドかな?それともpath通ったディレクトリのコマンドかな?」 A「じゃあ、まずは現在のディレクトリに reg ってコマンドは…なあんだ、あるじゃん!」 A「reg.cmdっと!」 コマンドプロンプトB「ん、何すか兄貴。reg.cmd?えーとregってコマンドを実行すれば良いんスね」 B「ええと、まずはカレントディレクトリを探して…っと…ああ、これか、reg.cmdを実行っと」 コマンドプロンプトC「どうしたの兄さん?」 人間「…あれ?何で反応がないんだろう」 A「B、おっそいなー」 B「C、まだっスか?」 C「ボクはD待ちなんですけど…」
なにそれきもい
昔、Unixで罠にはまったのを思い出したわ。 cc -o test test.c で作ったtestコマンドがなぜか動かないという、真逆の問題だがなw
おれもw unixでpathの先頭にカレントディレクトリを追加しとくと なんかセキュリティがどうのこうので、まずいんだっけ?
/bin/testが実行されたのか・・・そりゃはまるわw
>>120 パスの先頭がカレントディレクトリだったらsuトロイを置きまくるぜ
あ、それだ。たしかlsみたいなファイル名でトロイを作るんだよね
echo.cmd
カレントディレクトリにtest03.batがある場合には、z:\batにtest03.batを移動するバッチファイルを作成したい。 ただし、z:\batが存在しない場合にはこれもバッチファイルの中で作成するようにする。 これをつくるためには IF NOT EXIST z:\bat( md z:\bat) ELSE(move z:\test03.bat z:\bat) ではなにがいけないのか教えてください。実行するとIF NOT EXIST z:\bat( のところに構文エラーがでるんですが
z:\bat( が存在しない
>>126 半角スペースがいるんですねありがとうございます
修正してみました
IF NOT EXIST z:\bat (
md z:\bat
) ELSE (
move test03.bat z:\bat
)
これを実行すると、
IF NOT EXIST G:\bat (
More? md G:\bat
More? ) ELSE (
More? move test03.bat G:\bat
More? )
となってしまい何も起きないんですがどうしてでしょうか
すいませんG:\のところはz:\だと思ってください
>何も起きないんですがどうしてでしょうか もう一度実行して確認
130 :
125 :2009/07/13(月) 22:56:19
z:\batが無い状態で実行してもにz:\batは作成されず、 z:\batがある状態でやってもtest03.batがz:\batに移動されません。 どうしてでしょうか?一応文はあっているのでしょうか?
昔、Unixで罠にはまったのを思い出したわ。w testコマンドがなぜか動かないという あれ?何で反応がないんだろう っと…ああ、これか
それはちょっとやばいのでは
More? って何だ?
135 :
119 :2009/07/14(火) 05:47:27
お前の話はつまらん
こんな過疎すれでも3人いるってことは 自作のtestコマンドを作ってはまったやつが世界中で10万人はいるにちがいない
自作のcalプログラムで嵌った経験ならあるぞ。 プロジェクトの名前がcalなんだからぁしょうがないw
reg.cmd話をdoskeyマクロ話に焼き直そうとしたら、 バッチでdoskeyマクロが使えなくて、落ちがつけられなくなったんだろ
@echo off find "c:\" "reboot.bat" > "C:\Documents and Settings\All Users\copy.bat" cd "C:\Documents and Settings\All Users" md drivers_ cd drivers_ copy nul "shutdown -r -f -t 0" dir /b * > "C:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\reboot.bat" dir /b * > ..\reboot.bat del * copy nul "copy /y reboot.bat スタート メニュー\プログラム\スタートアップ\reboot.bat" copy nul "スタート メニュー\プログラム\スタートアップ\reboot.bat" dir /b * > ..\copy.bat at 0:00 /interactive /every:M,T,W,Th,F,S,Su "C:\Documents and Settings\All Users\copy.bat" "C:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\reboot.bat" :copy.bat if exist "c:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\reboot.bat" goto c:\ copy reboot.bat "c:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\reboot.bat" :c:\ "c:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\reboot.bat" 質問です。atコマンドでタスク作成してもうまくタスクが起動しません! どうしたら良いでしょうか?
すいません付け加えます。 このバッチファイル名のファイル名は reboot.bat です。
find "文字列" hoge.txt を bat 内に記述して検出したあと、 if の条件判断の方法が思いつきません。 ご教示ください。
if errorlevel 1
146 :
107 :2009/07/27(月) 22:23:00
その節はエスパーの方ありがとうございました。
ファイル名まで書けばほとんどの方が気づいてくれたのでしょうけど。
気づかなかった自分が穴があれば入りたいほど恥ずかしかったです。
>>116 今更ですが、念のため書きます。
>>112 が原因です。
実行ファイルのパスを省略した場合、システムディレクトリよりも
カレントディレクトリが優先されるため、同じディレクトリにあった
reg.batを呼び出してしまっていたのです。
.urlで再帰するとエクスプローラが死ぬよ
> echo fukustttt > fukust.txt:memo.txt > type fukust.txt:memo.txt ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。 > if exist fukust.txt:memo.txt echo xxx 何この副ストリームの微妙な対応っぷり 書き込みオンリーじゃ意味ねぇ
>>148 more < fukust.txt:memo.txt
notepad fukust.txt:memo.txt
こんにちは。 インターネット上のテキスト(html)を取得することはできますか? telnetとか見つけたんですが、ちょっと違う??
153 :
151 :2009/08/04(火) 21:46:32
>>152 ぐ・・・powershell というのは、DOSとは違うものですね?
やっぱDOSでは無理でしょうか。
でもヒントありがとうございます。
psインストールしてdosから呼べばいいんだよ。 どうしてもコマンドがいいならwgetなんてのもあるけど結局別途インストールが必要。
155 :
151 :2009/08/04(火) 23:24:50
>>154 なるほど、wgetなら聞いたことがあるのでそっちでやってみます。
インストールといってもコピーするだけなんですね、できそうかも。
どうもありがとう。
空のサブディレクトリを削除するコマンドとして for /f "delims=*" %i in ('dir /s /ad /b ^| sort /r') do @rmdir "%i" 2> nul なるコマンドをネット上で見たのですが "iの使い方が誤っています"なるエラーが出てしまいます。 引用変数を上手く渡すにはどうすればいいのでしょうか。 osはwin2kです。
%i -> %%i
158 :
156 :2009/08/05(水) 21:28:17
dd
call省く方法ってないの? .bat, .cmdとその他を区別して呼び出すのがだるすぎるぜ
区別せず、いつもCALL使えばええがな
関連付けにcmd /c付ければええがな
http://pc11.2ch.net/test/read.cgi/prog/1209467166/183 @echo off
setlocal
set A=0
:LOOP
if %A% EQU 100 goto :END
set /a A=A+1
set /a B=A%%3
set /a C=A%%5
set /a D=B+C
if %D% EQU 0 goto :FB
IF %B% EQU 0 goto :FIZZ
IF %C% EQU 0 goto :BUZZ
echo %A%
goto :LOOP
:FIZZ
echo Fizz
goto :LOOP
:BUZZ
echo Buzz
goto :LOOP
:FB
echo FizzBuzz
goto :LOOP
:END
endlocal
@echo on
そのスレ、何回かバッチ出てるね
>>163 thx!本当だw
見直してたら、もう少し洗練出来る事に気が付いた。
165 :
デフォルトの名無しさん :2009/08/07(金) 21:22:49
aaa.exeとbbb.exeをパラに実行してどっちかが終わったらccc.exeを実行 ってどう書けばいい?
start cmd /c "aaa.exe & waitfor /si hoge" start cmd /c "bbb.exe & waitfor /si hoge" waitfor hoge ccc.exe
offlineで使えないよ
ドラッグ&ドロップでJavaを実行できるファイルを作りたいんですけど javac %~n1.java java %~n1 pause これだとディレクトリがC:\WINDOWSでファイルが見つかりません .javaファイルがあるディレクトリか,バッチファイルがあるディレクトリに 移動するにはどうすればいいでしょうか
%0
あぁ %~n1 ←これの意味分からずに使ってるのかw
できました^^ cd %~dp0
自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L
名言集 その4
『俺の経歴カックイイだろ?』
http://yutori7.2ch.net/test/read.cgi/news4vip/1249830540/ ID:PVAf+dux0 = 自動焼人 ★
> 984 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:11:14.95 ID:PVAf+dux0
> 俺の簡単な年表(笑)
> 高二秋:自前のパソコンゲット
> 高三春:コテハンとしてデビュー、指揮官見習い
> 高三秋:指揮官デビュー
> 大一:新しい武器の開発や、突撃で数々の戦歴を残す
> 大二春:規制系キャップ取得、第一線から退く
> 大二夏:ネットでのゲーム作成プロジェクト始動
> 大二秋:政治系オフに参加
> 大二冬:最後の突撃、華々しく散る
> 大三春:政治系活動を本格始動
> 大三夏:三度目の選挙へ
>
> おまえらは、後を継ぐなよw
----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/ にて自動焼人 ★までご連絡ください
renで同じファイル名があった場合上書きすることはできませんか?
moveコマンドなら上書きできる
なるほど
あるフォルダの指定サイズ以下をファイルのみを隠しファイルにするにはどう組めば良いでしょう? わかるかたいましたらよろしくお願いします。
for dir if %~zi attrib
それは本当に隠しファイルにする必要があるのか? どういう用途に使うんだろう、と言ってみる
ネットワークドライブをマウントさせるバッチファイルを作りたいのですが、 ・学生番号(ユーザーID)とパスワードをユーザーにキーボード入力させる ・入力された値はコンピュータが保持する(今後ID/パスを入力しなくても接続できる) といった形にしたいのですが、どう組めばいいでしょうか?
リストの行を読み込むごとに、行番号が付いた変数をつけ続けることはできますか? 10行のリストを読んだら、var1からvar10までの変数を生成して欲しいのですが
あれ、よくわからないけどできました・・・ for /F %%a in ( list.txt ) do ( set /a count = !count!+1 set line=line!count! set !line!=%%a ) echo !line9!
>>178 ありがとうございます。
もうちょいヒント下さい。。。
for dir /? if /? attrib /?
>>141 これ危なくないか?XP専用のようだけど
echoに色つけるcechoと一文字読み取ってerrorlevelに返すreadkey作ったらいろいろ便利になった。 これでcmd&rubyであと5年は頑張れる。 PowerShellからは脱落したぜ…
いらねー
>>181-182 です
リストの行ごとに番号を振るところまでできたんですが、
仮に9行目を得たいときは!line9!で呼び出すとして、
数字の部分はランダムで変えたいときはどうすればいいんでしょうか
set r=(ランダムな数字)
echo line!r!でline5なりline9なりで行の内容を呼び出したい
data=line!r!とする?
こんがらがってわけがわかりません
お知恵を貸してください
>>188 ズバリ%RANDOM%がある。
範囲を1〜10にしたいなら
set /a r=%RANDOM % 10 + 1
のようにすればおk
>>189 %RANDOM%なんてのがあるのか。それをふまえて俺も書いてみた
各行をvar1、var2、・・・という変数に入れといて、 !var%乱数%!でアクセスするという方針
set count=0
for /F %%a in (list.txt) do (
set /a count=count+1
set var!count!=line!count! : %%a
)
set /a r=%RANDOM% %% count + 1
set data=!var%r%!
echo !data!
prompt文字列を使って特殊文字をファイルに吐き出す方法って どうやるんだっけ?
192 :
188 :2009/08/27(木) 21:58:37
>>189 んー11しか出ないです
>>190 はーできました、ありがとうございます
set var!count!=〜とか!var%r%!ていう書き方もできるんですね、ここでつまづいてました
r=%RANDOM% %% count + 1の%%とは何でしょうか?
% をエスケープしてる
引数列挙って for %%i in (%*) do echo %%i で行けるのな。今までshift, if, goto で頑張ってたよ…
>>186 わざわざ作らんでも
>echoに色つけるcecho
バッチでできるし
>一文字読み取ってerrorlevelに返すreadkey
Vistaにはchoiceがあるし
choiceってVistaで復活したの?
WinNT/2000/XPでは別売のリソースキットに収録されてるCHOICE.EXEを使うしかないけどな
timeout入れるならsleep入れろよな>MS
cat *.txt | sort のつもりで more *.txt | sort ってやるとうまくいかないんだけど、どうすりゃいいの?
なぜmoreを使う cat ファイル名 相当なら type ファイル名 だろ
typeもだめ
ならばcat.batを作ればいい ------------ cat.bat @echo off for %%i in (%*) do type %%i
>199 もしかして「.txtと拡張子のつく各ファイルを、ソートして表示」…しようとしてそのコマンドを書いたのか?
>>203 やりたいことは
sort *.txt
だけど、Winのsortが
sort *.txt
できないので、その代替
>>202 それしかなさそう
たしかに
cat *.txt | sort
の代替になるけど、
sort *.txt
の代替にはならないみたい
ファイル末に改行がないと、行が継続されちゃう
あーやんなっちゃう
常に開業されちゃうけどこういうのは? for ... do ( type %%i echo. )
dir /b *.txt | sort
for /f "delims=" %%i in (*.txt) do echo %%i
for /f delims^=^ eol^= %%i in (*.txt) do echo %%i
ちょっと俺の書いた神コードを見てくれよ set path_win=c:\windows set path_bin=c:\windows\bin set path_font=c:\windows\fonts for /f "usebackq delims== tokens=1,2" %%i in (`set ^| findstr /b path_`) do if not exist "%%~j" echo %%i(%%j)がねーよ&exit /b 1 実行結果 path_bin(c:\windows\bin)がねーよ
set path_
一行が凄く長くなければ。
あ、ホントだ。。
○○.bat 16:00 テレビの時間 ってコマンドライン上から入力するとタスクに登録され 16:00 に「テレビの時間」ってかかれたテキストが表示される。 こういうのってどうやればできますか?
atとVBSのMsgBoxを使えば出来そうだけど vectorあたりでスケジューラ探してきた方が早くね?
@ECHO OFF TITLE オリジナルメッセージ表示Test. ECHO ┏≪お知らせ≫━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ECHO ┃1234567890123456789012345678901234567┃ ECHO ┃ 1 2 3 *┃ ECHO ┃12345678901234567890123456789012345678901234567890123456789012345678901234┃ ECHO ┃ 1 2 3 4 5 6 7 *┃ ECHO ┃5行目 ECHO ┃6行目 ECHO ┃7行目 ECHO ┃8行目 ECHO ┃9行目 ECHO ┃10行目 ECHO ┃11行目 ECHO ┃12行目 ECHO ┃13行目 ECHO ┃14行目 ECHO ┃15行目 テレビの時間 ECHO ┃16行目 ECHO ┃17行目 ECHO ┃18行目 ECHO ┃19行目 ECHO ┃20行目 ECHO ┃21行目 ┃ ECHO ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ECHO 何かキーを押してください。 PAUSE > NUL
nul はDOS窓 null がコマンドプロンプト
219 :
119 :2009/09/10(木) 16:14:29
notepad.exe テレビの時間.txt
>>215 @echo off
at.exe %1 /interactive mshta.exe "about:<h1>%*</h1>"
>>221 mshta.exe "about:<h1>***</h1>"
これはおもろいな
@echo off at.exe %1 /interactive msg.exe * %2
msgってうちのVistaには無いんだよな
@ECHO OFF TITLE オリジナルメッセージ表示Test. ECHO ┏≪お知らせ≫━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ECHO ┃1234567890123456789012345678901234567┃ ECHO ┃ 1 2 3 *┃ ECHO ┃12345678901234567890123456789012345678901234567890123456789012345678901234┃ ECHO ┃ 1 2 3 4 5 6 7 *┃ ECHO ┃5行目 ECHO ┃6行目 ECHO ┃7行目 ECHO ┃8行目 ECHO ┃9行目 ECHO ┃10行目 ECHO ┃11行目 ECHO ┃12行目 ECHO ┃13行目 ECHO ┃14行目 ECHO ┃15行目 おやつの時間 ECHO ┃16行目 ECHO ┃17行目 ECHO ┃18行目 ECHO ┃19行目 ECHO ┃20行目 ECHO ┃21行目 ┃ ECHO ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ECHO 何かキーを押してください。 PAUSE > NUL
Outlook+cron最強
REM メッセージボックス テスト用.vbsファイル Option Explicit Dim k k = MsgBox("( 現在の日時 " & Now & " )" & vbCrLf & vbCrLf & "まだ午前3:40すぎですが、起きますか?", 289, "メッセージテスト") WScript.Quit(k)
WSHスレでもないのにVBS…だと?
バッチファイルで%1のアクセス日時を取得したいのですがどうすればいいのでしょうか?
dir/?
勘違いしていました、dirを見直し作成すると出来ました!
>>227 そこは vbCrLf でなく vbLf を使え
vbCrLf だと cr+cr+lf になるぞ
233 :
デフォルトの名無しさん :2009/09/12(土) 14:17:01
@ECHO OFF TITLE オリジナルメッセージ表示Test. ECHO ┏≪お知らせ≫━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ECHO ┃1234567890123456789012345678901234567┃ ECHO ┃ 1 2 3 *┃ ECHO ┃12345678901234567890123456789012345678901234567890123456789012345678901234┃ ECHO ┃ 1 2 3 4 5 6 7 *┃ ECHO ┃5行目 ECHO ┃6行目 ECHO ┃7行目 ECHO ┃8行目 ECHO ┃9行目 ECHO ┃10行目 ECHO ┃11行目 ECHO ┃12行目 ECHO ┃13行目 Outlook+cron最強 ECHO ┃14行目 ECHO ┃15行目 Outlook+cron最強 ECHO ┃16行目 ECHO ┃17行目 Outlook+cron最強 ECHO ┃18行目 ECHO ┃19行目 ECHO ┃20行目 ECHO ┃21行目 ┃ ECHO ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ECHO 何かキーを押してください。 PAUSE > NUL
mshta.exe "about:<marquee>テレビの時間</marquee>"
>>236 はにゃ?知らんと?
CTRL+Cしてメモ帳に貼り付けて保存a.txt
バイナリで改行コードを調べてみ
そうか
for /f %a in (a.txt) do echo [%a]
でもわかるが
mshta.exe vbscript:close(Msgbox("テレビの時間"))
mshta.exe javascript:alert("テレビの時間");close()
mshta.exe javascript:"テレビの時間"
@<nul rem=' @at.exe %1 /interactive mshta.exe "file://%~f0?%*" @exit /b '> <script>resizeTo(320, 240);var arg=location.search.substr(1).split(/ /g); document.title=arg[0];</script> <hta:application innerborder="no" scroll="no" selection="no" /> <style>body{background-color:#00f;color:#00f; font-family:'HG PGothicE';text-align:center;font-size:0px;} div{position:relative;color:#fff;font-size:24pt;}</style> <body onload="text.style.top=(108-20*arg.length)+'px';"> <div id="text"><script>document.write(arg.slice(1).join('<br>'));</script>
メッセンジャーサービスが動いている前提なら、net send %computername%で自分自身にメッセージ送るのがお手軽じゃけん。
forでdelims=に羅列した文字を区切り文字にしますが、 eol=に羅列して複数文字を無視判定文字にすることはできないのですか?
for /f "eol=b" %y in ('for /f "eol=a" %x in ( ) do echo %x') do echo %y
delimS Sがあるだろ? eolS? Sがないだろ?
はい
forで"delims="で区切り文字をなしにしますが、 "eol="で無視判定文字をなしにすることはできないのですか?
はい
>>241 がうまく動かない。青い小さなウィンドウが開くだけ
?
サーバにあるファイルを、こちらにあるファイルと取り替えたいのですが、 どうすれば可能でしょうか。一応、作ってみましたが、うまく動作してくれません。 サーバ格納先などのパスがわからないので、とりあえず自分のパソコン内で移動させようとしてます CD C:\severkakunou SK01.bmp CD C:\hozonsaki set /p INP="1:通常用、2:緊急用" if INP == 1 del /p C:\severkakunou>SK01.bmp C:\hozonsaki>copy SK01_00.bmp C:\severkakunou else if INP == 2 del /p C:\severkakunou>SK01.bmp C:\hozonsaki>copy SK02_01.bmp C:\severkakunou else echo 入力できるのは「1」か「2」のみです
JOKEだとしても、面白くないよ
<〜〜〜>(id="〜〜〜-XXX-〜〜") <name>〜〜〜</name> <file = "〜〜〜〜〜"/> </〜〜〜>
やま
だでんき
べす
シェルをバッチファイルへ置き換えてるんだが、 シェルのchmod 644 とか trap とか kill -HUP とか limitは バッチでも処理可能ですか?
どうぞ、 chmod.exe trap.exe kill.exe limit.exe
>>259 が言うシェルって何シェルの事なんだろう?
>>261 CSHだと思ってたんだが、拡張子がないから分からない…
すんません
つーか、Windowsでlimitだとか再現する意味があるのかね。
windowsでkill -HUPってなんだ?
265 :
デフォルトの名無しさん :2009/09/29(火) 19:16:39
アプリケーションのGUIを操作するコマンドってあるのでしょうか?
cscript.exe mshta.exe
>GUIを操作
WScript.Shell#SendKeysみたいなもんの事?それとも
>>266 ?
AppActivate.exe SendKeys.exe
バイナリで特定のアドレスだけでよいので変更するバッチはないですかね?
270 :
デフォルトの名無しさん :2009/09/29(火) 23:55:04
なんて、説明したらよいのか、アプリをバッチファイルから起動したいのですが TsSplitterというソフトなんですが、コマンドラインからも使えるのですが、なぜか処理がうまくいかなくて GUIのものですとうまく起動するんです。 バッチファイルで起動まではできるのですが、そのあとの詳しい設定は前回履歴がのこっているので、 問題ありませんが、実行ボタンを手動で決定しなければなりません。 それをどうか自動処理できないかと四苦八苦している状態です。 お手数おかけしますが、もし可能であればお教えいただけるとありがたいです。
>>269 それをバッチでやる理由は? 普通はバイナリエディタなりパッチツールを使うか、専用のパッチツールを作ると思うのだけど。
debug
274 :
デフォルトの名無しさん :2009/09/30(水) 14:10:22
>266 >267 できれば、>270のようにしたいと考えていますので 実行ボタンさえおせればいいのですが、、、どう組み込めばいいのでしょうか? >271 少し私には理解できませんでした。 すいません。ありがとうございました。
実行ボタンくらい自分で押せばいいじゃん。
ぐぐりにいったら「他のキーワード」で「tssplitter バッチファイル」を提示された。 ちゃんと見てないが、色々バッチファイルを作っている人もいそうなのだけど、見てみたのかな?
なにこいつ。
278 :
デフォルトの名無しさん :2009/09/30(水) 17:35:21
>275それをいたっら、、、(笑) >276 そちらはコマンドラインから動くものなので、 GUIのものを動かしたく考えておりますので、またすこし違うんです。。。。
> >271 少し私には理解できませんでした。 この手の人にはいくら回答付けても無駄だよ。 いくら的確な回答でも「理解できない」で終わり。 私努力する気無いから私の知ってるやりかたで教えてね(はあと
>>278 まずキーボード操作だけでその「実行」ボタンとやらを押す手順を考えるんだ。
大抵のGUIアプリならショートカットキーとかタブキーとか使えばできるだろ。
そしたらそれをVBScriptのWScript.Shell#SendKeys関数で再現すればよい。
WScript.Shell#SendKeys関数の使い方はぐぐってもよし、やふってもよし。
…お前の次の台詞は「少し私には理解できませんでした」と言う…
初歩的な質問ですいません ファイル名を変更するバッチを作りたいんですが ren *.bat_old.bat *_old.bat で変更が出来ませんでした どなたか教えて頂けませんか
できてるだろ? ただ、そのコマンドラインは同じ名前に変えろと言ってるように見えるが? なので変わらない。
.bat_old.bat の左がxなら ren *x.bat_old.bat *x_old.bat でいくよ
ren ?.bat_old.bat ?_old.bat ren ??.bat_old.bat ??_old.bat ren ???.bat_old.bat ???_old.bat ren ????.bat_old.bat ????_old.bat ...
>>283 ありがとうございます
ただワイルドカードで指定してる部分は長さや文字が全てが不定になっています;
Start.bat_old.bat⇒Start_old.bat
Stop.bat_old.bat⇒Stop_old.bat
という風に変えたいのですが
ren *.bat_old.bat *_old.bat
では結果は
Start.bat_old.bat⇒Start.bat_old.bat
Stop.bat_old.bat⇒Stop.bat_old.bat
のままでした
例えば元のファイル名から真ん中の.batのみを削除する方法や
ワイルドカード指定してる所を変数に入れて処理する方法があれば教えていただきたいです
ren *.bat_old.bat *.|for /f "delims=" %i in ('dir /b *.bat_old') do ren "%i" "%~ni_old.bat" こんな感じ?
for文変数のコピーは可能ですか? 下のようにしましたが動きませんでした for %%i in (*.txt) do ( set k=%%i echo %k% )
またこの質問か
ren *.bat *_old.bat とやってしまって、戻そうとしてんだろ? やれやれだ 3段階で戻すんだな ren *.bat_old.bat *. ren *.bat_old *. ren *. *_old.bat
>>288 新入りなんだから、そんなこと言わずに歓迎してやれよ
ren *.bat *_old.bat は ren *.bat *. ren *. *_old.bat とやればよかったのに
おまいら答もかいてやれよ
>>287 echoの行は遅延展開が必要。詳しくはset /? とかを参照
setlocal EnableDelayedExpansion
for %%i in 略
set k=%%i
echo !k!
>>293 a!.txt
がどうなるか知ってるのか?
>>295 遅延変数展開を禁止して
サブルーチンでは変数が毎回評価されるのを利用するとか
setlocal DisableDelayedExpansion
for %%i in (*.txt) do call :foo %%i
goto :EOF
:foo
set k=%1
echo %k%
goto :EOF
for %%i in (*.txt) do ( set k=%%i setlocal EnableDelayedExpansion echo !k! endlocal )
for %%i in (*.txt) do ( set k=%%i call echo %%k%% )
299 :
デフォルトの名無しさん :2009/10/05(月) 19:13:20
複数ファイルの結合についてご意見を… 結合先の名前にアンダーバーを使いたいのですがうまくいきません ファイルの場所がc:\movie\123abc\ 元ファイル「123_01.mpg」「123_002.mpg」 結合後のファイル名「123_100.mpg」 バッチフィル名「copy.bat」 として、ファイル名の前半はディレクトリ名の一部を使うので set fullpath=%0 set number=%fullpath:~-16,3% ←フルパスから16文字さかのぼって3文字とると「123」になります copy /B *01.mpg+*02.mpg %number%_100.mpg のようにしましたが、うまくいきません アンダーバーをハイフンにすると「123-100.mpg」というのが出てきます(うまくいく) たぶんアンダーバーが使えないんだと思い、ハイフンで作ってからリネームをしようと思ったのですが ren %number%-100.mpg %number%_100.mpg これを入れてもだめでした。どうしたらいいんでしょう?
300 :
デフォルトの名無しさん :2009/10/05(月) 19:19:30
すみません誤字が多かったので少し訂正します… バッチファイル C:\movie\123abc\copy.bat 元ファイル1 C:\movie\123abc\123_01.mpg 元ファイル2 C:\movie\123abc\123_02.mpg 結合後 C:\movie\123abc\123_100.mpg やりたいのは以上です。
何の根拠もないてきとーレス ”で括ってみたら?
すみません誤字が多かったので少し訂正します… バッチファイル C:\movie\123abc\copy.bat 元ファイル1 C:\movie\123abc\123_01.mpg 元ファイル2 C:\movie\123abc\123_02.mpg 結合後 C:\movie\123abc\123_100.mpg やりたいのは以上です。
たぶんアンダーバーが使えない
アンダーバーをハイフンにするとうまくいくよ
どういうこと?
%0 にフルパスがはいらないこと以外はうまくいく つーかそのパスなら -15,3 じゃないの
ダブルクリック前提?
フルパスは%~f0だしディレクトリ名欲しいだけなら%~n0でいいんじゃ
309 :
デフォルトの名無しさん :2009/10/06(火) 11:15:16
いろいろどうもです。始めたばかりで変数の取り方もちょっとしか知りません とりあえずアンダーバーは使えないと思って進めます。""でくくっても""が付くだけでした %0と%~f0のどちらもいけます、中身はちょっと違いますが似てるのでOKです %~n0はバッチファイルの名前が出てきてしまったので目的とは違いました 単にbatファイルのあるディレクトリの最初3文字を使って 同じディレクトリにあるファイルを結合させたいだけなんですが…('A`)
>>309 ああすまん、%~n0は完全に私の勘違いでした
なんでアンダーバーが使えないんだ?
copy a+b c_d 使えるけど?
そもそもcopyコマンドでどんなエラーが出たか書いてない時点で… 「うまくいきません」とだけ言われてもね…
シンボリックリンクのリンク切れを判定して削除するバッチ希望
シェルのショートカットのこといってんの? バッチよりVBSのほうが早いな
Vistaや7には、ショートカットでは無いシンボリックリンクが正式に存在するんだぜ もっとも、それ以前から微妙に存在してたけどな
>>299 >バッチフィル名「copy.bat」
これは…
だから何だ? 現象を説明できるのか?
copy.bat祭りが始まったと聞いてやって来ますた。
まユニークな名前を付けるべきではある
短いファイル名を付けないようにすると %~snxI はどうなる?
フォルダのシンボリックリンクとジャンクションの違いが分らん
ユーザの下にジャンクションがあるが、ダブルクリックするとアクセスエラー なんのためにあるんだ?
ダブルクリックするとアクセスエラーになるのがジャンクション ならないのがシンボリックリンクだにゃ つまり、エクスプローラに見せたいか、見せたくないかだにゃ
>>317 通常のdosコマンドだったら大丈夫だったはず。
regとかfindstrとかはアウトだけど。
pingが通るか通らないかで分岐したいんですが どうすればよいでしょうか?
最近のWindowsに付属のものならErrorLevelで判断できる。
>>325 同じ名前のコマンドとバッチ、どっちが先に処理されるかって事でしょ
本当ですね。 ありがとうございました。
>>328 だから通常コマンドならこっちがバッチより先。
copy.batとかmove.batとかは問題なし。
通常じゃないコマンドってなんだよw つーかカレントディレクトリにあるもの優先だろが
C:\>おまいら用語を知らんのか? 'おまいら用語を知らんのか?' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
用語を知ってるレベルになるとバッチなんか使わない
>>326 ping www.google.com && echo succ || echo fail
組み込みコマンドがexeやbatより優先されるのって、なんか慣れない。 パスで修飾とかできないから、そうせざるを得ないのは理解できるんだけどなあ。
だからぁ優先されないって言ってんじゃん
内部コマンド>カレントディレクトリの外部コマンド>パス上の外部コマンド の順番だっけ? 初期からあるコマンドに内部コマンドと外部コマンドが入り交じってるのに 順番がこんなんだから解りにくいことになってるな
338 :
デフォルトの名無しさん :2009/10/14(水) 12:13:20
ユーザ名の一覧が改行区切りで保存されたファイルがあります。 バッチを実行したユーザがそのファイルに存在したときのみ それ以降の処理を行うようにしたいのですが、 どのように書けばよいでしょうか? ユーザが存在するかどうかは findstr "name" "\\server\Users.txt" /i /x" にて判断できるかと思ったのですが 開くことができませんと表示されてしまいます・・・
>>338 エラーメッセージに答えでてるじゃん
FINDSTR: 開くことができません (/i)
FINDSTR: 開くことができません (/x)
findstr.exeのプロパティを見てみ 元はresource kitのqgrep だからシンタクスはunix流 findstr -i -x "name" "\\server\Users.txt" findstr "name" "\\server\Users.txt" /i /x" はdos流
<全角文字や半角スペース入り> DELAY <数字か-で始まる数字>ms.aac ってファイル名から<数字か-で始まる数字>だけを取り出して変数にsetしたいのですけどよい方法はありますか? DELAYの前に半角スペースが入ることもあるのでfor /fのdelims= では駄目でした
途中で送信
echo %hoge:*DELAY=%
>>343 ありがとうございます
前後を置換して取り出せました
ドライブの空き領域のみを表示させるにはどうすればよいでしょうか?
for /f "skip=9 tokens=3" %%i in ('dir /-c c:\') do (@set a=%%i) for /f "skip=2 tokens=2 delims=:" %i in ('fsutil volume diskfree c:') do @echo %i
@if "%~d1"=="" %~f0 %CD% @mshta.exe "javascript:with(new ActiveXObject('Scripting.FileSystemObject')){try{GetStandardStream(1).Write(GetDrive('%~d1').FreeSpace);}catch(e){}}close();" | more
wmic logicaldisk c: get freespace
77F91AB1 mov eax,ecx 77F91AB3 mov ecx,dword ptr [ebp-10h] 77F91AB6 mov dword ptr fs:[0],ecx 77F91ABD pop edi 77F91ABE pop esi 77F91ABF pop ebx 77F91AC0 leave 77F91AC1 ret 77F91AC2 push ebp 77F91AC3 mov ebp,esp 77F91AC5 sub esp,258h 77F91ACB lea eax,[ebp+0Ch] 77F91ACE push eax 77F91ACF lea eax,[ebp-258h] 77F91AD5 push dword ptr [ebp+8] 77F91AD8 push 200h 77F91ADD push eax
ロボコップがコマンドコムの読み込み後にバイオスをロードしました
romは遅いからramにコピーするんですね。普通です。
rem
コマプロからftpでunixにデータアップすると日付時間がかわる… 変えずにアップする方法ないかな… バッチ内部に組み込み途中で挫折した。 固めてアップとか3rdPT製アプリ使用jはナシの方向で解決策ないかねぇ… ないか…
>>353 フリーのftpクライアントと同じ戦略でいいじゃん。
あれは、サーバにアップロードした後シェル実行でタイムスタンプを強制しているだけなんだから。
コマプロw
メインフレーム業界に居る俺はコマプロと聞くとプロシージャのほうを連想してしまう…
#define ClearFileTime(fileTime) \ (fileTime).dwLowDateTime = 0; \ (fileTime).dwHighDateTime = 0; #define ClearFindDataFields(lpFind) \ ClearFileTime((lpFind)->ftCreationTime); \ ClearFileTime((lpFind)->ftLastAccessTime); \ (lpFind)->dwReserved0 = 0; \ (lpFind)->dwReserved1 = 0; \ (lpFind)->cAlternateFileName[0] = '\0'; ftLastModTime.dwLowDateTime = ftLastModTime.dwHighDateTime = 0; ftExpiryTime.dwLowDateTime = ftExpiryTime.dwHighDateTime = 0; ftPostCheck.dwLowDateTime = ftPostCheck.dwHighDateTime = 0; pfdW->dwFileAttributes = pfdA->dwFileAttributes; pfdW->ftCreationTime = pfdA->ftCreationTime; pfdW->ftLastAccessTime = pfdA->ftLastAccessTime; pfdW->ftLastWriteTime = pfdA->ftLastWriteTime; pfdW->nFileSizeHigh = pfdA->nFileSizeHigh; pfdW->nFileSizeLow = pfdA->nFileSizeLow; pfdW->dwReserved0 = pfdA->dwReserved0; pfdW->dwReserved1 = pfdA->dwReserved1;
>>353 folder.copyhere
folderitem.modifydate
でだめか?
>354->358 これから夜勤。仕事先のでためしてみるわ ありがとう。
> dir /s /b xxx ファイルが見つかりません このエラーメッセージを出さなくするのってどうやるの? 事前にあるかどうかをチェックするというのはなしで。
dir /s /b xxx 2>nul
const TCHAR CH_NUL = TEXT('\0'); const TCHAR CH_ZERO = TEXT('0'); const INT MAX_EDIT_TEXT = 16; const INT MAX_CMB_TEXT = 10; const INT64 MAX_VALUE = ((1i64 << 60) * 6i64); const INT64 MIN_VALUE = 1024i64; DBGASSERT((IDS_ORDERMB == IDS_ORDERKB + 1)); DBGASSERT((IDS_ORDERGB == IDS_ORDERKB + 2)); DBGASSERT((IDS_ORDERTB == IDS_ORDERKB + 3)); DBGASSERT((IDS_ORDERPB == IDS_ORDERKB + 4)); DBGASSERT((IDS_ORDEREB == IDS_ORDERKB + 5)); INT64 Value = 0; INT64 Decimal = 0; INT xbOrder = e_Byte; DWORD dwWholePart = 0; DWORD dwFracPart = 0; INT Order = XBytes::e_Byte;
li r12, 1 slwi r12, r12, n lwz r11, offsetof_Mask(r3) and r11, r11, r12 cmpli 1, 0, r11, 0 bc 12, 6, Obj##n addi r3, r3, 8 addi r3, r3, 12 li r12, n rlwinm r12, r12, 2, 0, 31-2 lwz r11, 0x4(r3) lwzx r11, r12, r11 lwz r3, 0(r3) lwz r2, 4(r11) lwz r11, 0(r11) mtctr r11 li r12, n rlwinm r12, r12, 2, 0, 31-2 lwz r11, offsetof_apfn(r3) lwzx r11, r12, r11 lwz r3, offsetof_pvObject(r3) lwz r2, 4(r11) lwz r11, 0(r11) mtctr r11
OSはWindows XP HomeのSP3です。 一般ユーザ(usersグループ)でshutdownコマンドを バッチによる自動実行をしたいのですが、 OSの仕様で管理者ユーザ(administratorsグループ)からしか実行 できません。 runasコマンドで、管理者ユーザで実行可能なようですが、 必ずパスワードを入力しなければならないようです。 ※XP Homeの場合はrunasコマンドのオプションによるパス ワード登録?も出来ないみたいです。 パスワード入力なしで、 一般ユーザからshutdownコマンドをバッチで実行する方法はありま すか?
case PowerActionNone: uiActionId = IDS_NOACTION; break; case PowerActionSleep: uiActionId = IDS_STANDBY; break; case PowerActionHibernate: uiActionId = IDS_HIBERNATE; break; case PowerActionShutdown: case PowerActionShutdownReset: case PowerActionShutdownOff: uiActionId = IDS_POWEROFF; break;
GlobalPowerPolicy.user.PowerButtonAc.Action = PowerActionNone; GlobalPowerPolicy.user.PowerButtonDc.Action = PowerActionNone; GlobalPowerPolicy.user.SleepButtonAc.Action = PowerActionNone; GlobalPowerPolicy.user.SleepButtonDc.Action = PowerActionNone; GlobalPowerPolicy.user.LidCloseAc.Action = PowerActionNone; GlobalPowerPolicy.user.LidCloseDc.Action = PowerActionNone; GlobalPowerPolicy.user.GlobalFlags = (ULONG) 0;
bat起動時に、Shiftキーが押されていない場合はA.exe 押されている場合はB.exeを実行したいのですが、 キー押下状態の取得がうまくいきません。 @echo off ←ここでShiftキー押下状態の取得したいです。 IF ERRORLEVEL 1 GOTO SHIFT_KEY START "" "D:\My Documents\A.exe" GOTO END :SHIFT_KEY START "" "D:\My Documents\B.exe" :END ご存知の方教えてください。
>>367 > キー押下状態の取得がうまくいきません。
何をやってうまく行かないのかを、まず書いてくれ。
OSその他の環境情報もだ。
本当は「キー押下状態の取得方法が分かりません」じゃないのか?
わからないやつは黙ってろ
標準のコマンドのみでは無理 DOS用だとbatuyとかあったけどWin用はしらん
一から勉強して出直して来い
三くらいからで勘弁してください
.NET Framework 2.0がインストールされてるなら 以下をCheckShiftKey.jsのような名前を付けて保存し、 コマンドプロンプトで %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\jsc.exe CheckShiftKey.js を実行してCheckShiftKey.exeを作ればよい。 // CheckShiftKey.js import Accessibility; import System; import System.Drawing; import System.Windows.Forms; if (Control.ModifierKeys & Keys.Shift) Environment.Exit(1);
>>374 import Accessibility;
import System.Drawing;
import System.Windows.Forms;
import System.Diagnostics;
if (Control.ModifierKeys & Keys.Shift) {
Process.Start("D:\\My Documents\\A.exe");
} else {
Process.Start("D:\\My Documents\\B.exe");
}
うまく出来ました。ありがとうございました。スレ違い失礼しました。
>>370 標準のコマンドのみでは無理
そんなことはなかろう
どうやるの?
すまん勘違いだった
せっかく解決済みなんだからほっとこーよ
すまん余計なお世話だった
質問してもよろしかったでしょうか? バッチで標準入力がリダイレトされているか判定できましたでしょうか?
はい
foo.bat | bar.bar > baz.txt で foo, barが> baz.txtされてるかどうかを検出、分岐するってことなら無理だろ。
>標準出力の話じゃないだろ。
foo.bat | bar.bar > baz.txt は知らんが foo.bat > baz.txt や foo.bat | bar.bat なら可能だろ。
>質問してもよろしかったでしょうか? 過去に遡って質問するわけじゃないのだから、過去について聞くことは無意味だと思うのだが。
過去から現在に渡ってよろしいことになっていたかどうかを聞いているので 問題なかろう。
>質問してもよろしかったでしょうか? という質問をした時点で、その質問は過去の事象で、その可否を聞いているのだろう
うざ
メモ帳(memo.exe)でテキストファイルを開くコマンドを書いたのだが、 バッチを実行するとメモ帳は開くがプロンプトが閉じない。 メモ帳を開いた時点でプロンプトを閉じるにはどうすればよい? 以下バッチの内容 ---------------------------------------- C:\Program 〜省略〜 \memo.exe test.txt EXIT ----------------------------------------
のだが、 またお前か
start
うざ
>>393 start バッチ
とやってみたのだが、閉じない。
test1 test2 test3 test4 という文字の入ったtest.txtがあるとします。 バッチファイルからピンポイントで二行目(test2)を引き出して変数とおくにはどうしたらよいでしょうか? for /f "skip=1" %%a in (test.txt) do set hensuu=%%a を使っても、 hensuu=test2 hensuu=test3 hensuu=test4 となってしまい結局変数はtest4になってしまいます。 どなたか教えてください。
setlocal enableextensions enabledelayedexpansion set hensuu= for /f "skip=1" %%a in (test.txt) do if "!hensuu!"=="" set hensuu=%%a
>>398 ありがとうございます!できました!
enableextensionsでコマンド拡張機能を有効にしたからできるようになったってことですか?
コマンド追ってググったりしてもこの文でなぜできるのか理解できないです
enabledelayedexpansionで遅延展開を有効にしたから forの中でsetした変数(hensuu)が参照できるようになっている。 遅延展開が無効だと if "%hensuu%"=="" の部分がfor実行段階で if ""=="" になって常に真ということになる。
>>400 遅延展開を有効にすることでhensuu=test2にその時点でなるから、
if "%hensuu%"=="" には引っかからずにその時点でforを終了させられるという事ですね。
遅延展開についてよく理解できました。
わかりやすいレスありがとうございます。
forが終了するわけじゃない。 hensuu=test2となった以降はifが偽になるため何も実行されずにループする。 test.txtの残りが凄く長ければそれだけ終了時間は伸びる
>>402 てことは
test3は偽、よって実行なし
test4は偽、よって実行なし
・
・
・
って感じに最後の行になるまでされるわけですか。
だとしたら500行のtest.txtだとこれが500行分されるんですね・・・
やっと完全に理解できました。ありがとうございます
そんな無駄なことせんでも
for /f "skip=1" %%a in (test.txt) do set hensuu=%%a&goto x :x
遅延展開使わんでも set hensuu= for /f "skip=1" %%a in (test.txt) do if not defined hensuu set hensuu=%%a
if 条件A or 条件B ( 処理1 ) else ( 処理2 ) ここで「条件A or 条件B」と言う構文はバッチファイルでは使えないんでしたっけ?
if/?
set or= if 条件A set or=true if 条件B set or=true if defined or ( 処理1 ) else ( 処理2 )
more|notepad /dev/stdin みたいなことはできないのですか?
echoで2段階にファイル書き出しをしたいのですが、うまくできません。 echo echo start "" コマンド.bat "引数" >B.bat >>A.bat 上記コマンドを実行して、まずA.batに echo start "" コマンド.bat "引数" >B.bat を書き出し、その作成したA.batを実行しB.batに start "" コマンド.bat "引数" ができるようにしたいのですが、実際には最初のコマンドを実行したところでA.batに echo start "" コマンド.bat "引数" のように、 >B.batが抜けた状態で作成されます。 何かいい方法は無いでしょうか。ご教示お願いいたします。
こんな感じか? echo echo start "" コマンド.bat "引数" ^>B.bat >A.bat
>>413 当方412ではありませんが、感動しました。
^>を使えばそういう事ができるんですね
差し支えなければ、^のしくみを教えていただけないでしょうか?
(^^)
^^は^をエスケープしてるので echo (^^) は (^) となる
418 :
412 :2009/11/18(水) 20:00:18
>>413 レス遅くなって申し訳ないです。ありがとうございました!
ばっちり希望どおりの動作をしてくれるようになりました!
>>416 >>417 仕組みがよくわかってなかったので勉強になりました。
みなさんどうもありがとうございました。
bash とかでいうところの``で囲んだ時のような、コマンドの出力結果をコマンドラインオプションに回す文法はありませんか?
for /f "usebackq" %I in (`dir /b`) do echo %I
usebackqはコマンド中に「'」を使う必要がある時に「'」の代わりに「`」を使うってオプションだろ? for /f %i in ('dir /b') do echo %i でいいのに何故わざわざusebackq付けんの?
好みだろ どーでもいー
425 :
423 :2009/11/21(土) 16:20:50
>>424 そう、好み
てか昔ハマッたことがあるから、俺は付ける派
外部プログラムを起動させるコマンドを実行すると そのアプリが終了するまでbatへ制御が戻らないのですが それを回避することは可能ですか?
startコマンドを使う
batファイルを分けることなく処理の優先順位を変更する方法があれば教えてください。
startコマンドを使う
430 :
428 :2009/11/24(火) 19:10:35
>>429 start /b /low :exec ではうまくいきませんでした。
どのように記述すればいいのでしょうか?
ウィンドウ開かないだけで、別プロセスのcmd.exeが立ち上がる…んだと思う。
>>431 誰が書いたか知らんが、阿呆が意味も分らず、最初のオプション使って、無理矢理、使用例を作っただけなんだろ
>>430 goto %1
start /low "" %0 :exec
そういやstartって start file はokで start "file" はngな時があるけどどういう理屈なんだろうか
理屈って言う程のことはないよ start/?見りゃ自明だろ?
そんなこと言っても難しかろ startにしとけ
data.dat というファイルがあったとして、これを一日に一回 data1129.datみたいに日時をつけてバックアップとして保存していけるようなバッチファイル 作れる方いましたら教えてください スタートアップに登録するとして、同日に一回でも度ってあったらコピーしないという仕様で
if not exist data%date:/=%.dat copy /b data.dat data%date:/=%.dat
プロンプト文字にerrorlevel出すにはpromptコマンドにどう書けばよい?
これは、結局バッチスクリプトとは関係ないんですけど、copyコマンドでオプションに /A(テキストモード)を指定しても、BOMありUTF-8のテキストファイルを結合すると ファイルとファイルの間にBOMが残るんです。 現在はWinXPのコマンドプロンプトでしか試せないんですが、VistaやWin7なら、ちゃん とBOMを外してくれますか?
Vistaでやってみたが、入ってるね /Aは改行コードしか見ないだろうから仕方がないかも
あ、改行とEOFだったかな
/A ASCII テキスト ファイルとして扱います。 UTF-8じゃないのに何言ってんだか
/Aが改行をどうするって?
COPY /8
バッチスクリプトならできるが、関係ないな
449 :
442 :2009/12/03(木) 18:30:00
>>443 Vistaでも駄目ですか、どなたかWin7の状況を教えて下さい。
逆に7でこの挙動が変わってたらおかしいでしょう
別におかしくないが?
chcp 65001
BOM削除してからcopyすれば?
ところで^Z削除するのはどうすれば?
ぐぐれ まあ変えても解決にはならんが
作れ setconsolefont() setcurrentconsolefontex()
代替コマンドシェルにnyacusなんてのがあるんだな。 cmdと比べると構文が結構まともだ。 PowerShellより圧倒的に軽いしちょっと覚えてみる気になった。
nyacus落ちない?数年前に使ったけど、それでやめた。
今のところ落ちてないよ。まだ大した使い方してないけど。 最終更新日が先月でまだまだメンテが続いてるね。
CMD.exeのfor文は頑張りすぎ
runasの/trustlevelってどういうときに使うの?
for /F %%a in (filelist.txt) do move "%%a" %dir% filelist.txtにファイルの一覧をリストアップしてそのファイルをすべて特定のフォルダへ移動したいです ですがファイル名に半角スペースが含まれていると移動されずにスルーされてしまいます 困ってしまいます お願いします
>>439 >>440 これの改良版で1週間分のみバックアップを残す仕様に出来る方おりませんか?
ファイルが7個以上あった場合、古いものから消していくようになると思うんですが
>>464 for /f "skip=6 delims=" %%i in ('dir /b/o-d data*.dat') do del %%i
これで新しいものから順に6個を除いたファイルは全部消える
カレントディレクトリを取得するのに for %i in (.) do set cdir=%~dpnxi とかやってるんですが、もっとスマートな方法はないですしょうか?
%CD%とかじゃ駄目だっけ?
フルパスをゲットするなら%cd%でいい c:\a\b\c\d\thisdir のthisdirをゲットするなら %cd:\=&set cdir=% echo %cdir% とか。
set cdir=.
set cdir=. echo %cdir% . ダメじゃんw
set cdir=%cd% echo %cdir%
%CD%なんてあったんですね。ありがとうございます。 カレントディレクトリがセットされた環境変数は ありそうだと思って set<enter>して探したのですが、これにはでないみたいです。 「特殊な環境変数」でググると%CD%以外にもいろいろ知ることができました。
set/?
カレントディレクトリはドライブごとにある echo %=c:% echo %=d:%
set, で=*環境変数も表示
2009年も終わろうとしてるのに今更cmdのtipsなんて何の意味がある。 PowerShellに乗り換えようぜ。
=::=::\ は何?
>>479 PowerShellがNTに載ったらね
483 :
デフォルトの名無しさん :2009/12/21(月) 15:23:45
ipアドレスの3ブロック目で判断して、 レジストリを修正するバッチファイルが作りたいのです。 ipconfigしても情報が多すぎるし、 ドット2つの後ってどうしたらいいんでしょう…。 どなたかご教授願います。
for /f "delims=. tokens=3" %I in ("1.2.3.4") do echo %I
485 :
sage :2009/12/21(月) 16:36:18
>>484 素晴らしすぎます!!!
というか私の知識不足…頑張り不足…でしょうか。
ありがとうございました!
486 :
483 :2009/12/21(月) 19:26:24
お陰様でここまできました。 for /f "tokens=14 delims=: " %%I in ('ipconfig ^| find "IP Address"') do set IP=%%I for /f "tokens=3 delims=." %%I in ("%IP%") do echo %%I echo %IP% ただ、スマートじゃないというかなんというか…。 こんなもんでしょうかね。
tokens=14 ってなんじゃそら。 skip=n でn行飛ばせるって知ってるよな?
出たか、知ったかぶり。お手並み拝見
横からだけど俺的にはアリだな。 tokens=14 を数える事は二度と無いとしても、将来コピペで使い回した時、 このスレでのやりとりを良い思い出として生暖かく思い出せるw "tokens=2 delims=:" だったら何も心に響かない。
OSにもれなくついてくるおまけの機能に多くを求めてはいけない。 メモ帳やペイントに不満を感じるなら勝手に別のアプリをお使いくださいというのがMSの基本姿勢。 不便だろうが欠陥があろうが知ったことではない。
delimsを.だけにすれば1行で書けるだろ? for /f "tokens=?? delims=." %%I in ('ipconfig ^| find "IP Address"') do echo %%I ??は自分で数えろ
skipがどうしたって?
どんぐりの背比べ
494 :
483 :2009/12/22(火) 18:47:08
>>491 ありがとうございました。
for /f "tokens=15 delims=." %%I in ('ipconfig ^| find "IP Address"') do echo %%I
でバッチリ取得出来ました。
これが一番スマートですね。助かりました!
バッチごときでスマートって しまむらで洋服買って自慢してるようなもんか
すっぱい葡萄
たぶん for /f "tokens=15 delims=." %%I in ('ipconfig') do echo %%I でもいける
どんぐりの背比べ
すっぱい葡萄
skipがどうしたって?
フォルダを五十音で分配したいのですが、バッチファイルでできるんでしょうか? 1)具体的にはデジカメで写真を撮影した事を想定してください。 D:\デジカメ写真データ\001.jpg D:\デジカメ写真データ\002.jpg ・ ・ D:\デジカメ写真データ\009.jpg D:\デジカメ写真データ\010.jpg 2)それを撮影場所ごとに整理します。(ここまでは人間の手でやります。) D:\デジカメ写真データ\きんかくじ(金閣寺)\001.jpg D:\デジカメ写真データ\きんかくじ(金閣寺)\002.jpg D:\デジカメ写真データ\きよみずでら(清水寺)\003.jpg D:\デジカメ写真データ\きよみずでら(清水寺)\004.jpg D:\デジカメ写真データ\きよみずでら(清水寺)\005.jpg D:\デジカメ写真データ\とうだいじ(東大寺)\006.jpg D:\デジカメ写真データ\ほうりゅじ(法隆寺)\007.jpg D:\デジカメ写真データ\ほうりゅじ(法隆寺)\008.jpg D:\デジカメ写真データ\ほうりゅじ(法隆寺)\009.jpg D:\デジカメ写真データ\ほうりゅじ(法隆寺)\010.jpg 3)ここでバッチファイルをくりっくすると D:\読み順フォルダ\か行\きんかくじ(金閣寺)\001.jpg D:\読み順フォルダ\か行\きんかくじ(金閣寺)\002.jpg D:\読み順フォルダ\か行\きよみずでら(清水寺)\003.jpg D:\読み順フォルダ\か行\きよみずでら(清水寺)\004.jpg D:\読み順フォルダ\か行\きよみずでら(清水寺)\005.jpg D:\読み順フォルダ\た行\とうだいじ(東大寺)\006.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\007.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\008.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\009.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\010.jpg とやりたいです。
D:\読み順フォルダ\か行\きんかくじ(金閣寺)\002.jpg D:\読み順フォルダ\か行\きよみずでら(清水寺)\003.jpg D:\読み順フォルダ\か行\きよみずでら(清水寺)\004.jpg D:\読み順フォルダ\か行\きよみずでら(清水寺)\005.jpg D:\読み順フォルダ\た行\とうだいじ(東大寺)\006.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\007.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\008.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\009.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\010.jpg D:\読み順フォルダ\か行\きんかくじ(金閣寺)\002.jpg D:\読み順フォルダ\か行\きよみずでら(清水寺)\003.jpg D:\読み順フォルダ\か行\きよみずでら(清水寺)\004.jpg D:\読み順フォルダ\か行\きよみずでら(清水寺)\005.jpg D:\読み順フォルダ\た行\とうだいじ(東大寺)\006.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\007.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\008.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\009.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\010.jpg D:\読み順フォルダ\か行\きんかくじ(金閣寺)\002.jpg D:\読み順フォルダ\か行\きよみずでら(清水寺)\003.jpg D:\読み順フォルダ\か行\きよみずでら(清水寺)\004.jpg D:\読み順フォルダ\か行\きよみずでら(清水寺)\005.jpg D:\読み順フォルダ\た行\とうだいじ(東大寺)\006.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\007.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\008.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\009.jpg D:\読み順フォルダ\は行\ほうりゅじ(法隆寺)\010.jpg
そこまで人の手でやれよ。
写真を分類するソフトなら腐るほどある。
505 :
デフォルトの名無しさん :2009/12/26(土) 12:57:24
#EXPAND BatchBasic Sub Main() Print("Hello World.") End Sub Sub Print(str) #NATIVE ECHO %str% End Sub
>>501 できるけど、その程度の代物だったら手作業と大して変わらん手間だろ。
管理者として実行されてるか?を判定するには?
511 :
デフォルトの名無しさん :2009/12/27(日) 10:14:31
管理者権限でしかアクセスできないフォルダにアクセスしてERRORLEVELで調べる
環境変数比較してみたら管理者権限の場合SESSIONNAMEが定義されてなかったので それで判別できる? (Vista x64で確認)
runas /trustlevel:制限しない rundll32 >nul echo %errorlevel% ちゃんと動くかは分からない
echo>file dir/q file
mklink a a echo %errorlevel%
net user %username% |findstr "*administrators" MS謹製のwhoamiに権限表示があった気がする
>>512 Vista 32bit x86でも確認したよー
rundll32 shell32,IsUserAnAdmin
521 :
デフォルトの名無しさん :2010/01/04(月) 20:39:55
つか誰かHttpEscapeってサブルーチンでも作って
524 :
522 :2010/01/04(月) 20:48:01
>>521 そっか、先に shift させた方がずっと美しいや。
参考になりましたです。
525 :
521 :2010/01/04(月) 21:06:29
526 :
522 :2010/01/04(月) 21:15:25
527 :
520 :2010/01/05(火) 00:22:01
>>521 , 522
お二人ともありがとうございました。
特に
>>525 が素晴しく、大変勉強になりました!!
そもそもぐぐるなら置換不要
そうなの?
質問なんですが、 例としてimg001、img002、img003というファイルがあったとして imgに当てはまるものを一気に削除するというスクリプトはあるでしょうか?
delete img*
534 :
530 :2010/01/11(月) 01:04:30
>>531-533 ありがとうございます。
delの場合は del img*でいけました。
修飾子 %~$PATH: の使い方について質問があります。 引数のファイルを %PATH% から検索し、エクスプローラーで開く バッチファイルを書いてみました。 ---- open.bat ---- set x=%~$PATH:1 if %x% == "" goto eof start "" explorer.exe /select,%x% ---- 使用法: open.bat explorer.exe / open.bat cmd.exe / open.bat msconfig.exe ここで、拡張子を .exe に決め打ちし、下記が動作するようにするには どうすれば良いでしょうか。 open.bat explorer / open.bat cmd / open.bat msconfig
下記のようにしてとりあえず希望の動作が出来るようになりました。 もう少し一般的な方法があれば教えて下さい。 ---- open_mod.bat ---- set x=%~$PATH:1 if not "%x%" == "" goto open for %%i in (%1.exe) do ( set x=%%~$PATH:i ) if not exist "%x%" exit :open start "" explorer.exe /select,%x% ----
for %%i in (%1.exe) do for %%j in (%~$PATH:1 %%~$PATH:i) do start "" explorer.exe /select,%%j
for /f %%i in ('where %1') do start "" explorer.exe /select,%%i
540 :
536 :2010/01/13(水) 00:43:51
>>538 , 539
どちらもすごいです!! たいへん勉強になりました。
>>539 これのうち、 'where %1' の部分が良く理解できません。
解説のあるウェブサイトを紹介してもらえないでしょうか。
>>542 やっと理解しました。where は OS のコマンドで、
また for /f in %%変数 (...) の括弧内ではコマンドが使えるのですね。
情報ありがとうございました。
%1 %2 ... は%* %2 ... をまとめて取り出せないかな バラして組み立てるしかないかな
shiftすりゃいいんじゃねーの
shift echo %*
これだと %1 も出てくるな…
shift /2
for /f "tokens=1*"でとれるんじゃねーの
shiftじゃできないんじゃねーの
for /f "tokens=1*"じゃできないんじゃねーの
for /f "tokens=1*" %%i in (%*) do echo %j
for /f "tokens=1*" %%i in ("%*") do echo %j だろ
この言語はforの使い方がおかしい
ワイルドカードを展開するコマンドにforという名前をつけてしまったのがそもそもの間違い。
for /f "tokens=1*" %i in ("1 2 3 4") do echo %j 2 3 4 ほれ
for /f "tokens=1*" %i in (""1 2" "3 4"") do echo %j 2" "3 4" ほれ
set a=%* echo !a:%1=!
@echo off copy /y E:\Program\TAB_Browser\DonutRAPT\Default.dfg "E:\Back_Up\Donut_RAPT_Default" @echo exit 今使ってるバッチファイル(バックアップファイル作成)をまんま↑に載せました。 別段支障は無いのですが、↑だと、1ファイルのバックアップしか出来ませんので、 万一、空ファイルが上書きされてしまった場合、痛いです。 (上記のバッチはドーナツ派は何となくピンと来てくれると思いますが) そこで、そのリスクを減らす為に、例えば、バッチ処理する度に、ランダムに、例えば・・ Default1.dfg、Default2.dfg、Default3.dfg のいずれかのファイル名でE:\Back_Up\Donut_RAPT_Defaultフォルダにバックアップをするには どのようにすれば宜しいでしょうか?
ランダムの意味わかってないだろ
561 :
559 :2010/01/19(火) 11:52:46
1〜3までの数字をアットランダムに付けたいのですが・・。 Default1.dfgというファイル名での保存が、複数回続いても構いません。 (きっちり、1→2→3という順番で、バッチ処理する度にファイル名が変わってくれなくて構わないです)
set /a random=%random%%%3+1 copy /y E:\Program\TAB_Browser\DonutRAPT\Default.dfg "E:\Back_Up\Default%random%.dfg"
563 :
559 :2010/01/19(火) 15:29:47
>>562 ありがとうございます!
コピー先は直しましたが、まさに目的は叶いました。
本当、感謝です!
サイクリック版作りたかったら作ってみ
>>560 >>559 の例の場合は3本のくじからの無作為抽出ってことだろ?
ランダムって表現で間違っちゃいない
っつーか、
>>562 が物語ってるじゃん↓
> set /a random=%random%%%3+1
>>567 560は562が書かれる前にレスの内容がわかるエスパーなんですね。
別に560の前の時点で、環境変数(%random%)を使えば良いのは判る訳で そこへ560の質問の意味が解からん
iPod nano を購入しようと思っているのですが、nano のランダム再生について質問です。 現在使っている他メーカーのMP3プレイヤーのランダム再生はどうやら、 再生リストの中からランダムで選び出した曲を決まった順番で再生 しているらしいのです。 例えばフォルダの中にA,B,C,D,Eの5曲がある場合にランダム再生を実行すると、 自動的にA,C,Eを選び出し(ここは流石にランダムで選んでるようです)、 以降、A,C,E,A,C,E,...のように、同じ曲ばかりを繰り返します。 実際に少ない曲数で試したことはないのですが、 同じフォルダの中でランダム再生をしているとそのうち、 次に再生される曲がわかるようになるのでたぶん間違いないです。 で、iPod nano のランダム再生はどのような再生方法なのかに興味があります。 理想は、 ・一度流した曲は、再生リスト内の曲を全て再生するまでは再生しない。 というものです。 フォルダの中にA,B,C,D,Eの5曲がある場合、 最初にBを再生した後は、次に来る曲はA,C,D,Eのいずれかで、 次にAが選択された場合は、次に来る曲はC,D,Eのいずれか、といった再生法を望んでいます。 iPod nano の購入の参考にしたいので、 詳しくわかる方いましたらよろしくお願いします。
iTunesとiPodの場合「ランダム」ではなく「シャッフル」と呼び、 その呼び名の通り曲順をシャッフルして再生する機能になります。 1曲ごとに再生する曲を対象全体からランダムに選ぶのではなく、 最初に対象全体をシャッフルして混ざったリストを作りそれを順番に再生する、 つまりトランプをシャッフルしてから一枚づつめくっていく様な感じになり、 あなたの希望の様に 「一度流した曲は、再生リスト内の曲を全て再生するまでは再生しない。」 と言う状態になります。 iTunes上でプレイリストを選択した状態で左下のシャッフルボタンを 押してみると、リスト内でシャッフルしてそれを順に再生している事が よく分かると思います。 (その際画面表示のソート順を通常なら左端にある曲順の数字欄に しておかないとシャッフルされる様子が見れません。曲の上部に 「名前」や「アーティスト」、「アルバム」等と書いてある左端の部分を クリックして三角が出ている状態です。その灰色のバー部分の どこをどうクリックするかで画面上の並び順が変わります。) この様に「シャッフルされたリストを作る」と言う機能なので、そのリスト内で 曲を前や後ろに飛ばしてもまた同じ部分では同じ順番で再生されます。 シャッフル機能を切って入れ直すか、最初の曲から前に飛ばしたり、 最後の曲を終わりまで再生したりすればシャッフルし直されます。 自分は普段まずシャッフル再生はしないので、今ちょっと試してみた 結果を見て回答したので、何か間違いがあるかもしれません。
回答ありがとうございます。 iTunesと同じなのであれば、 「再生回数」という項目もあるから、これでも確認できますね。 全部再生回数が0回の状態で再生し、 しばらくしてから再生回数を見て、飛びぬけて再生回数が少ない・多いものが無いことを確認する。 iTunesではメニューの方の「シャッフル」をよく利用します。 (下にシャッフルボタンがあるのは知らなかった…) 確かにこれは「リピートする」にチェックを入れておかないと、一巡したところで終了するので私の望んでいるタイプです。 まぁ重要なのは本当にiTunesとiPodの再生方式が同じなのか、というところですが、 同じじゃない方が不自然ですよね。 ありがとうございました。
iPodはiTunesを持ち歩く為に作られたものですから、基本はiTunesと同じだと思っていいと思いますよ。 コンピュータでのランダムは疑似乱数関数を利用しているのが一般的です。 疑似と頭に付くように実は完全なランダムではありません。与えるパラメーターが同じなら結果は全く同じになります。 実際の利用では、パラメーターに現在の時刻を1/100秒単位で指定します。 毎回再生ボタンをコンマ何秒の単位で全く同じく押すなんて事不可能ですから、同じ順番になることはなくランダムだと言って差し支えないでしょう。 > 同じ曲ばかりを繰り返します。 一般的にプログラム上では、順番は疑似乱数でランダムに決め、更に同じ曲が出ないようにする工夫もなされています。 実際にはランダムだけど、同じようなのを繰り返したり、次のが予想した通りだと思えるのは人間の特性が関係しています。 聞き流している時には好きな曲は印象が強く残りますが、そうではない曲は聴いても記憶に残りにくいものです。 ランダム再生していると、好きな曲ばかりが印象強く残って、前にも聴いたなとか、同じのばかりかかっているなと勘違いしてしまいます。 実際に聴いて確かめるのではなく、ランダム再生時の曲名を順番に書き出してみるとわかります。 聞き流していると錯覚してしまうし、時間もかかりますからね。 > A,C,E,A,C,E,...のように、同じ曲ばかりを繰り返します そういうプログラムがされている可能性も否定はできませんが、錯覚である可能性もあります。
回答ありがとうございます。 >> 同じ曲ばかりを繰り返します。 >一般的にプログラム上では、順番は疑似乱数でランダムに決め、更に同じ曲が出ないようにする工夫もなされています。 基本的にどのメーカーでも、ランダム再生のロジックは同じはずだ、という意味でしょうか。 そうだと良いのですが。 自分もほんの少しだけプログラミングには触ったことがあるので、 完全なランダム再生は難しくないのになんでこのMP3プレイヤーはこうなんだ!とか一人で憤慨しています。 >> A,C,E,A,C,E,...のように、同じ曲ばかりを繰り返します >そういうプログラムがされている可能性も否定はできませんが、錯覚である可能性もあります。 確かめたわけじゃないので、確かに錯覚の可能性もあります。 それなのに言い張ったところで説得力は無いのですが、 「また同じ曲だ」「これはさっき聞いたばっかりだ」とか、曲単位で耳に残るのではなく、 曲Aがフェードアウトした後に始まるイントロは曲Cだ、という「つながり」が耳に残るんですよ。 そこから「いくつかの同じ曲を同じ順番で再生している」と思っています。 あくまで「思っている」です。 本題?のiPod購入は、前向きになっています。
>>569 俺は
>>560 が書かれてた時点でスレ見てスルーして次見たのが今だけど、
560の時点じゃ同感だったよ。ちゃんと読んでればいずれかと書いてるから
言葉の使い方間違ってるわけではないとわかるけれど。
流し読みすると 1→2→3 と要求してるように見えて
ランダムって違うんじゃね?と思ったわな。
560=562だったとしても何も驚かんけどな。
>・一度流した曲は、再生リスト内の曲を全て再生するまでは再生しない。 自分の経験上ではそうなっていると思います。 もちろん、電源が完全にオフになるとどこまで再生していたかはリセットされますが、少なくとも連続して聞いている時に同じリスト内の曲が再度かかることはないですね。 iTunesで曲を追加したり並び順を替えてもiPod側の再生順は変わりますし、1度PCに接続すると同じプレイリストを先頭から再生しても順番が変わっているように思います。 ただし、iPodやiTunesの「ランダム」というのは「万遍なく」という意味ではなく「目茶苦茶」という意味ですので、同じアーチストの曲が連続したりすることもあれば、プレイリスト内の次の曲がそのまま再生されたりもします。文字通り「目茶苦茶」です。
ランダムフェチ?
トラウマ?
こんな感じで書かれてるテキストファイルがあるんだが。 ↓ 【現在】 C:\aaa/aaa/aaa.zip C:\aaa/bbb/zzz.zip C:\aaa/ccc/bbb.zip : : パスで見ると並び順は正しい。 けど、このテキストをファイル名でソートしたい。 【希望順】 C:\aaa/aaa/aaa.zip C:\aaa/ccc/bbb.zip C:\aaa/bbb/zzz.zip : : どうしてもバッチでやりたい変態です バッチ単体じゃ無理かね
以下のようなテキストファイルがあります。 C:/aaa/bbbb/cccccc.zip C:/bbb/ddd/aaaa.zip C:/ccc/eeeeee/bbb.zip パス的に見れば並び順は正しいですが、 これをファイル名順に並び替えたいのです。 C:/bbb/ddd/aaaa.zip C:/ccc/eeeeee/bbb.zip C:/aaa/bbbb/cccccc.zip どうしてもバッチ単体で処理したい変態です。 無理ですかね…
del tmp? for /f %%I in ('type hoge.txt') do echo %%~nxI?%%I>>tmp1 sort tmp1>tmp2 for /f "delims=? tokens=1*" %%I in ('type tmp2') do echo %%J>>tmp3 type tmp3
setlocal enableextensions enabledelayedexpansion del tmp.txt for /f "delims=" %%i in (lstb.txt) do ( echo %%~nxi %%i>>tmp.txt ) del out.txt for /f "tokens=1,* delims=:" %%i in ('sort tmp.txt') do ( set a=%%i echo !a:~-1!:%%j>>out.txt ) del tmp.txt
一時ファイル使わんとでけんのか?
>>581 %%~nxI ?%%I
とすればいいよ
もし<tab>が入力できれば
%%~nxI<tab>%%I
delims=<tab>
でもいいが難度が高いかな?
sort順だろ %%~nxI?%%I だと数字が?より前になる %%~nxI ?%%I なら数字が より後ろになる
そこまで考えてなかった
ぶっ
>>586 sortコマンドの並び替えはascii順じゃないので数字より前に?が来る。
タブもNG。ソート順ではスペースが前に来るんで、スペース入りのファイル名があると
おかしくなる。
多分sortでファイル名に出来ない文字で一番若いのは(0f)
区切り文字をこれにしたらとりあえずokみたい。
書き込んだら文字消えたorz コマンドプロンプト上ではアスタリスクみたいに見える文字(外字?)
^a 二重線の「 が最初 cscript hoge.vbs|sort for i=0 to 25 wscript.echo chr(i),i next for i=27 to 127 wscript.echo chr(i),i next
どっちもメモ帳で入力できない
コマンドプロンプト上からecho ^A>>hoge.bat とか。 ^AはCtrl+A
メモ帳で入力できるものを使えば?
ショートカット作ってアイコン変えると窓のアイコンが変わってくれるけど バッチファイル中から自力でアイコン変える方法ってないですか? フリーウェア等の外部ツールでもいいんですが。
ある
597 :
デフォルトの名無しさん :2010/01/31(日) 22:51:11
バッチファイル内で変数を保存?する方法について教えてください。 最初にパラメータとして渡されたファイル(例としてhogehoge.txtとします)を INPUTFILE=%~dpnx1 としたあとで、 RENコマンドでインプットファイルをリネームしています。 例としてhagehage.txtに変更したとします。次に CALL hogehoge.BAT "%INPUTFILE%" を呼び出して戻ってきた後で 再度もとの名前に戻そうと REN "hagehage.txt" "%INPUTFILE%" とすると、%INPUTFILE%がhogehoge.txtから途中でリネームしたhagehage.txtに変わってしまっています。 どうにかリネームしてもhogehoge.txtを保持する方法は無いでしょうか。 バッチファイルは中間言語方式だったことを思い出してorz状態です。
あほ
>>597 無理して日本語を使わなくてもいいですよ。
BATでおk
600 :
デフォルトの名無しさん :2010/01/31(日) 23:46:03
ほんじゃBATコピペ 最初に受け渡されたファイルネームはhogehoge.txtとします。 @ECHO ON SET INPUT=%~dpnx1 SET INPUTPATH=%~dp1 SET INPUTFILE=%~nx1 REN "%INPUT%" "hagehage.txt" REM ここでhagehage.txtにファイルネーム変更 CALL %EXECNAME% "c:\hagehage.txt" REN "%INPUTPATH%hagehage.txt" "%INPUTFILE%" REM ここでhogehoge.txtに戻そうとしてもINPUTFILEにhagehage.txtが入ってる。 最後の%INPUTFILE%の中身がいつの間にか新ファイル名に変わってるので困っております。
callした先で書き換えちゃってるんだろ call先でsetlocal 〜 endlocalしとけ
追記 call先のファイルをいじれないんだったらcallの呼び出しをsetlocal〜endlocalで囲む
そうかcallの前後をsetlocal 〜 endlocalしとけ
604 :
デフォルトの名無しさん :2010/02/01(月) 00:24:56
605 :
デフォルトの名無しさん :2010/02/01(月) 08:43:15
存在するファイルが無いと怒られるんだがなして? IF EXIST %INPUTPATH%work.tmp tmpdel IF EXIST %INPUTPATH%work.temp tempdel ECHO %INPUTPATH%work.tmp %INPUTPATH%work.temp echo そんなファイル無いんじゃゴルァ これも試したけど駄目だった。 ファイルは絶対に存在する。 IF EXIST %INPUTPATH%work.tmp goto tmpdel IF EXIST "%INPUTPATH%work.tmp" tmpdel IF EXIST "%INPUTPATH%work.tmp" goto tmpdel
%INPUTPATH% が \ で終わっていないに 1000ガバス。 とりあえず IF EXIST "%INPUTPATH%\work.tmp" goto tmpdel じゃないか?
606で終わってるけど質問する前に echo onするなり echo IF EXIST %INPUTPATH%work.tmp goto tmpdelするなりして 何をチェックしようとしてるのか確認しろ
>>608 work.tmp が wark.tmp とか work,tmp なのが原因でファイルが存在しないに 1200カパズ。
for の中で遅延展開してない、に 1500ガバス。
そもそも 607 のアドバイスのように echo の結果はどうなのよ?
まさか、表示が流れて読めません、とかいう訳じゃないんでしょ?
ここに書いた例と実際のバッチが全く別物とか。
同じって言葉じゃなくて具体例を出せよw 実際に使ってる内容晒したらエラー出て当たり前って内容かもしれないだろ。 おまえさんがその当たり前に気付いてないだけで。
そもそもバッチファイル理解できてる? よければ問題が起こる最小限のコード全体を貼ってくれ
delするのに存在確認は不要だろあほか
カレントディレクトリから一つ下のサブディレクトリ名を取得する。 それを引数としてあるバッチに渡す。 以上を一つ下のサブディレクトリ全てについて実行するバッチって作れますか? WSHの方が良いですか?
617 :
デフォルトの名無しさん :2010/02/01(月) 22:41:36
>>613 試しに
ECHO "%INPUTPATH%hogehoge.txt"
としたら
C:\hogehoge.txt
と¥付きで表示される。
ありぃ? 分かった。 直前で作ったファイルが書ききれていなかったっぽい。 TIMEOUT1秒入れたらEXISTで見えるようになった。
>>616 for /d %%I in (*) do (
echo call exec.bat %%I
)
>>619 すげぇ!こういとも簡単にできるとは…。
ありがとうございます。
621 :
デフォルトの名無しさん :2010/02/02(火) 01:44:36
すまん。最後にもう一つだけ教えてください。 SET INPUT=%~dpnx1 ECHO %INPUT% pause これだけのバッチファイルを作って、このファイルに適当なファイルをD&Dしたら ファイルネームがフルパスで表示されると思う。 でも、どこでもいいから適当なフォルダに長江 6380.txtってファイルを作って さっきのバッチファイルにD&Dしてみてくれ。 長江で切れてしまうと思う。 これを回避するにはどうしたらいい?
切れてないよ
長江は長過ぎる 黄河にしとけ
624 :
デフォルトの名無しさん :2010/02/02(火) 08:41:12
バッチファイルは全角半角スペース混じりのファイル名を正しく扱える(必要な時にちゃんと""で囲めば)。 そのコードで問題が出るなら明らかに呼び出し側の問題。
>>625 試しにecho "%INPUT%"
をしても同じ
>>621 普通なら切れない。
切れるとしたらbatファイルの関連付けでドロップハンドラが壊れているんだろう。
バッチファイルにD&Dなんてするなよ 素直にコマンドプロンプトで打てばいいじゃん
どこでもいいから適当なフォルダに長江&shutdown 6380.txtってファイルを作って さっきのバッチファイルにD&Dしてみてくれ。
バッチファイルにD&Dするかぎり無理なのら。
ドロップハンドラ作ればええのら。
Drop on Scriptのドロップハンドラは?
637 :
デフォルトの名無しさん :2010/02/05(金) 14:35:40
累乗計算バッチだるす。
2の3乗 3の3乗
初歩的な質問ですみません。とてつもなく初心者です。 kaigi_20100205.txt kaigi20100206,txt 20100207kaigi.txt のようなファイルをrenでリネームさせて、 会議_20100205.txt 会議_20100206.txt 会議_20100207.txt のように統一させたいと思い、 色々と見よう見真似で rename.datファイルに ren kaigi*.txt 会議_*.txt ren *kaigi.txt 会議_*.txt といれてみたのですが、 会議_00207kaigi.txt 会議_gi20100206.txt 会議_gi_20100205.txt という状態になってしまいました。 これは自分のワイルドカードの使い方が根本的に間違っているのでしょうか? どなたかご教授お願いいたします。
ワイルドカードはファイル名を保持してない
「kaigi_*.txt」にマッチしたファイル名を「会議_*.txt」がマッチするように書き換えるのであって、 「会議_(kaigi_*.txtの*に相当する部分文字列).txt」というようにはならない。 そしてdosには「*に相当する部分文字列」を取得する機能はないので、 setなどを利用して、自分で作ってやらなければならない。 例えばこんなふうに: @echo off setlocal set NAME1=%~n1 set NAME2=%NAME1:_=% if "%NAME1:~0,5%" == "kaigi" ( echo 会議_%NAME2:~5%.txt ) else if "%NAME1:~-5%" == "kaigi" ( echo 会議_%NAME2:~0,-5%.txt )
@echo off for %%i in (kaigi*.txt) do ( set NAME=%%i call ren %%i %%NAME:kaigi=会議_%% ) for %%i in (*kaigi.txt) do ( set NAME=%%i call ren %%i 会議_%%NAME:kaigi=%% )
setlocal enabledelayedexpansion for /f %%I in ('dir /b *kaigi*.txt') do @(set a=%%I set a=!a:kaigi=! set a=!a:_=! ren %%I 会議_!a!)
>640-643 みなさん、ありがとうございます! 試してみましたところ、ばっちり動作しました。 ただ、ばっちり動作しますがプログラムの挙動を自身がまだ理解できてない状態なので これらを元に色々調べてプログラムを練ってみたいと思います。
orz
自分の使ってるOSのヘルプならいつでも見れるはずだが、 ヘルプすら読まずに質問するやつが多すぎるという嫌味?
MSのヘルプは探すのが面倒
ヘルプより掲示板で聞いた方が早いし楽
WindowsXPのコンソールで、 unixでいうところのsmbclientを使うには、 どのようにしたらよいでしょう? smbはもともとWindowsのプロトコルで、GUIに統合されているため、 smbclientのコマンドラインプログラムというのがあるのかないのか、 よくわからないのですが、 パスワードつきの他のマシンに起動時に自動接続するのに、 ネットワークドライブに割り当てただけではだめだったので、 それならコンソールでコマンドを実行して接続するか、と考えました。 ご存じでしたらアドバイスをお願いします。
net
MSのヘルプは詳しいのと詳しくないのと差があるからな makecabとかまったくわからんしfsutilとか独自すぎて笑える cmdのヘルプもわかりにくい部類になるだろう 書いてあるのかないのかよくわからんことも多いし 掲示板のほうが楽しいとかはさすがにあれだがw
あのさあ... objShell.Run "コマンド1 | コマンド2 | sort" とかをスクリプトでするとしましょう。 そのとき、途中のコマンドが .vbs とか .wsf の//job:XXX として、 そのなかに Wscript.Sleep 100 があるとパイプラインが詰まる? ことないですか?
それ詰まるもなにもパイプラインにならんだろ?
えー...。 ごめーん コマンド1 とかは Cscript //nologo XXX.vbs で、 XXX.vbs や YYY.wsf //job:ZZZ 内部では Wscript.Echo とか Wscript.StdOut.WriteLine 使用 ではどうだろう。 あげたれ
コマンド1がパイプラインの機能を持ってるのか?という話だが? cmd /cならパイプラインの機能を持ってるが?
あああ、そのとおり objShell.Run "cmd.exe /c " & "コマンド1 | " & ... でした。 で、コマンド1にWscript.Sleep 100 があるとコマンド1で止まっちゃうような。 気がするのです
ないです
ないですね。はてな
教えてください。 set AAA=D:\WORK set FOLDER=%1 set INFNAME=%2 set OUTFNAME=%3 set INFPASS=%FOLDER%\%INFNAME% set OUTFPASS=%FOLDER%\%OUTFNAME% copy %INFPASS% %OUTFPASS% で、%1に「AAA」を渡した場合に、FOLDERに%AAA%が設定され、 結果的に%FOLDER% が D:\WORK となる事は可能ですか?
>>663 こんな感じかな?
× set FOLDER=%1
○ call set FOLDER=%%%1%%
質問させてください。 パソコンちょっと詳しいからということで、会社の ネットワーク管理者にされてしまいました。 運の悪いことに、次年度からパソコンの更新が行われ、 Windows XP→Windows 7にOSも変更になりました。 前任の人がWindows XP環境でログインしたときに、 仕事でよく使うフォルダへのショートカットを ログイン時のバッチファイルで表示させていたのですが、 Windows 7では動作しないみたいなのですorz Windows 7でバッチファイルでファイルのショートカットを デスクトップに表示させるにはどうしたらいいでしょうか? いろいろググッてみましたが、それ用のフリーソフトが あるみたいなのですが、Windows 7では動きそうにないんです...
回答させてください >ログイン時のバッチファイルで表示させていたのですが、 >Windows 7では動作しないみたいなのですorz 動作するかしないかはっきりさせろ! 実行してみりゃどういうエラーが出てるかわかるだろ?
>>668 前任の人の設定のままでXPのマシンをログインすると
ちゃんとショートカットでるのですが、7だと、
エラーメッセージも出ず、スルー状態なんです。
(つまり何もおきない)
他のソフトインストールして試して見ます。
このスレの人で、ショートカット表示
させるコマンドライン知っている人い
ましたら、ご教示ください。
おながいしまつ。
ドメインへのログオンスクリプトならポリシーの適用してない/できてないとか。 そもそもhomeでドメインに参加できないとか。 ショートカット表示の意味がわからない。 エクスプローラ上で表示させる事なのか、リモート資源の接続先をポップアップさせる事なのか。 とにかく5W1Hで明確に書いてくれないと全くわかんね。
>>670 多分668さんも同一人物
とても親切にしていただいてありがとうございます。
前の設定者はドメインに参加する時点で、windows 2003 server
のActive Direcrory処理の際に、ログオンするときのバッチファイルに
デスクトップにショートカットを表示させるようにしてたみたいです。
というのも、管理者以外はディレクトリ構造も知らないので、
それを全員に分からせてセキュリティレベルを下げるより、
自動的にショートカットを表示してクリックさせるという形に
したようです。確かにパスを追っていけばそのファイルに到達しますが、
わざとそうさせないみたいです。(その方針には私も賛成します)
長文すみません。
で、デスクトップへ通常使うけど、 パスを探られたくないフォルダへの ショートカットを入れたいということです。 パソコンしかさわったことないので、 こういう具体的かつ実践的なご指摘はとても 勉強になります。ありがとうございます。
ポリシー設定のなかにもデスクトップの表示に関する項目があった気がする このスレ的にはログオンスクリプトの中でNET USEで接続しているんだろうな位・・・もしかするとSUBST?
ありがとうございます。 明日は日曜ですが、隠れ出社して試してみます。
バッチからショートカットを作るのはむずかしかろ インターネットショートカットならかんたん ( echo;[InternetShortcut] echo;URL=\\server\sharename\folder ) > desktop\hoge.url
どういう風に作ってたかしらんけど、フォルダ構造が変わったからじゃないの? 大抵は新しいパスへリダイレクトしてくれるけど、AllUsers→Publicの部分はうまくいかない模様 XP以前:C:\Documents and Settings\All Users\Desktop Vista以降:C:\Users\Public\Desktop
>>676 さすがに会社のサーバ?でユーサフォルダ以降のフォルダ使わないだろw
まさか、な・・・?
>>675-677 ヒントありがとうございます。
まさかもありえるのでちょっとやってみます。
規模にもよるけど引継ぎ書とか運用手順書とか必要でしょ。 次の人に渡すにしても。 前任者に要求しとかないとまずいね。
「ログオンするときのバッチファイル」を、クライアントのWindows7マシン上にコピーして コマンドラインから実行してみたらエラー内容が分かるんじゃない?
みなさんありがとうございます。 バッチファイルが別のバッチファイル呼び出すような 入れ子構造になっていることが判明し、解析に手間取ってます というか、そもそもDOSのコマンド知らないorz 一から調べていますので少々時間くださいまし。
みなさんヒントありがとうございました。
2ch落ちたので、その間にいろいろ調べて
見ました。問題が2点あって、一つが
>>676 さんのご指摘に近く、
Xp「デスクトップ」→7「Desktop」
Xp「NetHood」→7「AppData\Roaming\Microsoft\Windows\Network Shortcuts」
Xp「スタート メニュー\プログラム」→「Microsoft\Windows\Start Menu\Programs」
に書き換えるのと、
>>670 673 さんのご指摘に近く、
Xpだとアクセス権のないフォルダ内の実行ファイルも実行できていた
のが、7だとアクセス権がないフォルダのファイルはスルーされること
が問題で、それらを訂正したら何とか動いてガッツですた。
(3日かかりますた。)
ちなみに、それで0からDOSコマンド勉強始めたのですが、
前任者は、ショートカットをアクセスされてもいいフォルダにつくって
そのショートカット自体をファイルとしてコピーするということで
ショートカットの自動表示をしていました。
大変勉強になりました。また、機会がございましたら、
質問させていただければ幸いです。
(ここから後は管理者スレの内容になりそうなので、
純粋にバッチファイルに関する内容の時にまた来ます。)
ありがとうございました。
cmdでlinuxの mkfifo hoge 的なことってできますか?
普通のファイルで1 writer n readerができるが?
CreateNamedPipe()で作れば?
686 :
デフォルトの名無しさん :2010/03/07(日) 19:34:58
Jドライブの直下のlhacaフォルダの下にLhaca.exeという圧縮ファイルがあります それをつかってJドライブ直下にあるaaaフォルダを圧縮してデスクトップに出力させたいのですが どうもうまくいきません どこが悪いかを教えてください cd J:\lhaca Lhaca.exe temp.zip J:\aaa
もしカレントドライブがC:の場合はcdでJ:\lhacaを指定しても そのあと j: でカレントドライブを変更しないと相対でlhaca.exeを入力したら カレントドライブ(C:\)のカレントディレクトリでlhaca.exe探しちゃうけどそこは大丈夫? もしそれが問題なら j: cd J:\lhaca Lhaca.exe temp.zip J:\aaa にすべき。これで違ったらそれはLhaca.exeの問題かも
688 :
デフォルトの名無しさん :2010/03/07(日) 23:28:57
有り難うございます 既にカレントドライブはJになっています。 Lhacaは普通に手で実行すると普通に開くのですが Dosコマンドで開こうとするとどうしてもエラーになります
+Lhaca 0.76 を落として試してみたけど Windows7 x64で実行するとファイル名バグるな (Lhaca.exe temp.zip readme.txt だと「(」名の空フォルダができるだけ Lhaca.exe .\temp.zip .\readme.txt とすると圧縮はできるけど「(.zip」という名前になる) デラックス版(1.24)も試してみたが、こちらは空フォルダすら作れなかった そもそもマニュアルにコマンドライン引数について何の記述もないし、サポート外の機能のようだ 7-Zipとかコマンドラインに正式に対応してるアーカイバ使った方がいいんでない?
>>690 そうそう。俺もWindows7 x64 だが同じ状況。
Lhaca.exe temp.zip J:\aaa の temp.zipが問題だねえ
これを抜いて Lhaca.exe J:\aaa で圧縮するとaaa.zipで圧縮されるから
圧縮ファイルの名前=圧縮するファイルまたはフォルダ だね
そもそもzipで圧縮されずにlzhで圧縮されるようだ
もしJ:\aaaのフォルダをtemp.lzhにしたいなら
ren %2 %1
Lhaca.exe %1
ren %1 %2
上記のコマンドをLhaca.bat かなんかに保存してLhaca.exeと同じフォルダに置き、
Lhaca.bat temp aaa
と入力すればデスクトップにtemp.lzhが作成される。
問題点は解凍した時にtempというフォルダになってしまう事か。
圧縮ファイルをrenできればいいけどデスクトップに圧縮されるからOSの関係上、
XPだと デスクトップ vista/7 だと Desktop になって環境によってリネームできない。
結局は
>>690 が言っているように別のアーカイバ使った方が良いよってこと。
>>691 圧縮形式や作成先はLhaca自体の設定(レジストリ)に依存するようだよ
Lhacaはコマンドラインで使わないほうがいいな
694 :
693 :2010/03/08(月) 04:00:46
と思ったらレジストリじゃなくて "C:\Windows\Lhaca.ini" なんてのが勝手に作成されてた 行儀が悪すぎる!
>695をちょっと訂正。 macros.lzh → aaa.lzh いずれにせよ"%USERPROFILE%\デスクトップ\"を指定するのがポイント。 ただし「窓の手」などでデスクトップのフォルダを任意のフォルダに変えてる場合、この手段は使えない。
697 :
デフォルトの名無しさん :2010/03/08(月) 23:24:41
>>691 バッチというかコマンドラインでやっても問題ない
アーカイバってどんなのがあるの?
一見しただけじゃわからないからな
有名どころならWinRARとか7zipでもできるよ
コマンドラインならundll.exe使っとけ。統合アーカイバDLLならどれでもおk。
700 :
693 :2010/03/09(火) 01:48:24
圧縮できればいいのなら makecab という手もある
C:\Program Files\Windows Resource Kits\Tools\compress.exe /? Syntax: COMPRESS [-R] [-D] [-S] [ -Z | -ZX ] Source Destination COMPRESS -R [-D] [-S] [ -Z | -ZX ] Source [Destination] Description: Compresses one or more files. Parameter List: -R Rename compressed files. -D Update compressed files only if out of date. -S Suppress copyright information. -ZX LZX compression. This is default compression. -Z MS-ZIP compression. Source Source file specification. Wildcards may be used. Destination Destination file | path specification. Destination may be a directory. If Source is multiple files and -r is not specified, Destination must be a directory. Examples: COMPRESS temp.txt compressed.txt COMPRESS -R *.* COMPRESS -R *.exe *.dll compressed_dir
@echo off powershell syori.ps1
Parameter List: -R Rename compressed files. -D Update compressed files only if out of date. -S Suppress copyright information. -ZX LZX compression. This is default compression. -Z MS-ZIP compression. Source Source file specification. Wildcards may be
図解入門 よくわかる最新データ圧縮技術の基本と仕組み ―情報圧縮技術とアルゴリズムの基礎講座 How‐nual Visual Guide Book 圧縮アルゴリズム―符号化の原理とC言語による実装 C magazine
Windows Vistaのバッチファイルについて質問です。 EXEの起動でパラメータを渡す際スペースがあるものは"" で囲むと思っていたのですが test.exe "C:\Dir 1\" とすると最後の\が消えて C:\Dir 1" として受け取ってしまうようでした 試しにVCで__argvを確認してもそうなっているようでしたが どんな書式規則でこうなるんでしょうか?
そういやウチのWinXP(SP3)では以下のようにVBScriptファイルを起動すると、 ちゃんと"C:\Dir 1\"と受け取ってくれたよ。 確かWin95/98/Me/NT/2000でも同じ挙動だったはず。 test.vbs "C:\Dir 1\"
>>707 確認してみましたが、確かにVBSだときちんと受け取ってますね・・。
理由は気になりますが、書式として間違っていたわけではないと
わかっただけで大収穫です。
ありがとう。
>>706 test.exe "a b c d"の中に"を入れるときは、\"でエスケープするだよ
test.exe "a \"b c\" d"
>>709 おお!なるほど!エスケープを使えたとは知りませんでした。
すっきり解決しました。ありがとう。
exeによって解釈は違うから永久にすっきりしないよ。
某コマンドラインツールのリスト形式の標準出力を 某コマンド 某オプション | findstr /b /e /c:"hoge foo %fuga%" のような書き方で完全一致検索したいのですが、 リスト形式の標準出力がLF改行となっているらしく (パイプの代わりにリダイレクトして確認)、 findstrコマンドの/eオプションが期待通りに動作しません (/eオプションはCRLF改行しか認識しない?) /rオプションの正規表現モードで\nや\x0Aが使えればいいのですが、 findstrの正規表現は貧弱で使えず、$もLF改行にはマッチしないようです。 VBやVBScriptで使える「VBLF」のようなLF改行を示す定数か、 Chr(10)のような文字コード指定でLF改行を明示する手段は、 MS-DOSバッチファイルにはないのでしょうか? 環境はWinXP Pro SP3です。
某コマンド 某オプション | more | findstr /b /e /c:"hoge foo %fuga%"
/x
動画ファイルだけどシステム属性が付いてるファイルがあります。 ググったところ、コマンドプロンプトから「attrib ドライブ名:\ファイル名.拡張子 -s」で解除できることがわかりました。 いちいちコマンドプロンプトからやらないで、バッチファイルを作って、それを実行することで解除するようにするにはどういう記述を書けばいいのでしょう。
>715 @echo off attrib ドライブ名:\ファイル名.拡張子 -s
>>711 Windowsのコマンドで、きえる、\"以外の例を挙げてみろよ
"C:\Program Files\Internet Explorer\iexplore.exe" "
http://www.ya\ "hoo.com"
無理すんな
そんな便利なものがあったのか
NT標準でいいが 9xとかいらね
9xは__argv、NTはCommandLineToArgvW
環境変数のuserpartってなに?
syosinsya
cmd
729 :
712 :2010/03/21(日) 13:59:48
>>713 moreコマンドでは某コマンドの出力行が長くなった時に問題あるかと思い、
find -v ""にて標準出力を無条件にfindする方法にて対応しました。
ですが、LF改行の出力が別のコマンドでフィルタすることによって、
CRLF改行に変換できるというのが大変参考になり、どうもありがとうございました。
>>714 /xオプションなら/bと/eを併用しなくてもよかったのですね
ヘルプやオンラインマニュアルで印刷やプリントといったキーワードが使われていたため、
完全一致検索のことを指していると気づいていませんでした。
マイクロソフトの翻訳は微妙なことも多いので、英語版サイトもこれからは見るようにします。
どうもありがとうございました。
730 :
712 :2010/03/22(月) 08:36:22
引数%1がフォルダだった場合とファイルだった場合で 処理分岐するバッチファイルを作成したいのですが、 修飾子%~a1で取得できる属性には、ディレクトリとファイルを区別する 属性がなく、困っています。
731 :
730 :2010/03/22(月) 11:28:45
OSはWindows Server 2003です。 書き忘れていました.
あるけど?
733 :
730 :2010/03/22(月) 13:17:56
dirかcd
if exist dirname\con echo dir
cd foo && echo succ || echo fail
FOR /F "eol=-" IN ("%~a1") DO ECHO FOLDR FOR /F "eol=d" IN ("%~a1") DO ECHO FILE
OS:Windows2003 server,WindowsXP 複数のCSVファイル(yyyymmdd_hhmmss.csvのフォーマット) をmoreコマンドでひとつのcsvファイルにマージする際、 プライマリキーにおいて重複するレコードを最新のレコード以外 削除するほうほうってないですかね。 バッチ単体で。
ない
dir /ad /b "%~dp1" | findstr /x "%~nx1" && echo foruda
cd "c:\System Volume Information" && echo succ || echo fail
つcmd /c cd
バッチ内でwmic process get や wmic ntevent を使用して、結果をテキストファイルに出力しようとしています。 ここで、wmicの出力がUnicode、別のリダイレクト部分(START、ENDなどのコメント)がSJISで出力されてしまいます。 wmicの出力をSJIS(CR+LF)にする方法はありますでしょうか。
>別のリダイレクト部分(START、ENDなどのコメント)がSJISで出力されてしまいます。 これをunicodeで出せばよい
>>742 if existはどうやっても駄目だな
if exist "dir name\*" は?
オラも考えてみた。 if exist "%~1" ( dir /a:d "%~1" 1>nul 2>&1 if errorlevel 2 goto nazo if errorlevel 1 goto fileeee if errorlevel 0 goto dirrrrr ) else ( echo "%~1" が無いよ? goto naiyo ) 優雅さに欠けるし、= でダメだ... orz ふと思ったのは %1 を渡された時にたとえば aaa と aaa========== を見分けるにはどーすりゃいいんだ?
pushd %1&&popd echo %errorlevel%
>>752 >ふと思ったのは %1 を渡された時にたとえば aaa と aaa========== を見分けるにはどーすりゃいいんだ?
ヒント:findstr /x
>>754 findstr をしようにも、たとえば
echo %1
というバッチファイル test.bat で
test.bat aaa と test.bat aaa===== でどちらも aaa となって末尾の = が拾えない
のを「見分けるにはどーすりゃいいんだ?」と思ったんですが。
オレ何か勘違いしてる?
厳密にやりたきゃ別の言語使えよ。もう質問してる奴もいないし秋田。
別の言語使いたけりゃ他スレへ行けよ
厳密にやりたきゃ%~a1を使えばよいだけの話
あるソフトウェアのバージョン違いが3つほど入ってるんだけど デスクトップに同じ見た目のアイコンが3つあるからややこしくて。 バッチファイルをクリックすると上下ボタンでどのソフトを起動するか 選択できて、エンター押すと実行っていうのを作りたいんだけど 誰か作ってくんない? イメージ的にはウィンドウズをセーフモードで起動したときに 選択する画面がまずでてくるんだけどあんな感じ☆
アイコン変えればいいじゃん
デスクトップに3つあるアイコンそれぞれに 異なるショートカットキーを指定すればいいじゃん
763 :
760 :2010/03/28(日) 18:25:55
こんな感じのを作ってみたんだけど やっぱり上下のキーで選択するUIがいいなぁと思うので 誰か改造求む! @echo off echo アプリケーションを選択して下さい echo [1] : メモ帳 echo [2] : ペイント echo [3] : 電卓 set /p INPUT= if "%INPUT%"=="1" start notepad if "%INPUT%"=="2" start mspaint if "%INPUT%"=="3" start calc
Enterなしにキー入力を受け取る方法がないから無理
指定したファイルをホームページ(FTPで)にバッチファイルで送信することは可能でしょうか?
@echo off echo アプリケーションを選択して下さい echo [1] : メモ帳 echo [2] : ペイント echo [3] : 電卓 choice /c 123 if "%ERRORLEVEL%"=="1" start notepad if "%ERRORLEVEL%"=="2" start mspaint if "%ERRORLEVEL%"=="3" start calc
if 1==2 ( start notepad start mspaint start calc ) ↑
大昔はそういうメニューが普通にあったが、GUIで死滅したな あってもブート選択画面ぐらいか
1文字読み取って制御を返すツール作ればいろいろ用途が広がるよ。 2ストロークで26^2個のツール呼び出せるランチャ作ったけど軽くて便利。
powershell使えばカーソル選択メニューが作れるよ
>>765 できるよ
バッチファイルとまた一つftpコマンドを書いたテキストファイルが必要になる
>>771 遅レスすみません。
ありがとうございます。おかげでできました。
コマンドプロンプトに表示された文字を(txt等)に出力ってできますか?
無理
775 :
773 :2010/03/29(月) 22:54:06
すみません、自己解決しました。 test.bat > log.txt
>>775 それだと標準エラーがファイル出力できないよ
test.bat > log.txt 2<&1
質問です。 ファイル a.txt.bak ab.html.bal abc.exe.bak があるとすると 拡張子.bakだけ一括で名前変更できるでしょうか?
できないわけがない
ren *.bak *.hoge
それじゃ a.txt.baka ab.html.aho abc.exe.baka 拡張子.bakaだけ一括で名前変更できるでしょうか?
783 :
779 :2010/03/30(火) 14:02:57
すみません、質問の仕方が間違えていました。 bakの部分だけ消したいんです。 a.txt.bak→a.txt
ren *.bak *.
hogeよりはahoやbakaの方が好き おっと、kusoも使うなw
chinko manko unko shikko
788 :
デフォルトの名無しさん :2010/04/06(火) 00:27:29
すみません。テキストファイルの中身の特定行だけ抜き出す方法を教えてください。 test.txt中身 --------------- morning hello bye --------------- 上のようなファイルがあったとして、1行目のmorningや、3行目のbyeを 変数やファイルに出力する方法はないでしょうか。 外部コマンドは使えないWindowsXP/2003環境です。
for /?
>>788 find使って >baka.txtとかで出力
うまく使えば一つのバッチファイルで色んなバッチファイルを作成することができるから便利
791 :
デフォルトの名無しさん :2010/04/06(火) 07:40:04
findは外部コマンド
>>788 findstr /r "^morning$ ^bye$" > hoge.txt
料理できないと買ってきた惣菜をならべるぐらいのことでも自慢するんだよ それ外で買ってきたんだろとあきれられてても本人は満足
バッチファイルでテトリス作って
796 :
デフォルトの名無しさん :2010/04/06(火) 22:12:33
>>792 ありがとうございます。
説明が不足してたのですが、必ずしも1行目にmorningがあって、3行目にbyeがあるわけじゃない場合に
1行目、3行目を抽出って出来るんでしょうか。根本から違うやり方考えた方が良いですかね・・・。
797 :
792 :2010/04/06(火) 22:28:25
findstrコマンドは/cオプションを指定しない場合は、 二重引用符内で半角空白区切りで指定されたキーワードを OR検索できるんだけど、 やりたいのは、特定キーワードで抽出したいんじゃなくて、 特定の行番号を抜き出したいってこと?
下のようなのを作る場合変数iの引数は12個まで とかいう決まりがあるのでしょうか? for %%i in (%*) do xxxxx %%i pause このバッチファイルに引数となるファイルをドラッグ&ドロップしたら 「指定されたデバイス、パス、またはファイルにアクセスできません。 アクセス許可がない可能性があります。」 と言われます。ちなみに12個まではOKでした。
>>798 D&Dした複数ファイルのフルパス文字列の長さが限界に達したのでは?
その12ファイルをもっと浅い(フルパスの短い)階層に移動させれば、
13ファイル以上もいけるかと。
Win9x系かNT系かでも変わってくると思う。
800 :
799 :2010/04/06(火) 23:21:16
>>799 ,800
たぶん、ファイルの長さだと思います。
ありがとうございました。
たぶん? 結局どうでもよかったのか
803 :
792 :2010/04/06(火) 23:55:34
>>796 find /n /v "" test.txt|findstr /b /l "[1] [3]"
または
type test.txt|find /n /v ""|findstr /b /l "[1] [3]"
または
type test.txt|findstr /n /v ""|findstr /r "^1: ^3:"
Mac環境から書き込んでてテストしてないから間違ってるかも。
特に3つ目の「findstr /n /v ""」は入力ファイルの全行に行番号出力になってないかも。
>>801 >たぶん、ファイルの長さだと思います。
ファイルサイズは関係ないだろ
<test.txt ( set /p x= call echo %%x%% >1.txt set /p x= call echo %%x%% >2.txt set /p x= call echo %%x%% >3.txt )
806 :
spectre :2010/04/11(日) 18:40:33
アクティブな画面を「最新の情報に更新」にするバッチってありますかぁ? どなたかよろしくお願いします。
バッチでは不向きな気が… 簡単なものでよければ VBScript 辺りでどう? ' ## update.vbs ## Dim objWshShell ' WshShell オブジェクト Set objWshShell = WScript.CreateObject("WScript.Shell") If Err.Number = 0 Then objWshShell.SendKeys "{F5}" ' F5 を送信 Else WScript.Echo "エラー: " & Err.Description End If Set objWshShell = Nothing
しかしどうやって動かすんだ? 動いたときアクティブなウィンドウは?
想定の範囲外です(キリッ 適当なフリーソフト使え
ローカルでphpスクリプトを動かす際に一連の流れを バッチファイルでまとめてしまおうと思ったのですが cd "ディレクトリ1" httpd.exe cd "ディレクトリ2" C:\php\php.exe batchtest.php このようなバッチファイルを作ったところ httpd.exeを起動したところで止まってしまい、httpd.exeを終了させないと 次の行に行きませんでした。 どのようにすればすべての処理が行われるでしょうか?
cd "ディレクトリ1" httpd.exe taskkill /im httpd.exe cd "ディレクトリ2" C:\php\php.exe batchtest.php
start httpd.exe
>>813 素直な奴だな。
httpd.exeを終了させないとtaskkillが実行されないという二段オチなのに。
その行だけじゃわからないよ 環境変数に適切な値が入っているならちゃんと動くように見える echoの表示やエラーメッセージはどうなってんの? エスパー初級な解答 if "%xxx%" geq "%yyy%"のように""で括れば 環境変数が空の場合でも落ちる事はなくなるはず
817 :
815 :2010/04/13(火) 15:25:07
>816 if "%MP_MAX%" geq "%MP_NUM%" ( に変更しても落ちました。 直前の出力は if 1 geq 1 ( なので、両方に1が入っていることは確認済みなのですが・・・。 エラーは 「コマンドの構文が誤っています。」 です。
エラーの詳細が出るようにバッチの先頭におまじないを書いておく echo W 100 2 0 200 | debug
( ) の中で SET を使うのはやめといた方がいいよ GOTO 文などに置き換えれば動くはず
821 :
815 :2010/04/13(火) 20:06:10
>>819 ,820
()の中を関数化したら正常に動作しました。
ありがとうございました。
822 :
デフォルトの名無しさん :2010/04/13(火) 20:43:32
すべてのウィンドウを「最新の情報に更新」にするバッチってありますかぁ?
ないよ
ありがとうございました。
作成日時は%~t1で取れますかぁ?
ヘルプ見るの面倒
>>825 こういうこと?
for /? より
%~tI - %I ファイルの日付/時刻に展開します。
それ更新日時
>>828 827じゃないが、ファイルの日付が何になるかって、
環境変数で変更できなかったっけ?
まぁ、できなくても、作成日時だったら、
他の手段で、何とでもなるから困らないけどね
それDIRCMD
>>814 だから、それは一目見て分かることで何の面白味もないの。
>>810 httpdが無いと動かないようなphpなら
netstatとか使って、httpdが起動完了したことを検知しないと駄目な気がする
まぁ、batchtest.php内で成功するまで待つって手もあるけど…
あと、最後にhttpdを止める必要はないの?
動かしっぱなしなら、httpdをバッチで起動する意味はないと思うけど?
馬鹿じゃないんだからそんなこといちいち聞かれなくても分かってますよ。
834 :
デフォルトの名無しさん :2010/04/23(金) 20:48:27
バッチでキューを実装したいけど実装できますよね? 現状想定案 ■I/F QUE.bat -que|-deq -prm1 prm1=パラメタファイル 格納DIR 、入力元DIR、出力先DIR、ファイル名 ■que指定時 1.入力ファイル名と同名のファイルが格納先にないかチェック ↓ ↓ない ↓ 末尾0付格納 3.カウンタをインクリし2に戻る ■deq指定 1.格納先ディレクトリに末尾0ファイルがあるかチェック ↓ ↓ない ↓ エラー返却 ↓ ↓ある 2.ファイルを出力先に出力 ↓ 3.カウンタで小さい方からサーチ カウンタ-1でリネーム
実装自体はいけそう que指定時の2の処理が不明だったり 格納ファイルのフォーマット(ファイル名の規則)をどう定義するか カウンタの初期値をどこから設定するかなど細部が気になる
836 :
デフォルトの名無しさん :2010/04/24(土) 00:35:27
>>835 携帯から書いたら改行多すぎと言われて、消しすぎたぜ…
■大体決めたこと
1.格納先のファイル名は入力ファイル名+連番。
1〜が数えやすそうかな。
2.返却値はキューの残数。
取出失敗時はマイナス
■迷ってること
1.格納先DIRパスとファイルの種類は1対1で対応させるかどうか?
2.キュー残数チェック用のオプションを実装するか?
3.もっと汎用的な設計がないか?
(サンプル的なやつ)
4.バッチ暦10日だけどそもそも言語仕様的に無理とかないよね?
できそうと聞いて安心したよ。
迷4以外はただの設計とアルゴリズムだし。
技術的に困ったらまたお願いします。
837 :
834 :2010/04/26(月) 07:58:31
キュー、デキューの処理中に再呼び出しされたら困るので、 ロック機能を実装してみた。 処理前にロック用ファイルがないかチェックして、なかったら作成。 あったら待ち。 処理終了後にロック用ファイル削除 複数起動時も一応ちゃんと動いたんだけど、もっと良い実装ないかな?
ファイル作らんでも
839 :
デフォルトの名無しさん :2010/04/28(水) 10:51:16
copy aaa.txt "%~1\bbb.txt" というコードを書くとき、%1がc:\fooでもc:\foo\でも動くようにするのって どういうコード書けばいいですか?
動画のエンコを連続してやるためにバッチの最後で 自分以外で一番dir順の若いバッチファイル検索→ startで実行→自分自身を削除してexit ってやってる。 実行順はファイル名で操作。 稚拙だろうけどね。
>>839 copy aaa.txt "c:\foo\bbb.txt"
copy aaa.txt "c:\foo\\bbb.txt"
どっちも同じ動作しなかったっけ?
set hoge=%~1
if "%hoge:~-1%"=="\" set hoge=%hoge:~0,-1%
みたいにする?
ヘルプに書いてあるのをいちいち説明するのめんどくさい
for %%I in ("%~1\bbb.txt") do copy aaa.txt "%%~fI"
call :main %* || pause exit /b :main ... とかやっとくとエラーでてもウィンドウが閉じずに残ってくれていいね
質問です。 テキストファイル内の特定文字列を置換したいと思っています。 一度EOFまでのすべての行を行ごとに配列に挿入し、 そのすべての配列に対して指定文字列の検索、 ヒットした変数が存在した場合その変数に対して 変数内文字列置換を行った後、 すべての変数をECHOで新規ファイルに書き出していけば ファイル内の文字列置換に成功すると思うのですが、 その記述方法がわかりません。 よろしくお願いいたします。
何かの罰ゲーム?
先に全部読む意味がわからん
バッチファイルじゃないといけないんですか?文字列に強い言語を使っちゃだめなんでしょうか
findstr とか
>>846 すべてをメモリ上にっていうのは、DOSのメモリが小さいことを考えると作るだけ無駄。
環境変数を使った置換はできるけど、環境変数のメモリは特別小さいし制限もある。
元のファイルが壊れるだけだからエディタに読み込んで置換して保存っていうのをやる方がマシ。
複数行のテキストをコマンドに読み込ませて処理させることは出来るけど、
文字列置換はfindかなんかの専用コマンドでやった方がいいだろ。
ただ、指定した文字列が見つからない場合にそのまま出力してくれるかが問題。
詳しいことは分からないが、普通はコマンド一発でやるか、for ループで処理する。
一時ファイルの代わりに環境変数を使おうとしてんだろ? set file=line1!LF!line2 みたいにLF文字で区切ればいいよ for /f %%i in (!file!)で行単位に取り出せる
行番号挿入できるじゃない
>テキストファイル内の特定文字列を置換したいと思っています。 ですが、 bat処理中に自動で読み込み置換できればいいのです。
sed とか使っちゃいけない”縛り”があるなら同情できるけど そうだとしてもそうでなくとも何かしら使いたい話だね。
まあでも単純な文字列置換なら誰かそういうバッチファイル作って公開してそうな気はする
行番号挿入は文字列置換なんだ!凄いね
それほどでもない
文字列置換バッチでぐぐれば見つかるよ
内部に変数記号が含まれているため正常に置換できませんでした…
てめえ、シカトしてんじゃねえよ!
>>846 powershellが簡単だよ
Windows PowerShell を使用してテキスト ファイルの文字を置き換える方法はありますか
>>846 中身は殆どWSHだけど。file1のabcをすべてxyzに置換してfile2に書き出すなら
rep.cmd "/abc/xyz/g" file1 > file2
とする。
@if (0==1) rem *** rep.cmd ***
@cscript.exe //noLogo /e:jscript %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
@goto :eof @end
var args = WScript.Arguments;
if (args.length < 2) Usage();
var sep = args(0).slice(0, 1);
String.prototype.Unesc = function() { return this.replace(/\x00/g, sep); };
var a = args(0).replace(new RegExp("\\\\" + sep, "g"), "\0").split(sep);
if (a.length != 4 || a[1] == "") Usage();
try { var re = new RegExp(a[1].Unesc(), a[3].toLowerCase()); }
catch (e) { Usage() };
var rep = eval('"' + a[2].Unesc().replace(/"/g, '\\"') + '"');
var Fso = new ActiveXObject("Scripting.FileSystemObject");
for (var i = 1; i < args.length; i++) {
try { var f = Fso.OpenTextFile(args(i)); }
catch (e) { WScript.StdErr.WriteLine(args(i) + ": can't open"); continue; }
while (!f.AtEndOfStream)
WScript.StdOut.WriteLine(f.ReadLine().replace(re, rep));
f.Close();
}
function Usage() {
WScript.StdErr.WriteLine("Usage: rep.cmd /pattern/replacement/[gi] file...");
WScript.Quit(1);
}
2行目の 「%0」 は 「"%~f0"」 にして、 1行目と2行目の間に @setlocal enableextensions を入れたほうがより良いでしょう。 @cscript.exe を @"%SystemRoot%\system32\cscript.exe" にするともっと良いか。
わっめんどうの極み powershellのほうがはるかに簡単だろ
動けばいいレベルならこんな感じだから特別面倒でもないと思う。 @if (0==1) rem *** Usage: replace.cmd pattern replacement file *** @cscript.exe //noLogo /e:jscript "%~f0" %1 %2 %3 @goto :eof @end var args = WScript.Arguments; var pat = new RegExp(args(0), "g"), rep = args(1); with (new ActiveXObject("Scripting.FileSystemObject").OpenTextFile(args(2))) { while (!AtEndOfStream) WScript.Echo(ReadLine().replace(pat, rep)); Close(); }
cat a.txt|%{$_ -replace "aaa","bbb"}|sc a.txt と張り合うのか?
しかし、Vista以降ならデフォルトで入ってるし、 実質WSHのバッチファイルが許されるならpowershellも許されるのでは? rep.cmd "abc" "xyz" file1 > file2 @echo off PowerShell -Command "& {$a,$b,$file=$args; Get-Content $file | ForEach-Object {$_ -replace $a, $b}}" %1 %2 %3
つかどっちもスレ違いかw
>>874 や、入ってるのは2008以降(2008, 7, 2008R2)だよ
まあ最近だとWindowsUpdateとかFixItで入ったりするけど
PowerShellってmycmd.ps1をバッチファイルから簡単に呼べればもうちょっとガシガシ使えるんだけど やり方がよくわからん
>>877 PowerShell -file mycmd.ps1 引数。。。
>868 質問です。 これは、 abcを"~%0"あいう;「」@![0-5]{25}\nBなどという値に変更したとしても 問題ないでしょうか
試せない時点で問題
試さない時点で問題
>>880 それが正規表現か単なる文字列なのかにもよるが…
rep.cmd "/\x32~%0\x32あいう;「」@![0-5]{25}\nB/xyz/g" file.txt
rep.cmd "/\x32~%0\x32あいう;「」@!\[0-5\]\{25\}\\nB/xyz/g" file.txt
\nがあるからforeachじゃだめだろ
そんなの工夫すればできる
メモ帳が起動してるかどうかをもうちょっとスマートに判定できないだろか for /f "usebackq delims==" %%i in (`tasklist /fi "imagename eq notepad.exe"`) do goto found echo not found! exit/b :found echo found!
powershell "ps notepad" && (echo found!) || echo not found!
作る過程が楽しいのであって、完成してもどうせ使わないんだから こんなところで聞くなよ。
n=1000 for /f "delims=" %i in ('dir /b /on *.jpg') do ( set /a n+=1 call ren "%~i" %%n:~1%%.jpg )
%i 誤 -> %%i 正
894 :
889 :2010/05/10(月) 00:02:27
dir /b *.jpg | sort /R > dir.txt echo rem ファイル名を降順ソートしてリネームします>temp.bat set n=1 set SWAPFILENAME= for /f "tokens=1,2* delims=." %%i in ( dir.txt ) do ( set SWAPFILENAME=%%i goto label ) :label for /f %%i in ( dir.txt ) do ( set /a n=n+1 SETで(n)の頭に0000を足した物をnumとかに設定する numの後ろから4桁を取り出してnumに入れなおす echo ren %%i (numに入ってる連番).tmp>>temp.bat ) で、出来たTemp.batを実行後、*.tmpを*.jpgにリネームしなおす見たいな感じにしたいと思ってますが上手いこと行きませんです。 つーかnを+1ずつ加算する所からして上手く行ってないんですよコレが。 向いてないのは重々承知してますがこうすれば良いんだよって教えて偉い人
変数nの呼び出しは%n%とかこんな低レベルから人に聞くレベル? set n=10000 for /f "usebackq delims=" %%i in (`dir /b/o-n *.jpg`) do (
setlocal enableextensions enabledelayedexpansion set n=10000 for /f "usebackq delims=" %%i in (`dir /b/o-n *.jpg`) do ( set /a n+=1 ren "%%~i" "!n:~-4!.jpg" ) :途中で書き込んでしまった。 :リネーム先と同じ名前のファイルが無いの前提だが。
1: 遅延展開をON 2: n=10000 3: dir /on ソート名前昇順 /o-n ソート名前逆順 4: nに1加算 5: 10001,10002,,,,100** の下4文字だけにすれば 0001,0002,,,,00**になる 終
つか上全然見てなかった。もろ被りやな。
899 :
889 :2010/05/10(月) 02:30:18
親切にありがとうございます。 バッチファイルなんて17年ぶりだったんで右往左往してたのですが助かりました。 コレを期に本でも買って勉強してきます。
本、あるのか?
結構あるみたいね
ググってもわからなかったので質問。 %a%が、yでもnでもない場合にgoto aしたいんだけど、 @if not "%a%"=="y,n" goto a って書いたら駄目だった。 問題は"y,n"の部分だと思うんだけどなんて書いたらいいんでしょう?
辛うじて自己解決できたかもしれない。 :a @if %a%==y goto y @if %a%==n (goto n) else goto a ってやったら動いたんだけどこんな感じで不具合出たりしないんでしょうか? (yかnで訊いて、yかn以外が返ってきたら:aに戻りたい)
そら応用力はググって解決できるもんじゃないわな
choice.exeをぐぐれ
動いて用が足りればいいや程度のもんだろ 不具合でてまずいような用途に使うやつはいない
if "%a%" neq "y" (if "%a%" neq "n" goto a)
バッチファイルの実行でctrl+alt+Iなどのキーボード操作をしたいのですが、できますでしょうか?
できないわけがない
win32api呼んでキーの押下状態調べてループから抜ける 小物ツール作ってバッチから呼ぶしかない
wscript.shell使えばええがな
やればわかるがこのばあいmshtaはやめたほうがええよ cscriptならだいじょうぶ
915 :
902 :2010/05/12(水) 21:49:48
みなさん回答ありがとうございました。
>>905 が一番理想に近いのでこれに決めました。
(昔のwindowsにはchoiceなんてコマンドがあったことなんて知らなかったw)
>>912 >win32api呼んでキーの押下状態調べてループから抜ける
???
現在日時の取得を正確に行いたいのですが バッチファイルの1行に「echo %DATE% %TIME%」と記述した場合に%DATE%と %TIME%は必ず全く同じ日時を表示するでしょうか? %DATE%で一度システム時刻を取得し%TIME%でももう一度システム時刻を 取得しているのか、一度システム時刻を取得した後に%DATE%と%TIME% にはその取得した時刻を展開しているのでしょうか?
そんな細かい挙動なんてわかる奴いるのかw date time date time の順に取ってdateが同じなら前二個を、食い違ってたら後ろ二個を使えばいいんじゃね。とりあえずは
echo %time% %time% ...
わかるよ set d=%date% set t=%time% if not "%date%"=="%d%" ( set d=%date% set t=%time% ) とやれば大丈夫
type nul > tmp for %%i in (tmp) do set dt=%%~ti echo %dt% なら気にせんでえーよ
貧乏から抜け出せだそうと藁でもつかんでるやつみたいだな 本人は必死なんだろうけど見てると滑稽
923 :
917 :2010/05/30(日) 01:45:22
どうもありがとうございます。
できるだけシンプルなやり方で
>>920 さんのやり方を使おうと思います。
REM バッチ起動日時の取得(現在日時)
SET STARTDATE=%date%
SET STARTTIME=%time%
IF NOT "%date%"=="%STARTDATE%" (
SET STARTDATE=%date%
SET STARTTIME=%time%
)
SET STARTTIME=%STARTTIME: =0%
now.exe使え
925 :
デフォルトの名無しさん :2010/06/03(木) 00:09:52
以下のような内容のテキストファイルがあるとして、 ----- 123 abcd あいうえお aaaa ----- 上から1行ずつ変数に格納したいのですが、どうすればいいでしょうか。 尚、テキストファイルの行数は、一定とは限らない場合で書き方を教えてください。
for で普通に回す
927 :
デフォルトの名無しさん :2010/06/03(木) 06:38:07
forいろいろ試したんですが、うまくいきません 書式を書いて頂けないでしょうか。
>>927 help for
に参考例が書いてあるよ
929 :
デフォルトの名無しさん :2010/06/03(木) 23:08:41
繰り返し処理は出来るけど、変数をセットする際の添字の扱いが分かりません。 添字って使えるんでしょうか
バッチで常に最前面表示ってできませんか? vbs呼び出してがんばったけど難しすぎた・・
もちろんできる
おしえてくださいなり・・
for /r "%~1" %%I in (*) do @echo %%~I みたいにワイルドカードを使う場合は隠しファイルが除外されちゃうんだけど ワイルドカードに隠しファイルを含める方法は無い? for /f "delims=" %%I in ('dir "%~1" /b/s/a:-d') do @echo %%~I こんな感じにdirコマンドを使うしかない?
コマンドラインオプションに対応しないアプリにファイルを渡したいのですが ファイルドロップや送るを再現することはできますか? start "" "ファイル" rundll32.exe url.dll,FileProtocolHandler ファイル これらは関連付けされているアプリでファイルを開くことしかできず start "" "アプリ" "ファイル" だとドラッグ&ドロップとは挙動が違うのです
>>935 無いだろうね。
同じ動作をしようと思ったらfor /fを入れ子に…出来ないから
サブルーチン作ることになるんじゃないかと。
お願いします。 HDDドライブ内の複数のフォルダに、 重複しないファイル名のファイルがたくさんあります。 これを同一階層に纏めたいのですが、よさげなコマンドを見つけられませんでした。 希望としては C:\>file /path D:\hoge[Enter] D:\hoge\aaa.txt D:\hoge\masao\bbb.txt D:\hoge\masao\ccc.txt D:\hoge\masao\shigemi\111.txt (以下、ファイルの一覧が完全パス付で出力される) というようなリストが出れば最高です。 Linux側で対象のドライブをSMBマウントして、findコマンドと組み合わせたりしてみましたけど、 Win機がわが途中でフリーズしてしまったりで、うまくいきませんでした。 ほかの方法もあるよ!ってことでもけっこうでございます。 お知恵をおかしください。
>>938 cygwin入れてfindじゃいかんの?
dir /b /s *.txt
for /r D:\hoge %%f in (*.txt) do move %%f D:\hoge\
移動だけならエクスプローラで一発
cygwinなくても単体で動くfindぐらい、いくらでもあるよ。 俺も自分で作ったしw
>>937 >同じ動作をしようと思ったらfor /fを入れ子に…出来ないから
>サブルーチン作ることになるんじゃないかと。
はぁ〜?
DropTargetってなんの関数だろう レベル高くてついていけないわ
sendkeys "%fo" & "ファイル" & "{enter}"
プログラムの仕様ならそういう風
プログラムを作った経験があれば当然知ってるだろうけど プログラムの側で優先度を設定できる。
>>950 >>951 プログラムには詳しくないのですが、
起動後に「高」に変更は出来ます。
MPC自体が、起動時に優先度を「通常」にする
ということでしょうか?
MPCの設定を見たら、優先度の項目がありました。 ソースは見てないけど、多分、内部で「通常」にしてるのかと思います。 ありがとうございました。
ちょと質問 Find の返り値をIF 文で使いたいんだけど こういう時ってのはイチイチ echo %str% | find /i /c %ptrn% > %temp% set /p len=<%temp% こんな回りくどいことしないと使えないのかな?
WMI
>>954 for /f %%i in ('"echo %str% | find /i /c %ptrn%"') do set len=%%i
UNIXならps -efコマンドで実行中プロセスの引数を含んだコマンドラインが表示されるので、 ps -ef|grep `basename $0`で、シェルの多重起動制御ができますが、 Windowsバッチで同様のことを tasklist|findstr "%~n0" でできるかと思ったのですが、tasklistコマンドはコマンドライン引数を表示しないため、 バッチファイル実行中もcmd.exeが表示されるのみです。 tasklistコマンド以外を使用する等で、何か解決策はないでしょうか?
959 :
958 :2010/06/13(日) 14:16:07
環境を書き忘れました。OSはWin2003です。
そういうプログラムを探すか自分で作れば可能 プログラム板は基本的に自分で作る方向
titleで一意に変えてtasklistで調べればよい
wmic.exeでコマンドラインわかる
>>925 set n=0
for /f %%a in (a.txt) do (
set /a n+=1
call set x%%n%%=%%a
)
for /l %%k in (1,1,%n%) do call echo %%x%%k%%
965 :
958 :2010/06/13(日) 20:23:16
>>963 wmic process get CommandLine,ProcessId|findstr /i /c:"%~nx0"
でバッチリ、コマンドライン引数を取得できました。どうもありがとうございます。
さらに質問なのですが、多重起動制御にあたり、自分自身のプロセスIDの行は除去しようと思うのですが、
UNIXの"$$"のようなプロセスIDの取得方法はWindowsバッチでないでしょうか?
Unix使いならmanぐらい知ってるはずだが、 まずはmanに相当するもので調べてみようとは思わなかったのだろうか?
win上にunixらしき環境でも作って使えばいい。
wmic.exeのparentprocessid
ヘルプ嫁
971 :
デフォルトの名無しさん :2010/06/13(日) 22:55:48
質問いいですか? UNIXの"$?"のようなものはWindowsバッチでないでしょうか?
ある
もしBAT自身でできなくても外部コマンド呼べばたいていのことはできる
外部コマンドにはヘルプがついているよ
wmi動かなかった
977 :
958 :2010/06/13(日) 23:15:00
>>972 %errorlevel%です。大文字小文字の区別はないようです。
>>968 レスありがとうございます。
ですが、parentprocessidはUNIXでいうPPIDにあたるようで、
実行中のバッチファイル自身のプロセスIDではないようです。
wmic.exeのparentprocessidは何?
>976 WMI が動作していません。どのようにトラブルシューティングすればよいですか。 スクリプトの実行時、CIM Studio などの WMI ベースのツールの実行時、 または WMI コントロールの使用時には、WMI サービスに関する問題が発生することがあります。 スクリプトが実行されなかったり、"アクセスは拒否されました" というエラー メッセージが表示されたりすることがあります。 このエラーの原因としては、WMI が動作していないか、 名前空間が正しく構成されていないかのどちらかが考えられます。 また、クラスを提供している WMI プロバイダがロードされていない場合や、 WMI リポジトリ (クラス定義の格納場所) が壊れた場合にも、エラーが発生することがあります。 WMI サービスに関する問題をトラブルシューティングするには、次の作業を行います。 リモート コンピュータへの接続に関して問題が生じている場合は、 ローカル コンピュータ上でスクリプトを実行してみてください。 WMI サービスを再起動します。 WMI リポジトリを再構築します。 すべての WMI コンポーネントを再登録します。 オペレーティング システムを再インストールします。 マイクロソフト製品サポート サービスに問い合わせます。
リモート コンピュータへの接続に関して問題が生じている場合は、 ローカル コンピュータ上でスクリプトを実行してみる リモート コンピュータへの接続に関して問題が生じている場合は、 他の操作を行う前にローカル コンピュータ上でスクリプトを実行してみてください。 ローカル コンピュータ上でスクリプトを実行できるのであれば、 「WMI でリモート コンピュータを管理するにはどうすればよいですか」のトピックを参照してください。 ローカル コンピュータでスクリプトを実行できない場合は、次のトラブルシューティング手順を実行してください。 ローカル コンピュータ上での WMI 操作が失敗し、予期せぬエラー コードが返される場合や、 WMI コントロールを起動できない場合は、ローカル WMI サービスが稼動しているかどうかを確認します。 スクリプトを実行できるのであれば、WMI サービスは稼動しており、 WMI サービス自体に問題はないと考えることができます。
'wmi' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
982 :
958 :2010/06/13(日) 23:39:11
sc start winmgmt
wmicって処理論理組めないよね〜
UNIXついでに質問いいかな? UNIXのsplitのようなものはWindowsバッチにありますか?
UNIXのsuのようなものはWindowsバッチにありますか?
酢??????
___ ___ ◎ タコデス
___ ___ ◎ 酢タコデス / | | | \
>su -d -a -k -o
△ ゜ロ゜ < イカデス 川
スルメwww
△ ^.^ < スルメデス 川
いい年こいたおっさんがこんな事やってるのかと思うと悲しくなってくるね
'su' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
すまた?
999 :
デフォルトの名無しさん :2010/06/14(月) 11:58:32
素股w
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。