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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %6 【.bat】
http://hibari.2ch.net/test/read.cgi/tech/1277465356/

【.cmd】 バッチファイルスクリプト %5 【.bat】
http://pc12.2ch.net/test/read.cgi/tech/1242268171/
【.cmd】 バッチファイルスクリプト %4 【.bat】
http://pc12.2ch.net/test/read.cgi/tech/1229955189/
【.cmd】 バッチファイルスクリプト %3 【.bat】
http://pc11.2ch.net/test/read.cgi/tech/1217860043/
【.cmd】 バッチファイルスクリプト %2 【.bat】
http://pc12.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
http://pc11.2ch.net/test/read.cgi/tech/1178281991/
2デフォルトの名無しさん:2011/02/28(月) 16:32:12.62
>>1
3デフォルトの名無しさん:2011/03/03(木) 16:58:03.90
@echo on
4デフォルトの名無しさん:2011/03/06(日) 18:49:35.04
echo on に @ は要らんだろw
5デフォルトの名無しさん:2011/03/06(日) 19:12:28.36
@@@@@@@@@echo 使えるのに使って悪いか?
6デフォルトの名無しさん:2011/03/07(月) 01:27:19.22
@@@@@@@@@@@@@@@@@@@@echo もっといっぱい使ってやる

7デフォルトの名無しさん:2011/03/07(月) 13:49:52.32
バッチファイルのサンプル集みたいなのありませんか?
勉強用とかでなくて実用的なサンプルを掲載されてるものです
8デフォルトの名無しさん:2011/03/07(月) 17:15:00.27
実用的な?
9デフォルトの名無しさん:2011/03/07(月) 18:17:28.77
実際に使用してるバッチファイルがないからなぁ
10デフォルトの名無しさん:2011/03/07(月) 18:19:31.09
実際に使ってるバッチファイルを紹介して貰ったら実用的かも
11デフォルトの名無しさん:2011/03/07(月) 18:43:49.59
実際に使用していて有名なのはautoexec.batじゃね?
コンベンショナルメモリを無駄にしないためにはconfig.sysだけじゃなく
autoexec.batも理解しないと意味ないしね
12デフォルトの名無しさん:2011/03/07(月) 19:13:40.65
ググってヒットするサンプル集って
けっこう実用的だと思うのはおれだけか
13デフォルトの名無しさん:2011/03/07(月) 20:13:54.94
誰かバッチで標準入力から入力得る方法おしえてくらさい
以前自分が調べたやつから
とりあえず基本

for文
FOR %%B IN (*.TXT) DO TYPE %%B

if文
IF %FLG%==1 DIR

REM コメントだこの野郎

GOTO相当

:START
ECHO そして時は繰り返す
GOTO START

とりあえずチューリング完全
14デフォルトの名無しさん:2011/03/07(月) 20:26:10.53
イミフ
15デフォルトの名無しさん:2011/03/07(月) 21:58:57.14
うちのautoexec.batは空っぽだから実用的じゃねえ
昔のautoexec.batもそれ以外に使い道ないからちっとも実用的じゃねえ
単なる阿呆だなw>>11
16デフォルトの名無しさん:2011/03/07(月) 22:00:52.09
>>13
set /p x=なんか入れろぼけ
17デフォルトの名無しさん:2011/03/08(火) 10:23:29.57
バッチファイルを使い続けて20年
ついに奥義遅延展開を会得したぜ
18デフォルトの名無しさん:2011/03/08(火) 10:50:06.67
>>17
@echo off
setlocal enabledelayedexpansion
set 1=お
set 2=め
set 3=で
set 4=と
set 5=う
for /l %%a in (1,1,5) do echo !%%a!
endlocal
exit
19デフォルトの名無しさん:2011/03/08(火) 16:50:01.75
遅延会得者に拍手w
20デフォルトの名無しさん:2011/03/08(火) 17:50:45.23
遅延展開より、むしろ、華麗な CALL 使いの方に憧れる
ここの前スレだったか、別板スレの前スレだったかはとても勉強になったよ

でも会得してないので遅延展開使っちゃうけどw
21デフォルトの名無しさん:2011/03/08(火) 18:28:47.78
>>20
どういうの?
22デフォルトの名無しさん:2011/03/08(火) 18:43:43.50
こういうの
@echo off
setlocal
set 1=お
set 2=め
set 3=で
set 4=と
set 5=う
for /l %%a in (1,1,5) do call echo %%%%a%%
endlocal
2320:2011/03/08(火) 19:04:57.04
そうそう、そいうの
call echo %%%%a%% というようなの知らなかったからインパクト大きかった

その後ググってたら
http://d.hatena.ne.jp/jak-san/20090308/1236501217
見つけて世界が広がった感じ
他にも目からウロコがいくつかあったけど思い出せないw
2421:2011/03/08(火) 20:10:08.46
>>22
>>23
すげえええええ
call使えばもう1段階変数が外せるのか
てかcallの処理ってこんな風になってたんだね
まさに目から鱗だ
でも少し見にくいからやはり遅延展開!!の方が見やすいかも・・・
25デフォルトの名無しさん:2011/03/08(火) 20:38:42.71
これが初出かな
2005-03-10
ttp://otnx.jp/CMD/コマンド別/call/
26デフォルトの名無しさん:2011/03/08(火) 20:47:40.50
こっちが早いかな
ttp://d.hatena.ne.jp/otn/20040227
27デフォルトの名無しさん:2011/03/08(火) 20:57:08.22
バッチファイルでFizzBuzzをお願い
28デフォルトの名無しさん:2011/03/08(火) 21:35:00.23
バッチでBroken pipeってエラーが大量に出るんですが、これなんでしょうか?
引き渡してるパラメータはログ主力すると、正しく渡されてるようです。
29デフォルトの名無しさん:2011/03/08(火) 22:33:31.13
setlocal enabledelayedexpansion
set o=me
set me=de
set de=to
set to=u
set u=おめでとう
for /f %%A in ( 'call echo %%!%o%!%%' ) do call echo %%!%%A!%%
endlocal
30デフォルトの名無しさん:2011/03/08(火) 23:30:00.51
>>28
windowsでBroken pipeなんて出るの?
まぁ、文字通りパイプが壊れてるんじゃないの?
オプションって言うよりは、入出力関係で不正な操作が起きるんじゃない?
31デフォルトの名無しさん:2011/03/09(水) 02:30:08.73
>>29
バッチを読んでみた。
とりあえずバッチファイルを実行してみた、結果が表示された。
もう一度バッチを読み直してみた。

もう君がなにをしているのか訳がわからないよ。
32デフォルトの名無しさん:2011/03/09(水) 04:52:28.96
setlocal enabledelayedexpansion
set o=me
set me=de
set de=to
set to=u
set u=omedetou
set omedetou=^^^>^^^>31 説明しても良いが、何故かもう一回展開できてしまって、この理由が全く説明できないから、展開されるタイミングとか勘違いしてるかもしれんが良いか?
for /f %%A in ( 'call echo %%%%!%o%!%%%%' ) do call echo %%!%%A!%%
endlocal
33デフォルトの名無しさん:2011/03/09(水) 05:06:07.95
あれ…?
何か勘違いしてた…
説明できるかもしれんけど、もう少し良く考えてみる
34デフォルトの名無しさん:2011/03/09(水) 07:00:45.31
>>30
windowsででちゃってます。入出力関係が問題ですか。
複数のバッチを同時起動してるのが、まずいのかもしれません。
標準入力とか使い回ししてるのかもしれないですね。
35デフォルトの名無しさん:2011/03/09(水) 07:14:09.84
>>34
何か変なコマンド呼んでない?
複数起動禁止でスレッドセーフじゃないコマンドとか、そんなパターンじゃないかと…
36デフォルトの名無しさん:2011/03/09(水) 09:31:03.77
UNIXだとbroken pipeは受け側のプロセスが先に終了して、向こう側が
閉じたパイプに書き込もうとしたときのエラー。
Windowsでも同じ状態をいうんじゃないのか?
37デフォルトの名無しさん:2011/03/09(水) 21:01:22.97
>>32
%for /f %A in ( 'call echo %%!me!%%' ) do call echo %!%A!%
!for /f %A in ( 'call echo %%de%%' ) do call echo %!%A!%

call echo %%de%%
echo %to%
%A=u

%call echo %!u!%
!call echo %omedetou%
%echo ^>^>31
>>31

for /f %%A in ( 'call echo %%%%%%!%o%!%%%%%%' ) do call echo %%!%%A!%%
%for /f %A in ( 'call echo %%%!me!%%%' ) do call echo %!%A!%
!for /f %A in ( 'call echo %%%de%%%' ) do call echo %!%A!%

call echo %%%de%%%
echo %%to%%
%A=%u%
%call echo %!%u%!%

for /f %%A in ( 'call echo %%%%%%%%!%o%!%%%%%%%%' ) do call echo %%!%%A!%%
%for /f %A in ( 'call echo %%%%!me!%%%%' ) do call echo %!%A!%
%call echo %!%%u%%!%

cmd /c call echo %%de%%
to
cmd /c call echo %%%de%%%
u
3837:2011/03/09(水) 21:05:17.09
>>37の結果から推察すると
for /f in ('') のコマンドの処理は単純に cmd /c と同じではなくて
%%→% の処理はされずに %環境変数の展開はされる。
ってことで合ってる?
39デフォルトの名無しさん:2011/03/09(水) 21:16:29.06
はぁ?
40デフォルトの名無しさん:2011/03/09(水) 21:18:32.94
%%→% はバッチだけだろ
cmdの標準入力やコマンドラインは違うだろ
41デフォルトの名無しさん:2011/03/09(水) 21:33:13.64
よくそんなんでやってきたな
表面的にしか理解していない証拠
42デフォルトの名無しさん:2011/03/09(水) 21:43:06.29
そんなんでだめな証拠をみせろや
43デフォルトの名無しさん:2011/03/09(水) 21:53:28.63
>>40
なるほど、コマンドプロンプトで試してみたら
call echo %%de%%
u
call echo %%%de%%%
%u%
となったから>>37と一致したよ
バッチではなくコマンドプロンプトでしてる時と同じ処理になるってことなのか。
ありがとう。

>>39,>>41
そんな煽るだけの誰の役にも立たないクソレスしかつけられないなんて
かわいそうな子なんですね。
44デフォルトの名無しさん:2011/03/09(水) 22:11:49.57
>>16
今更ながら気づいた。こういうことか

@echo off
setlocal enabledelayedexpansion
set /p mo=あ、そう。打ちたいなら何か打てば?
echo !%mo!
endlocal
exit /b
45デフォルトの名無しさん:2011/03/09(水) 22:13:30.35
>>43
んじゃ、このバッチで復習を

setlocal enabledelayedexpansion
set o=me
set me=de
set de=to
set to=u
set u=omedetou
set omedetou=おめでとう
for /f %%A in ( 'call echo %%^^^!%%%%!%o%!%%%%^^^!%%' ) do call echo %%A
endlocal
46デフォルトの名無しさん:2011/03/10(木) 10:15:12.01
質問です。
下記のバッチですが、if 文の条件に合わないのに、
なぜか変数 a の値が変わります。なぜでしょうか?

@echo off
set a="ー"
echo BEFORE=%a%
if %a%%a% == """""" set a="X"
echo AFTER=%a%
pause

2行目で変数に "ー" 以外を代入すると、値は変わりません。
"ー" はバッチ変数のダメ文字なんでしょうか?
4746:2011/03/10(木) 10:27:51.06
>>46 をブラウザからコピペしてバッチファイルを作成したら動作しませんでした。
set a="ー"
の末尾のスペースを削除したら動作しました。
もう、さっぱり分かりません。
48デフォルトの名無しさん:2011/03/10(木) 10:52:15.87
エスケープ文字とか確認してみた?
4946:2011/03/10(木) 11:19:55.02
ありがとうございます!
set a="^ー"
にしたら正常に動きました。
なぜか末尾に半角スペースはダメなようです。
"ー"以外にもエスケープが必要な文字あるんでしょうかね。
実際は変数に何の文字が入るか分からないので、
全部エスケープすりゃいいのかな。
全角文字はやばいのかも。
50デフォルトの名無しさん:2011/03/10(木) 12:30:25.19
どんだけ半角スペース入るのかわからんけど
forのdelimsとかtokensとか使ってみたらどう?
51デフォルトの名無しさん:2011/03/10(木) 12:36:43.13
" "の中でが^はエスケープにならないけどね
52デフォルトの名無しさん:2011/03/10(木) 12:39:50.02
そもそも"がエスケープだからな
5346:2011/03/10(木) 12:51:26.32
>>50
半角スペース1個ですよ。
IE とかでレスをコピペしたら付くよ。

>>51>>52
普通そうですよね。
では set a="^ー" で正常に動いた理由は?
5446:2011/03/10(木) 12:55:51.56
というか ^ じゃなくても同じだなw
また、分からなくなってきた。
55デフォルトの名無しさん:2011/03/10(木) 13:17:15.56
if文ではーと"が同一視されるとか
5646:2011/03/10(木) 14:19:31.45
"―" でも同じようだ。

if "―""―" == """""" echo 等しい
等しい

だめだこりゃ
57デフォルトの名無しさん:2011/03/10(木) 19:19:48.87
if aaaaa == a―a―a echo 等しい
等しい

"とか^とか全然関係ないじゃん。
要するにif文の比較には駄目文字が存在するって事で。
ーと―は駄目だね。
58デフォルトの名無しさん:2011/03/10(木) 19:35:38.13
if aーaーa == aaaaa echo bug
59デフォルトの名無しさん:2011/03/10(木) 19:58:41.01
if aab==aーb echo x
60デフォルトの名無しさん:2011/03/10(木) 20:37:35.38
バッチを直接使わずに自身を引数にWSHに渡すやり方が便利だ。
だがWSHはWindows 7だとデフォルトでは無効なんだっけか。
PowerShellを覚えなきゃいかんのかなぁ。
61デフォルトの名無しさん:2011/03/10(木) 21:58:30.78
同左ってことですね
62デフォルトの名無しさん:2011/03/10(木) 22:31:24.41
そうさ
63デフォルトの名無しさん:2011/03/10(木) 23:02:31.39
なんでそうなってる?
外人さんにとって、横線は同左なのか?
64デフォルトの名無しさん:2011/03/10(木) 23:10:43.82
65sage:2011/03/10(木) 23:16:28.91
telnet通信越しにバッチを実行数と、たまに標準エラー出力に実行したコマンドが、
まるまる表示されるときがあるんですが、これなんですかね?
バッチの動作は正しいんですが、気持ち悪いです。
66デフォルトの名無しさん:2011/03/10(木) 23:44:27.22
つまり"コピー"が"コピピ"と同等なのかw
迷惑な仕様だな
67デフォルトの名無しさん:2011/03/11(金) 01:28:50.41
>>64
この問題とは違う気がする

この事例だと"コピー"は"コピ?"となってーはワイルドカードみたいになるってこと?それか正規表現?
>>58>>59見ると正規表現っぽいけど
68デフォルトの名無しさん:2011/03/11(金) 03:53:26.02
「同左」文字の一覧
69デフォルトの名無しさん:2011/03/11(金) 06:42:21.93
半角カタカナの"ー"も同じっぽいけどね
70デフォルトの名無しさん:2011/03/11(金) 08:28:01.29
if ゞ==々 echo ゞ=々
if not "ゞ"=="々" echo "ゞ"≠"々"
71デフォルトの名無しさん:2011/03/11(金) 11:26:30.13
あはは
72sage:2011/03/12(土) 12:29:23.18
Linuxでsyncに該当するコマンドってあります?
73デフォルトの名無しさん:2011/03/12(土) 14:08:30.15
>>72
sync
74デフォルトの名無しさん:2011/03/12(土) 16:45:25.01
if あはは==あは々 echo あはは==あは々
75デフォルトの名無しさん:2011/03/13(日) 12:13:23.68
>73
失礼しました。
Linuxでのsyncに該当するコマンドがwindowsであります?です。
76デフォルトの名無しさん:2011/03/13(日) 12:34:12.10
ハードウェアの安全な取り外し?
77デフォルトの名無しさん:2011/03/13(日) 12:53:26.18
78デフォルトの名無しさん:2011/03/13(日) 21:27:59.41
>>77
まさにこれを探してました。ありがとうございます。
79デフォルトの名無しさん:2011/03/13(日) 23:59:38.64
IF文の変数の比較判定は、思わぬ落し穴がある

set a="b==c"
if not %a%==%a% echo NOT EQUAL !!
80デフォルトの名無しさん:2011/03/14(月) 15:01:05.89
どこが?
おまえだけw
81デフォルトの名無しさん:2011/03/14(月) 16:24:57.67
set a="b==c"
if %a%==%a% echo EQUAL !! だけど?
82デフォルトの名無しさん:2011/03/14(月) 17:47:04.60
ふーん。環境により変わるのか?
教えてくれ>>80の先生
83デフォルトの名無しさん:2011/03/14(月) 19:18:01.59
俺は Win2kSP4 だが
何度やっても NOT EQUAL !! って表示されるな
古い cmd.exe のバグかね?
84デフォルトの名無しさん:2011/03/14(月) 20:04:46.64
>79
ウチのWinXP(SP3)では何も表示されないな。
ついでに「 echo %a% 」を次の行に追加した場合は「 "b==c" 」と表示された。
85デフォルトの名無しさん:2011/03/14(月) 20:13:45.30
今、XPのcmd.exeを拾ってきて試した
変数の展開が微妙に違うなw


win2k
>if not "b == c"=="b==c" echo NOT EQUAL !!
NOT EQUAL !!

winXP
>if not "b==c" == "b==c" echo NOT EQUAL !!
86デフォルトの名無しさん:2011/03/14(月) 20:31:25.66
>>85
2kだと == が "" でエスケープされずに最初の == が比較演算子と認識されてるのかな?
スペースの付き方の違いをみるとそう受けとれる
2kの cmd.exe は for にもバグがあるみたいだし結構ずさんなバグが他にもあるのかも
http://otnx.jp/CMD/%A5%D0%A5%B0/
87デフォルトの名無しさん:2011/03/14(月) 21:54:24.82
>2kだと == が "" でエスケープされずに最初の == が比較演算子と認識されてるのかな?
>スペースの付き方の違いをみるとそう受けとれる
もしそうならあとがコマンドとして実行されてエラーになるだろ?
88デフォルトの名無しさん:2011/03/15(火) 00:50:09.59
win2k は "b と c"=="b==c" を 比較して echo してる
89デフォルトの名無しさん:2011/03/15(火) 01:27:18.63
win2kのバグ付きcmd.exeで動くバッチw

@echo off
set b=それは ^^" です。
set c=それは ^^" ではありません。
:x
set a=
set /p a=文字=
if "%a%==%a%" ( echo %b% ) else echo %c%
goto x
90デフォルトの名無しさん:2011/03/15(火) 01:30:48.75
>>86-88
それなら「c"」までがif文となり、その後の「=="b==c" echo NOT EQUAL !!」
が、実行されてエラーになるんジャマイカ?
91デフォルトの名無しさん:2011/03/15(火) 01:41:19.03
「"b == c"=="b==c"」の全体の「"」が外されて
not「b」==「c"=="b==c」と解釈してると予想
92デフォルトの名無しさん:2011/03/15(火) 01:50:38.93
バグってるソフトが、正常なエラーを出すかよw
93デフォルトの名無しさん:2011/03/15(火) 01:55:32.05
>>91
それだと>>89は動かない
94デフォルトの名無しさん:2011/03/15(火) 05:10:10.83
>>93
手元に2000無いから分からんが、どう動くの?
95デフォルトの名無しさん:2011/03/15(火) 07:48:06.63
文字=z
>if "z == z" (echo それは " です。 ) else echo それは " ではありません。
それは " ではありません。

文字="
>if "" == "" (echo それは " です。 ) else echo それは " ではありません。
それは " です。
96デフォルトの名無しさん:2011/03/15(火) 08:45:46.87
win2kのcommand.comもバグってるようだ
97デフォルトの名無しさん:2011/03/15(火) 11:37:36.79
>>95
その結果だけみるとダブルクォーテーションでエスケープ出来ない感じ?
98デフォルトの名無しさん:2011/03/15(火) 13:11:59.49
" は == に対しては何の効果もない。
" が奇数個だとまずい。
" も比較の対象。
99デフォルトの名無しさん:2011/03/15(火) 17:17:41.23
2kなんかどうでもいいんだけど
100デフォルトの名無しさん:2011/03/15(火) 18:48:54.30
Win2000のユーザはまだ多数いると思うぞ
101デフォルトの名無しさん:2011/03/15(火) 22:03:56.89
MSですらサポートやめたOSにまで対応するのは愚かだよ
102デフォルトの名無しさん:2011/03/15(火) 22:26:00.31
2kなんかどうでもいいからサポート中のOSだけでも直してほしいな
103デフォルトの名無しさん:2011/03/15(火) 22:41:15.80
何を?
104デフォルトの名無しさん:2011/03/15(火) 23:00:36.57
>>101
愚かだね。誰もそんな要求してないけど。
105デフォルトの名無しさん:2011/03/15(火) 23:08:44.93
>>103
cmd.exeバグだらけなんだけど
106デフォルトの名無しさん:2011/03/15(火) 23:14:38.46
ここにそんな事を書いても無駄
107デフォルトの名無しさん:2011/03/15(火) 23:25:37.56
どこかに書けば直すとでも?
108デフォルトの名無しさん:2011/03/15(火) 23:30:59.08
否。でも無駄には変わりない。
109デフォルトの名無しさん:2011/03/15(火) 23:37:12.84
だからなに?
110デフォルトの名無しさん:2011/03/15(火) 23:41:30.73
>>106 >>108
ここにそんな事を書いても無駄
111デフォルトの名無しさん:2011/03/15(火) 23:48:08.15
そうですねw
112デフォルトの名無しさん:2011/03/16(水) 01:49:08.39
おまえ誰?
113デフォルトの名無しさん:2011/03/16(水) 09:27:16.44
 \                    /
   \  丶       i.   |      /     ./       /
    \  ヽ     i.   .|     /    /      /
      \  ヽ    i  |     /   /     /
   \
           た  わ  し  で  す        -‐
  ー
 __            __VV
             >:::::::::::::::::::: <
            _>'::::::::  ::::::::<
            ,>':::::   ::::::::<
            >:::::::   :::::::::<
            >;;:::::   :::::::< 
             >i::::::::::::::ゞ<
               'ヘトハト!             ‐-

    /
            /               ヽ      \
    /                    丶     \
   /   /    /      |   i,      丶     \
 /    /    /       |    i,      丶     \ 
114デフォルトの名無しさん:2011/03/16(水) 10:57:44.78
なんか面白いネタを頼む。愚痴は要らん
115デフォルトの名無しさん:2011/03/16(水) 23:32:55.60
標準出力や、標準エラーを初期化する方法ってあります?

初期化って概念が、そもそも無いかもしれないですが。
116デフォルトの名無しさん:2011/03/17(木) 01:18:24.11
>標準出力
2>標準エラー
117デフォルトの名無しさん:2011/03/17(木) 15:43:02.49
>>115
初期化しないと生ずる不具合を教えてください
具体的にお願いします
118デフォルトの名無しさん:2011/03/17(木) 16:58:13.74
追加になります。
119デフォルトの名無しさん:2011/03/17(木) 20:10:10.61
で、溜まったまま出てこないの? 便秘かよw
120デフォルトの名無しさん:2011/03/17(木) 20:36:18.44
Cでfflush(stdout)するようなもん?
違うか
121デフォルトの名無しさん:2011/03/17(木) 22:02:21.39
それ初期化っていうかよ
122デフォルトの名無しさん:2011/03/17(木) 22:02:55.98
ファイナライズとか?
123デフォルトの名無しさん:2011/03/18(金) 00:05:53.42
closeだっちゃ
124デフォルトの名無しさん:2011/03/18(金) 22:45:57.66
他スレから誘導されて参りました。

環境は
Windows XP Service Pack 3
です。

sample.batという名のバッチファイルを作って、その挙動を
1.commandstring = "C:\sample_prgm.exe"
 のようにcommandstringという変数に右辺の文字列を代入する。
 (バッチファイル中に直接書きこむ)
2.commandstringが有効なパスであるならば
 そのパスをコマンドとして(関連付けどおりに)実行させる。
 (つまりコマンドプロンプトにcommandstringの中身を打ち込んだのと同じ動作をさせる)
というふうにしたいのですが、どう書けばよろしいでしょうか?

Pythonで言うなら
#######################
import os, os.path

commandstring = "C:\sample_prgm.exe"

if os.path.exists(commandstring) :
  os.system(commandstring)
#######################
です。
これをbatファイルでやりたいのです。

よろしくお願いいたします。
125デフォルトの名無しさん:2011/03/19(土) 00:14:09.04
set commandstring=C:\sample_prgm.exe
if exist %commandstring% %commandstring%
126デフォルトの名無しさん:2011/03/19(土) 00:40:25.87
この手の方がパスにスペースを含むような使い方をするとはあんまり思わないけど
スペースぐらいはケアした方が良いような・・・
127デフォルトの名無しさん:2011/03/19(土) 00:42:01.80
クレクレマンにそんなに親切に対応する必要なし。
128デフォルトの名無しさん:2011/03/19(土) 11:10:36.49
質問があります
お聞きしたいことはバッチファイルで出力されたログを上手く取るコツです

今はこのように非効率だとおもいながらもバッチファイルで標準出力やエラー出力をlog.txtに追加しています
(このteeはここではパイプで渡された入力をファイルに追記するために使っています)

  ( NanikaSuruA.exe 2>&1) | tee -a log.txt
  ( NanikaSuruB.exe 2>&1) | tee -a log.txt
   以下続く

ただこの方法ではコマンドごとに記述することが手間と
標準出力を利用したいときにエラーが記録しづらく困っています。
例えば

  TokubetuNaNanika.exe > output.txt
  TokubetuNaNanika.exe は、内部コマンドまたは外部コマンド、
  操作可能なプログラムまたはバッチ ファイルとして認識されていません。

このようなときにパスが通っていないエラーが記録されていませんでした

このときはrun_test.batを作りその中で処理したいbatを呼び出し表示されるものをログに追記するとよさそうに見えますが
一つのバッチファイルのにつき、さらにもう一つのログをとるためのラッパーのためのバッチファイルを用意することになります
  test.bat | tee -a log.txt

もう少しいい方法はないかと質問させていただきました
129デフォルトの名無しさん:2011/03/19(土) 11:40:36.48
NanikaSuruA.exe >> log.txt 2>&1
TokubetuNaNanika.exe > output.txt 2>> log.txt
130124:2011/03/19(土) 14:34:32.99
>>125
ありがとうございます!

>>126
今後スペースが必要となったらその時自分で勉強して手を加えようとおもいます!



ありがとうございました。
131デフォルトの名無しさん:2011/03/19(土) 15:56:21.84
>>128
再帰
if defined flag goto main
setlocal
set flag=1
%0 2>&1 | tee -a log.txt
goto :eof
:main
132デフォルトの名無しさん:2011/03/19(土) 18:57:36.42
>>128
ラッパー(test.bat)の中身

NanikaSuruA.exe
NanikaSuruB.exe
TokubetuNaNanika.exe > output.txt

ラッパーの実行方法
test.bat 2>&1 | tee -a log.txt
133128:2011/03/20(日) 15:35:57.84
ありがとうございます!
teeというコマンドを使っていたのはファイルと画面にも表示したいのをさっぱり忘れていました
リダイレクトの方法>>129も含めて試してみます

>>129
なるほど、、
自己再帰する手があるのですね

>>132
用意する手間さえどうにかすればラッパーが一番楽そうですね
134デフォルトの名無しさん:2011/03/23(水) 11:49:37.29
start /B "C:\Program Files\R\R-2.11.1-x64\bin\Rgui.exe" %*

という内容のバッチファイルを書いて実行すると、期待したどうさに
ならずに、コマンドプロンプトのロゴが出てしまいます。
解決策をご教示ください。
よろしくお願いします。



135デフォルトの名無しさん:2011/03/23(水) 12:20:56.26
お前が期待している動作ってのは何だよ
136デフォルトの名無しさん:2011/03/23(水) 16:49:02.50
start "title" "C:\Program Files\R\R-2.11.1-x64\bin\Rgui.exe" %*

/Bなんか使うな必要ないだろ
137デフォルトの名無しさん:2011/03/23(水) 20:44:39.82
>>135
無理すんなw
138デフォルトの名無しさん:2011/03/23(水) 21:33:06.74
>>136
ありがとうございます。startの引数を誤解していました。
139デフォルトの名無しさん:2011/03/23(水) 21:47:00.23
そもそもstart使う意味あんの?
140デフォルトの名無しさん:2011/03/24(木) 00:51:32.62
バッチが止まるだろw
141デフォルトの名無しさん:2011/03/24(木) 00:52:53.55
そんなのイロハだろ?
142デフォルトの名無しさん:2011/03/24(木) 02:37:09.20
アロハだよ
143デフォルトの名無しさん:2011/03/24(木) 10:43:40.20
>>140
最初/bを使ってた時の問題がロゴが出る事だけだったんなら
止まることは何の問題にもなってなかったんじゃ?
144デフォルトの名無しさん:2011/03/24(木) 13:13:54.96
頭悪いの?
145デフォルトの名無しさん:2011/03/24(木) 14:07:08.91
>>144
わからんから説明してくれよ
146デフォルトの名無しさん:2011/03/24(木) 14:14:35.95
>コマンドプロンプトのロゴが出てしまいます。
コマンドプロンプトが出てしまいます。
147デフォルトの名無しさん:2011/03/24(木) 15:27:19.69
わからんちゅうのはなにがわからんのかなぜわからのかわからんからなw
148デフォルトの名無しさん:2011/03/24(木) 19:12:04.02
日本語に不自由してるみたいだな
149デフォルトの名無しさん:2011/03/24(木) 20:38:56.65
んが1つ足りないようだな
150デフォルトの名無しさん:2011/03/24(木) 21:07:30.89
うんん
151デフォルトの名無しさん:2011/03/24(木) 21:08:50.98
vbsからbatをプロンプト非表示で起動したい

しかし

このようにお願いします

ファイルの場所
rscript\c1.vbs
↑実行ファイル
rscript\tool\aw1.bat
↑vbsから実行されるbatファイル
152デフォルトの名無しさん:2011/03/24(木) 21:26:23.29
>>151
プロンプトを非表示でbatを実行するためのvbsって微妙にスレチな気も…

c1.vbs
WScript.CreateObject("WScript.Shell").Run "tool\aw1.bat", 0
153デフォルトの名無しさん:2011/03/25(金) 01:41:16.90
キー操作のCTRL+Zを自動入力させたいのですが、set /p input=0x1aとやってもうまくいきません。
どうすればうまくいくかご教授お願い致します。環境はWindowsXP SP3です。
154デフォルトの名無しさん:2011/03/25(金) 01:54:56.01
できません
155デフォルトの名無しさん:2011/03/25(金) 05:47:40.05
>>153
別プロセスのVBS立ち上げてSendKeys使えばOK
156デフォルトの名無しさん:2011/03/25(金) 18:23:54.67
>>154
あほにはできないw
157デフォルトの名無しさん:2011/03/25(金) 21:00:47.16
なにがやりたいのか?
158デフォルトの名無しさん:2011/03/26(土) 07:56:35.56
>>153
その1バイト分の0x1aをバイナリエディタで入力して
適当なファイル名で保存し、入力リダイレクトに使うってのはどう?
159デフォルトの名無しさん:2011/03/26(土) 11:59:31.16
ロジクールSetPoint.exeの再起動をbat or vbsで行いたいです
taskkillでプログラムを終了→プログラムを起動
との事ですが全くわかりません…良ければご教示お願い致します
160デフォルトの名無しさん:2011/03/26(土) 14:39:28.04
vbsならtaskkill使う必要ないけどね
まぁスレ違いだけど
161デフォルトの名無しさん:2011/03/26(土) 16:06:06.56
162デフォルトの名無しさん:2011/03/26(土) 16:08:00.90
>>159
@echo off
taskkill /im SetPoint.exe
start SetPoint.exe
163デフォルトの名無しさん:2011/03/26(土) 18:33:29.39
CTRL+Z はどうした
164デフォルトの名無しさん:2011/03/26(土) 19:22:33.87
>>162
ありがとうございます
ですがすいません終了しなかったり終了しても再起動してくれないことが多いですorz
165デフォルトの名無しさん:2011/03/26(土) 19:29:55.33
終了の待ち合わせが必要なんじゃね?
あいだに
sleep 10

ping -n 10 localhost
入れてみ
166デフォルトの名無しさん:2011/03/26(土) 19:45:49.77
>>165
ありがとうございます
ですが言う事聞きません…
再起動の方はディレイかければいけそうです
1/30回しか正常に動作してませんので検証不足ですがorz
167デフォルトの名無しさん:2011/03/26(土) 19:47:44.88
話から別物だとはわかっちゃいるけどファイル名に懐かしいものを思い出したw
http://about-threats.trendmicro.com/ArchiveMalware.aspx?language=jp&name=WORM_RBOT.BNV
168デフォルトの名無しさん:2011/03/26(土) 20:02:31.70
@echo off
taskkill /im SetPoint.exe
ping -n 10 localhost
taskkill /f /im SetPoint.exe
start SetPoint.exe
169デフォルトの名無しさん:2011/03/26(土) 20:08:54.36
timeoutなんていうコマンドの存在をつい最近知った俺…

2000の時からあるなんて知らなかったorz
170デフォルトの名無しさん:2011/03/26(土) 20:09:50.35
>>168
ありがとうございます
/f付けとくといけるみたいですがタスクトレイにアイコンが残ってしまいます
強制終了以外に何かいい案ないでしょうか

あと待ち時間は
sleep 10
ping -n 10 localhost
以外にありますか?
171デフォルトの名無しさん:2011/03/26(土) 20:21:29.55
waitfor signal /t 10

timeout /t 10
172デフォルトの名無しさん:2011/03/26(土) 22:02:18.81
>>171
ありがとうございます
色々ググッたんですがトレイにアイコン残るのは仕様みたいですね
これで使わせてもらいます
ご回答いただいた皆様ありがとうございました
173デフォルトの名無しさん:2011/03/27(日) 12:31:03.80
XCOPY V:\ts\*.mp4 "\\nas\contents" /D /M
録画機から自動エンコしたファイルをこのバッチからNASに飛ばすようにしてるんですが
どうしても同名ファイルがあるとyes/noで止まったままなんです
これをスキップして処理を継続することは出来ないのでしょうか

174デフォルトの名無しさん:2011/03/27(日) 12:36:41.33
help見ただけだけど、replace /aかな?
175デフォルトの名無しさん:2011/03/27(日) 12:38:13.43
/y スイッチ
176デフォルトの名無しさん:2011/03/27(日) 15:05:20.53
/yはスキップせずに上書きしちまうだろ。
177デフォルトの名無しさん:2011/03/27(日) 15:08:14.78
yes n
とかすりゃいいんじゃねーの
178デフォルトの名無しさん:2011/03/27(日) 15:23:45.42
送り先ファイルの存在確認してリネームして送る
179デフォルトの名無しさん:2011/03/27(日) 15:39:10.83
yes/noで止まるのをスキップしたいのかと思ったんだが違うのか
古いファイルなんか残してどうすんの
180デフォルトの名無しさん:2011/03/27(日) 16:37:33.49
ああ、スキップするって単純に送らないでそのファイルを飛ばすって意味だったんかな?
だったら存在確認してリネームじゃなく単純に送らないだけだが。

ts\*.mp4って送り先からてっきり色々パラメータ変えてエンコした結果で
同名ファイルがあるものだと思ってたわ。
上書きしちゃ比較にならんからその線も除外してた。
181デフォルトの名無しさん:2011/03/27(日) 17:48:00.25
robocopyは?
182デフォルトの名無しさん:2011/03/27(日) 18:54:37.00
>>181
ここはそういう板じゃねーんだよ。ソフト板で頑張りな。
183デフォルトの名無しさん:2011/03/27(日) 19:54:02.73
>>173-180
情報不足ですいません
>>180さんの言う通り
受け側の同名ファイルの中身は別物ですので、送り側のファイルに置き換わってしまっては困ります
そこはスキップして後々手動でリネームする予定でした
ですので

bat実行
A.mp4←コピー済み
B.mp4←コピー済み
C.mp4(このファイルは転送先に既に同名ファイルが存在する、中身は別) 上書きyes/no選択肢が出て止まったまま
D.mp4←このファイルはまだコピーされていない
E.mp4←このファイルはまだコピーされていない

このC.mp4の判断をスキップしたいのです
調べ限りバッチではどう記述していいかわかりませんでした
184デフォルトの名無しさん:2011/03/27(日) 20:03:03.65
リネームしてからコピーしたほうが楽じゃね?
185デフォルトの名無しさん:2011/03/27(日) 20:17:10.23
コピー前に
xcopy source destination /d /a /u /l > list.txt
でリネーム対称ファイル名を取得して for /f 文でリネームするとか。
186デフォルトの名無しさん:2011/03/27(日) 20:59:05.72
copyhereなら勝手に(n)付けてくれる
187デフォルトの名無しさん:2011/03/27(日) 21:00:09.52
>>186
小学生は早く寝ろ
188デフォルトの名無しさん:2011/03/27(日) 21:29:08.36
自動エンコなら公衆便所掃ジャーだな
189デフォルトの名無しさん:2011/03/28(月) 16:27:24.43
>>185
それ、/y スイッチを追加しないと途中で止まる

コピー元の同名ファイルは、A属性を一時的にクリアすればコピーされない
190デフォルトの名無しさん:2011/03/28(月) 16:40:20.06
rsyncつかえ
191デフォルトの名無しさん:2011/03/28(月) 17:27:45.44
どっちにしろ自分でファイル名を変えなくちゃならん
あとは copy でも何でもいいだろ
192デフォルトの名無しさん:2011/03/28(月) 17:29:23.03
rsyncやcopyhereなら勝手に変えてくれるだろがw
193デフォルトの名無しさん:2011/03/28(月) 17:38:36.30
>>190=192
社会経験ゼロの厨房がw
そんな物が使えれば誰も苦労せんわ、馬鹿が。
194デフォルトの名無しさん:2011/03/28(月) 17:39:07.38
それでいいならな
似たような名前でわかりにくくなるだろ
結局、自分で変更することになるんじゃ?
195デフォルトの名無しさん:2011/03/28(月) 17:41:30.81
>>194>>192へのレスね
196デフォルトの名無しさん:2011/03/28(月) 17:55:44.21
そんな物も使えん馬鹿が苦労してるわ。
197デフォルトの名無しさん:2011/03/28(月) 18:47:54.29
俺は>>193じゃない。
質問者が使えるかどうかは知らん。
198デフォルトの名無しさん:2011/03/28(月) 19:18:05.42
公衆便所掃ジャーがよっぽど使える
199デフォルトの名無しさん:2011/03/28(月) 19:23:17.00
なんか使いたくないソフト名だなw
200デフォルトの名無しさん:2011/03/28(月) 22:22:58.43
>>196
使うことを禁じられてんだよ
まともな会社で働いてから物言え糞ニート
201デフォルトの名無しさん:2011/03/28(月) 22:30:09.14
原発の作業員並みの環境だな
ヘリコプターで水かけてたのはいったい何だったんだろう
馬鹿の指示で動く兵隊は大変だな
202デフォルトの名無しさん:2011/03/28(月) 22:32:34.35
【原発問題】 「この防護服で大丈夫?」 放射性物質広がり作業員不安
http://raicho.2ch.net/test/read.cgi/newsplus/1301313557/
203デフォルトの名無しさん:2011/03/28(月) 22:34:22.73
お前みたいな馬鹿がいるから禁止してんだろw
会社も大変だなw
204デフォルトの名無しさん:2011/03/28(月) 22:46:05.94
こういう社畜根性のバカばっかだから世の中がいつまでたってもまともになんないんだよな
205デフォルトの名無しさん:2011/03/28(月) 23:15:15.41
>>183
コピー先に日付のディレクトリ作って、そこにコピーすれば良いじゃん
206デフォルトの名無しさん:2011/03/29(火) 00:10:15.73
つまらんから次どうぞ
207デフォルトの名無しさん:2011/03/29(火) 01:30:24.01
何でこのスレが常時伸びてるのか意味不明なんですが?
208デフォルトの名無しさん:2011/03/29(火) 08:33:43.00
つまらんから次どうぞ
209デフォルトの名無しさん:2011/03/29(火) 10:34:01.78
>>183
だから単純に
for /f "delims=" %%i in ('dir /b/aa V:\ts\*.mp4') do if not exist "\\nas\contents\%%~nxi" xcopy "%%~i" "\\nas\contents\%%~nxi" /M
こんなんでいいだろ。

俺だったら同名存在したら連番なり日付なり追加リネームしてコピーってのも
バッチ内でやると思うけど。
210デフォルトの名無しさん:2011/03/29(火) 10:51:17.00
dir使って不要なループを避けるならxcopyのコピー対象外(/h無し)の
隠し属性とシステム属性も除外して'dir /b/aa-h-s V:\ts\*.mp4'だな
逆にxcopyのオプションだけで対応するのなら、forの拡張機能は使わないな
211デフォルトの名無しさん:2011/03/29(火) 11:34:28.35
もう質問者は見ていないだろw
212デフォルトの名無しさん:2011/03/29(火) 11:55:37.81
>>210
転送元がmp4な時点でシステム属性とか隠し属性なんて無いと思うけどw
213デフォルトの名無しさん:2011/03/29(火) 12:08:32.89
>>212
録画のシステムが糞なら録画中のファイルがmp4で隠し属性になる可能性あり
214デフォルトの名無しさん:2011/03/29(火) 12:13:02.40
それはコピーしなくていいのか?
215デフォルトの名無しさん:2011/03/29(火) 16:06:21.24
もう質問者の中学生は見ていないだろw
216デフォルトの名無しさん:2011/03/29(火) 17:27:08.46
会社で何してんだ?
217デフォルトの名無しさん:2011/03/29(火) 17:55:35.59
バッチファイルをダブルクリックすると黒いウィンドウが開くんですがなんとかなりませんか?
218デフォルトの名無しさん:2011/03/29(火) 18:08:10.99
color f0
219デフォルトの名無しさん:2011/03/29(火) 18:51:24.99
batファイルのショーカットで起動
起動時の設定は最小化
220デフォルトの名無しさん:2011/03/29(火) 18:52:14.50
問題は黒いではなくウィンドウが開くなんです
221デフォルトの名無しさん:2011/03/29(火) 18:52:22.96
ショートカットだったw
222デフォルトの名無しさん:2011/03/29(火) 18:53:32.29
個々にショートカットを作る以外の方法でお願いします
223デフォルトの名無しさん:2011/03/29(火) 18:57:11.82
batファイルをexeに変換できるツールがどこかにあったような…
224デフォルトの名無しさん:2011/03/29(火) 19:00:12.02
個々にexeを作る以外の方法でお願いします
225デフォルトの名無しさん:2011/03/29(火) 19:01:55.01
関連付けのopenを
cmd.exe /c start /b "%1"
に変えればよくね?
226デフォルトの名無しさん:2011/03/29(火) 19:04:52.25
よくねえ
227デフォルトの名無しさん:2011/03/29(火) 19:09:43.97
start /b "" "%1" かな?
228デフォルトの名無しさん:2011/03/29(火) 19:11:03.32
start /min "" "%1" かな?
229デフォルトの名無しさん:2011/03/29(火) 19:12:20.64
>>227
よくねえ
230デフォルトの名無しさん:2011/03/29(火) 19:16:29.59
/B 新しいウィンドウを作成せずにアプリケーションを起動します。

なのに変だね
231デフォルトの名無しさん:2011/03/29(火) 19:19:32.67
どっちにしろ黒いのがチラッと…
232デフォルトの名無しさん:2011/03/29(火) 19:29:20.70
>>228
よくねえ
ちったぁ試してから言えよ
役立たずばっか
233デフォルトの名無しさん:2011/03/29(火) 19:34:37.91
試すわけないだろw 質問者が試せよw
234デフォルトの名無しさん:2011/03/29(火) 20:50:36.04
試さなくたって分かるが?
235デフォルトの名無しさん:2011/03/29(火) 20:56:01.72
だったら正解は?
236デフォルトの名無しさん:2011/03/29(火) 21:26:26.84
cmd.exe /c start /min cmd.exe /c "%1"
だよ
237デフォルトの名無しさん:2011/03/29(火) 22:17:46.12
WScript.CreateObject("WScript.Shell").Run """" & WScript.Arguments.Item(0) & """", 0
だな
238デフォルトの名無しさん:2011/03/29(火) 22:52:37.67
それも言うなら
mshta.exe vbscript:close(CreateObject("WScript.Shell").Run("""%1""",0))
だな
239デフォルトの名無しさん:2011/03/29(火) 23:03:31.35
ウィンドウは出したいけどアクティブにしないでっていうのは?
240デフォルトの名無しさん:2011/03/30(水) 00:15:50.37
俺はアホなので試してみたんだが、
>>236>>231
>>237>>238 は 動かん
241デフォルトの名無しさん:2011/03/30(水) 00:31:59.08
>>236 は batファイルにD&Dが効かなくなるな
242デフォルトの名無しさん:2011/03/30(水) 01:19:39.53
すまんな、試してないんで
>>240
mshta.exe vbscript:close(CreateObject("WScript.Shell").Run("cmd.exe /c ""%1""",0))
ただし>>241

>>241
cmd.exe /c start /min cmd.exe /c "%1" %*
ただし>>240

外部ファイルを作れば別だが、どっちもと言うわけにはいかんな
243デフォルトの名無しさん:2011/03/30(水) 10:20:08.25
保存する場所と名前は適当に変えてくれ
WScript C:\callbat.vbs %*

-- C:\callbat.vbs --
strCmd = "cmd.exe /c"
For i=0 To WScript.Arguments.Length - 1
strBuf = WScript.Arguments.Item(i)
If InStr( 1, strBuf, " ", 1 ) = 0 Then
strCmd = strCmd + " " + strBuf
Else
strCmd = strCmd + " " + """" + strBuf + """"
End If
Next
WScript.CreateObject("WScript.Shell").Run strCmd, 0
244デフォルトの名無しさん:2011/03/30(水) 16:45:56.57
それより
cmd.exe /c
のショートカット作って
c:\hoge.lnk "%1" %*
でいいんじゃね
245デフォルトの名無しさん:2011/03/31(木) 02:37:30.94
それ以前にもう .bat なんか捨てろ!!!!捨てろ!!!!
もういいだろっ…
こんな…ゲイツの気まぐれにっ…!!!!
いっぱい!!!!いっぱい(SEが)死んだんだぞ!!!!
246244:2011/03/31(木) 02:42:04.35
ちなみに、ダブルクォーテーションエスケープでの %1 は
「何が起こっても不思議じゃない」
という覚悟でもなければもう書けない。

…マジで…ゲイツ氏ね…
247デフォルトの名無しさん:2011/03/31(木) 04:09:00.19
>>246>>244
いみふ
大体詐称すな
248デフォルトの名無しさん:2011/03/31(木) 04:51:37.89
コマンド プロンプトのデフォのウインドウ位置を弄れ。
ぎりぎり外へ押しやれば起動しても見えなくなるぞw
249デフォルトの名無しさん:2011/03/31(木) 08:07:57.34
タスクバーに出るのもアウトらしいからw
250デフォルトの名無しさん:2011/03/31(木) 08:20:55.05
ウイルスでも作りたいのかw
251デフォルトの名無しさん:2011/03/31(木) 16:57:38.69
>>183
コピー先のリストをdirとかで取って/EXCLUDEに指定すればどうかな?
252デフォルトの名無しさん:2011/03/31(木) 18:57:48.74
作業フォルダにxcopyして、そこからreplace /aでターゲットに
253デフォルトの名無しさん:2011/03/31(木) 22:12:32.06
>>249
いつ、そんな条件が追加されたんだ?
254デフォルトの名無しさん:2011/04/01(金) 19:26:50.48
1582年6月13日
255デフォルトの名無しさん:2011/04/01(金) 22:46:47.79
質問です。
下のバッチで、1個目と2個目の echo の表示が
ユニコード文字があると化けるんだけど
仕様なの?

for /f %%i in ('dir /b') do (
echo "%%i"
echo "%%~i"
echo "%%~nxi"
)
256デフォルトの名無しさん:2011/04/02(土) 00:46:19.04
ユニコード文字って何?
大概の文字はユニコードだけど?
257デフォルトの名無しさん:2011/04/02(土) 01:09:33.23
シフトJISにない文字のことじゃね?
258デフォルトの名無しさん:2011/04/02(土) 01:13:41.77
だったら仕様だな
259デフォルトの名無しさん:2011/04/02(土) 01:18:58.42
for %%i in (*) do (
echo "%%i"
echo "%%~i"
echo "%%~nxi"
)

なら化けんよ
260デフォルトの名無しさん:2011/04/02(土) 01:35:40.37
ありがとうございます。やっぱ仕様ですか。
ユニコード特有の文字のことでした。
261デフォルトの名無しさん:2011/04/02(土) 01:45:47.51
>ユニコード特有の文字のことでした。
だから意味不明だと言っとるだろがぼけ
262デフォルトの名無しさん:2011/04/02(土) 01:54:13.53
うるせハゲ
263デフォルトの名無しさん:2011/04/02(土) 01:56:31.10
だまれデブ
264デフォルトの名無しさん:2011/04/02(土) 01:57:21.57
禿げてないけどぼけ
265デフォルトの名無しさん:2011/04/02(土) 01:58:06.19
デブでないけどぼけ
266デフォルトの名無しさん:2011/04/02(土) 01:59:25.93
ユニコード特有の文字って何だよぼけ
267デフォルトの名無しさん:2011/04/02(土) 02:00:31.99
>>266
ユニコード制御文字
268デフォルトの名無しさん:2011/04/02(土) 02:02:30.29
ぐぐれカス
269デフォルトの名無しさん:2011/04/02(土) 02:06:34.42
カスらっくだぼけ
270デフォルトの名無しさん:2011/04/02(土) 02:09:27.91
UNCパス上のバッチファイル実行するとサポートしてない云々のメッセージが出るけど、
これってカレントが強制的に%WINDIR%にされてるのかね?
> nul で抑制できないけど、取り合えずバッチは動いてるみたい
支障が出る or 出そうな状況ってありますか?
271デフォルトの名無しさん:2011/04/02(土) 02:10:04.30
>>267
確かに。だが、ボケはユニコード制御文字のことを言ってるのか?
272デフォルトの名無しさん:2011/04/02(土) 02:12:29.78
>>270
相対パス使ってると支障でるんじゃね?
取り合えずUNC使う時はpushdとpopd使うようにしてる。
273270:2011/04/02(土) 03:00:19.58
>>272
なるほど<相対パス
今pushd/popdで試してみたら、やっぱ起動時のカレントは
C:\Windowsになってた@Win7

バッチ内で何かの実行ファイルをキックするような内容程度なら、
全部絶対パスで渡してやれば特に問題ないのかな
274デフォルトの名無しさん:2011/04/02(土) 05:30:09.48
>>258
仕様ってどういう仕様?
275デフォルトの名無しさん:2011/04/02(土) 06:19:58.70
cmd /a
276デフォルトの名無しさん:2011/04/02(土) 07:48:37.83
cmd /u で実行しても化けるよボケ
277デフォルトの名無しさん:2011/04/02(土) 08:09:08.88
丂丄丅丌丒丟丣两丫丮丯
278デフォルトの名無しさん:2011/04/02(土) 08:26:15.20
上みたいな字が混じってると
>>209みたいなのが誤動作する可能性があるんだよボケ
279デフォルトの名無しさん:2011/04/02(土) 08:46:12.84
文字コードの話になると、すぐ>>256みたいなガキが出てくるのなw
280デフォルトの名無しさん:2011/04/02(土) 09:22:43.72
>>279
仕様だ。
281デフォルトの名無しさん:2011/04/02(土) 12:48:13.93
>>278
もう古い時代のバッチに拘るな
282デフォルトの名無しさん:2011/04/02(土) 16:20:37.26
>>281
拘ってるのは、知識もスキルもない窓際管理職と掃き溜め管理部門だけ
283デフォルトの名無しさん:2011/04/02(土) 17:33:13.38
>>276
cmd /u で実行したら化けないとは言ってないよボケ
/aと/uは出力を変えるだけだボケ
入力はa固定だボケ
284デフォルトの名無しさん:2011/04/02(土) 17:35:32.15
>>278
>>277はユニコード特有の文字か?ボケ
285デフォルトの名無しさん:2011/04/02(土) 17:41:43.99
(厨)皆いい年こいたおっさんです
286デフォルトの名無しさん:2011/04/02(土) 18:55:32.21
いい年こいてるからボケてるんだよボケ
287デフォルトの名無しさん:2011/04/02(土) 19:40:44.78
若年性もあるよボケ
288デフォルトの名無しさん:2011/04/03(日) 17:50:43.52
あほぼけかすもユニコード特有の文字か?ボケ
289デフォルトの名無しさん:2011/04/03(日) 17:59:29.90
何言ってるか分からんよボケ
290デフォルトの名無しさん:2011/04/03(日) 18:14:08.41
C:\test.batというバッチファイルがあります。
『バッチファイルの内容』
----------------ここから
myprogram %1
----------------ここまで

myprogramというのは自作のプログラムです。」
このプログラムに引数を渡したいのですが、引数が「aaa bbb ccc」というふうに3つのキーワードを入れると、バッチファイルではaaaしか認識しません。
myprogram %1 %2 %3と書くことで取得できるのですが、引数に入れるキーワードの数は2個以上でいつも不規則な数になってます。
myprogram "%1"と書いても取得できませんでした
どのようにして%1のみで全てを取得する事ができますでしょうか?
291デフォルトの名無しさん:2011/04/03(日) 18:25:59.37
>290
"%~f1" でOK。(ただしWindows95/98/Meでは不可)
292デフォルトの名無しさん:2011/04/03(日) 18:33:29.11
>>291
何言ってるか分からんよボケ
293デフォルトの名無しさん:2011/04/03(日) 18:35:37.02
%*でいいんじゃね
294デフォルトの名無しさん:2011/04/03(日) 18:37:21.02
>>291
ありがとうございます;;大変助かりました
295デフォルトの名無しさん:2011/04/03(日) 19:07:54.37
そんなわけねーよ
296デフォルトの名無しさん:2011/04/03(日) 19:23:07.99
何でそんなわけねーんだよ?
297デフォルトの名無しさん:2011/04/04(月) 10:38:51.40
指定した文字から、指定した文字までを削除するバッチってどうやるんでしょうか?
ai-1234_ueo.text
変換後
aiueo.text
298デフォルトの名無しさん:2011/04/04(月) 12:55:20.48
「-1234_」を抜くって意味なら
set a=ai-1234_ueo.text
echo %a:-1234_=%

「-」〜「_」までなら
set a=ai-1234_ueo.text
set b=%a:*-=%
call echo %%a:-%b%=%%%%a:*_=%%
299デフォルトの名無しさん:2011/04/04(月) 13:09:46.41
ありがとうございます。
300デフォルトの名無しさん:2011/04/04(月) 21:47:14.35
調べ方が悪いと思うんですが、解説サイトを見つけれ無かったので教えてください。
.batを並列で動かそうとしています。

例えば、
body.bat
rem 動かない
start “c:\a.bat“
start “c:\b.bat“

上記なら動かない
下記なら動く

body.bat
rem 動く
start ““ “c:\a.bat“
start ““ “c:\b.bat“

startの後のダブルクォーテーションが必要な理由を教えていただきたいです。
メンドクサイようでしたら、解説サイトを教えて頂けませんか。
宜しくお願いします。
301デフォルトの名無しさん:2011/04/04(月) 22:06:00.22
>>300
start /?
302デフォルトの名無しさん:2011/04/04(月) 22:10:23.82
こういうコマンドの使い方も知らずに適当な事やるやつってなんなんだろうね。
303デフォルトの名無しさん:2011/04/04(月) 23:02:39.82
すぐに見つかったけど

START ["タイトル"] [/Dパス] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [コマンド/プログラム]
[パラメータ]

タイトルは省略可能。ただし、プログラム名が空白を含む等で " " で囲まなければならない場合、

start "C:\Program Files\prog1\prog1.exe"

と書くと、これがタイトルとみなさる。
304デフォルトの名無しさん:2011/04/04(月) 23:37:03.23
それじゃだめだとちょっと前に言ったばっかりだろ
305デフォルトの名無しさん:2011/04/05(火) 22:25:31.81
>301-303さん 返事が遅くなりました。すいません、ありがとうございます。

start /? すいません、初歩でした。

上記を確認後に改めて、中身を確認すると、
a.batは、自作でtitleは書いていない。
b.batは、他人が書いたバッチでtitleを書いていました。
b.batは、タイトル書いているのに、

body.bat
start ““ “c:/b.bat“

と書かないと動きませんでした。
この時のウインドウのタイトルを確認し忘れました。
ウインドウのタイトルがどうなってるのかは、明日、確認します。
start で設定するタイトル ““ とバッチ内で設定するtitleは、設定が違うのでしょうか?

相次ぐ質問で、申し訳御座いません。
お返事は、早くとも明日のこのぐらい時間か、明後日の朝になりますが、お付き合いお願いします。
306デフォルトの名無しさん:2011/04/05(火) 22:36:40.35
壁に激突してください。
307デフォルトの名無しさん:2011/04/05(火) 23:00:48.68
本当、一度死んだ方がいいよな。

タイトルそのものは全然関係無いってのに。
308デフォルトの名無しさん:2011/04/06(水) 01:27:44.04
ひたすら丁寧口調で、自分の望む解凍を得るまで粘る、ってのがここ数年多いよね
気に入らない回答には罵倒して煽る、みたいなのがたくさんいた昔の方が
健全だったように思える
309デフォルトの名無しさん:2011/04/06(水) 04:05:22.68
>お付き合いお願いします。
お断りします。
310デフォルトの名無しさん:2011/04/06(水) 07:35:16.89
検索で何となくたどり着き、Q&Aサイトか何かと勘違いしてるんだろう。
ここが何なのかも分からずに。
311デフォルトの名無しさん:2011/04/06(水) 13:25:39.50
>>301-303
こういうコマンドの使い方も知らずに適当な事やるやつってなんなんだろうね。
312デフォルトの名無しさん:2011/04/06(水) 13:57:29.48
>>305
["タイトル"] [コマンド/プログラム]
は位置パラメタなんだよ
313デフォルトの名無しさん:2011/04/06(水) 14:07:28.74
314デフォルトの名無しさん:2011/04/06(水) 15:21:02.65
FreeDOS暦10年の俺からすると温い質問ばっかりで飽き飽きするぜ
315デフォルトの名無しさん:2011/04/06(水) 16:02:48.17
>>314
| 釣れまっか?                ,
\                         ,/ヽ
   ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄         ,/   ヽ
   ∧_∧          ∧∧  ,/         ヽ
  ( ´∀`)         (゚Д゚,,),/            ヽ
  (    )      (|  つ@               ヽ
  | | |   ___ 〜|  |                ヽ
  (__)_) |――|.  ∪∪                     ヽ
   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|                 ヽ
  /⌒\/⌒\/⌒\/⌒\|彡~゚ ゜~ ~。゜ ~ ~ ~ ~~ ~ ~~ ~ ~~ ~~ ~~
  ⌒\/⌒\/⌒\/⌒\/⌒\彡 〜 〜〜 〜〜 〜〜 〜 〜
316デフォルトの名無しさん:2011/04/06(水) 20:22:13.46
ぼちぼちでんな
317デフォルトの名無しさん:2011/04/06(水) 23:23:32.93
set /pで記号入力させて処理するの書いてるんだが
%と&でバグるのはやっぱ防げないかね
318デフォルトの名無しさん:2011/04/07(木) 00:00:35.47
状況が不明だけどこういう違い?


@echo off
cls
set /p asdgf=
echo echo %asdgf%
echo %asdgf%
echo echo "%asdgf%"
echo "%asdgf%"
@echo on
set asdgf=%asdgf:&=^^^&%
@echo off
echo echo %asdgf%
echo %asdgf%
echo echo "%asdgf%"
echo "%asdgf%"
319デフォルトの名無しさん:2011/04/07(木) 00:33:38.40
>>317
!の遅延展開を使えばええだがや
320デフォルトの名無しさん:2011/04/07(木) 00:34:01.76
ちょっと違った
ファイル名に%や&が入ってるときに
それを取り込もうとしてエラー出てた。
321デフォルトの名無しさん:2011/04/07(木) 01:15:03.79
@echo off
for /F "delims=" %%f in ('dir /b *.txt') do call :main "%%f"
goto :EOF
:main
set fname=%~n1
echo %fname%


取り込みファイル名:%abc.txx
結果:abc
322デフォルトの名無しさん:2011/04/07(木) 02:15:02.22
>>321
!の遅延展開を使えばええだがや
323デフォルトの名無しさん:2011/04/07(木) 03:08:33.98
start "タイトル" "コマンド/プログラム" でタイトル変えない方法ないの?
324デフォルトの名無しさん:2011/04/07(木) 09:00:05.42
だからお前は壁に激突しろと
325デフォルトの名無しさん:2011/04/07(木) 09:24:06.60
カレントディレクトリが表示されるだけだし
start "%cd%"とかでいいんじゃねーの
326デフォルトの名無しさん:2011/04/07(木) 09:53:33.10
>>322
遅延展開も試しが無理だったがや
327デフォルトの名無しさん:2011/04/07(木) 10:18:30.88
%abc.txx
328デフォルトの名無しさん:2011/04/07(木) 10:20:26.53
@echo off
setlocal enabledelayedexpansion
for /F "delims=" %%f in ('dir /b *.txt') do call :main "%%f"
goto :EOF
:main
set fname=%~n1
echo !fname!
endlocal

これでもだめだった。
for do~のあとにset fnameとやればできるんだが
do callで遅延展開でできないのは謎
329デフォルトの名無しさん:2011/04/07(木) 10:21:03.65
>>327
誤字五時
330デフォルトの名無しさん:2011/04/07(木) 11:24:10.03
んなこたぁ分かってるんだよ
ちゃんと訂正しなよレス欲しいんなら

@echo off
setlocal enabledelayedexpansion
for /F "delims=" %%f in ('dir /b *.txt') do (
set "a=%%f"
set "a=!a:%%=%%%%!"
call :main "!a!"
)
pause
endlocal
goto :EOF
:main
set "fname=%~n1"
echo "!fname!"
331デフォルトの名無しさん:2011/04/07(木) 12:04:03.11
>>330
すまんかった。
そしてサンクス
332デフォルトの名無しさん:2011/04/07(木) 12:14:37.03
ちなみに上の奴は ! の対策してないから
a!b!c.txt とかが ac になったり
333デフォルトの名無しさん:2011/04/07(木) 17:00:19.67
@echo off
for /f "delims=" %%f in ('dir /b *.txt') do set "a=%%f" & call :b
pause & exit
:b
setlocal enabledelayedexpansion
set "a=!a:%%=%%%%!"
endlocal & call :main "%a%"
goto :eof
:main
set "fname=%~n1"
echo "%fname%"

"!" に対応したところで完全じゃない(>>278 とか)
334デフォルトの名無しさん:2011/04/07(木) 17:07:49.53
>>333
やりおる
335デフォルトの名無しさん:2011/04/07(木) 17:18:42.38
^も^^になるな
336デフォルトの名無しさん:2011/04/07(木) 23:35:09.90
やりたくないな
そこまでしてなにがしたいんだか
337デフォルトの名無しさん:2011/04/08(金) 00:27:12.19
>>336
小学生は早く寝ろ
338デフォルトの名無しさん:2011/04/08(金) 08:08:51.13
>>335はmain側で対応するしかなさそう
echo "%fname:^^=^%"
339デフォルトの名無しさん:2011/04/08(金) 19:41:11.92
DOSでchcp 65001とutf-8で表示できるのですが、毎回入力するのが面倒なのでbatファイルにしたいのですが
フォルダの位置はc:\code\2011\にしたいので
chcp 65001
cd c:\code\2011\
と書いてbatファイルにしたのですが画面が表示されてすぐきえてしまいます
どのようにしたら普通にDOSを立ち上げたときの状態に上のコマンドを実行した状態にできるのでしょうか?
340デフォルトの名無しさん:2011/04/08(金) 20:39:41.20
@echo off
cd c:\code\2011\
cmd /k chcp 65001
341デフォルトの名無しさん:2011/04/08(金) 21:40:22.49
cmd /k chcp 65001
のショートカットにすればよい
342デフォルトの名無しさん:2011/04/08(金) 22:17:39.23
>>341
すれ違い
343デフォルトの名無しさん:2011/04/08(金) 22:47:52.49
ありがとうございます
使わせていただきます
344デフォルトの名無しさん:2011/04/10(日) 11:01:48.83
バッチファイルに放り込まれたファイルの
パスを拡張子だけ抜いて指定場所に書き込みたいのですが、
\の処理がうまくいきません どう記述するのが正しいのでしょうか?
perl -Mencoding=cp932 -pe s/"Filedpn"/"%~d1\%~p1\%~n1"/ template.avs > "%~n1.avs"
345デフォルトの名無しさん:2011/04/10(日) 11:18:52.68
バッチの問題じゃない。perlが`\'を解釈している。
346デフォルトの名無しさん:2011/04/10(日) 11:20:42.05
>>345
おおう・・・ 実はperlのスレから誘導されてきたんです
どうしたものか・・・
347デフォルトの名無しさん:2011/04/10(日) 11:55:33.60
お前、脳みそ無いの?

\ → \\
348デフォルトの名無しさん:2011/04/10(日) 12:11:07.50
すれ違い
349デフォルトの名無しさん:2011/04/10(日) 12:36:51.40
>>344
単純に"Filedpn" → "%~d1%~p1%~n1" なら、

"s/\"Filedpn\"/\"%%~d1%%~p1%%~n1\"/"
350デフォルトの名無しさん:2011/04/12(火) 22:20:20.51
streamの有無の判定は?
if exist file:stream (echo Y) else echo N
うまく行かん
351デフォルトの名無しさん:2011/04/13(水) 19:48:52.78
■a.bat
file=sample_2011_04_01.txt

■b.bat

a.batに変数fileにファイル名を格納した場合
b.batでa.batの変数を利用するにはb.batでどのように書くのでしょうか?
352デフォルトの名無しさん:2011/04/13(水) 21:22:06.66
call a.bat
echo %file%
353デフォルトの名無しさん:2011/04/16(土) 22:28:42.25
コマンドプロンプトで実行するとコマンドプロンプトに文字列を出力するプログラムがあります

ファイル名を指定して実行で
cmd /k test.exe
としたのですが、batファイルにpauseを書いたようにしてプログラムの出力が終わったらキーボードをワンプッシュでコマンドプロンプトを閉じたいのですが無理でしょうか?
batファイルでないとできませんでしょうか?
354デフォルトの名無しさん:2011/04/16(土) 22:31:14.10
cmd /k test.exe&pause
355デフォルトの名無しさん:2011/04/16(土) 22:51:39.71
cmd /c test.exe & pause
356デフォルトの名無しさん:2011/04/16(土) 23:13:22.46
cmd /k test.exe & pause & exit
357デフォルトの名無しさん:2011/04/16(土) 23:27:57.43
完璧です!ありがとうございます!
358デフォルトの名無しさん:2011/04/16(土) 23:48:50.05
if exist 357 (echo さようなら) else (echo もういなくね?)
359デフォルトの名無しさん:2011/04/17(日) 04:29:54.78
すみません、動画エンコードソフトの「HandBreak」のコマンドライン実行で、
以下のサイトのバッチを、サブフォルダ以下にも再帰的に実行させることはできますか?

http://bluemoonjp.blog96.fc2.com/blog-entry-22.html

出力先のフォルダに、ソースフォルダのディレクトリ構造を再現し、エンコードをおこないたいです。
(出力先の指定ディレクトリが存在しない場合は、HandBreak側で生成されます)

できれば、出力先フォルダでのファイル有無を見て、存在する場合はパスしたいです。
バッチファイルでそこまでって無理でしょうか。
360デフォルトの名無しさん:2011/04/17(日) 08:52:44.95
>>359
出来なくはないけどperlとかpython使った方が楽じゃね?
361デフォルトの名無しさん:2011/04/17(日) 09:52:32.69
`dir /s /b /a:d`取り込めばいいんじゃねーの
362デフォルトの名無しさん:2011/04/17(日) 11:25:41.91
Haskell推奨
363デフォルトの名無しさん:2011/04/17(日) 15:56:06.34
>>359
for /dつかえば
364デフォルトの名無しさん:2011/04/17(日) 16:14:58.67
ファイル名を指定して実行でcmd /k d:でDドライブに移動できますが
D:\2010\test\に移動したいのですが
cmd /k d: cd 2010\testとやってもD:\のままになってしまいます
無理でしょうか?
365デフォルトの名無しさん:2011/04/17(日) 16:21:50.10
cd /?
366デフォルトの名無しさん:2011/04/17(日) 16:22:25.25
>>364
出来なくはないけどperlとかpython使った方が楽じゃね
367デフォルトの名無しさん:2011/04/17(日) 20:14:51.69
cd /d
368デフォルトの名無しさん:2011/04/17(日) 20:37:42.74
pushd
369デフォルトの名無しさん:2011/04/17(日) 20:57:56.96
プロンプトを立ち上げた状態で cd /dは効くのですが
ファイル名を指定して実行でcmd /k d: cd /d 2010\testとやってもD:\のままになります
使い方が間違ってるのでしょうか?
370デフォルトの名無しさん:2011/04/17(日) 21:22:41.64
cmd /k d: && 2010\test
371デフォルトの名無しさん:2011/04/17(日) 22:05:57.33
>>369
d: cd /d …
これで一つのコマンドだろ。そんなコマンド無いから
本来エラーで何も起きなくてもおかしくないが
偶然、d: の後が無視される仕様だからだけ動いてただけ。
372デフォルトの名無しさん:2011/04/18(月) 00:16:02.42
ありがとうございます
373デフォルトの名無しさん:2011/04/20(水) 14:13:06.13
どういたしまして
374デフォルトの名無しさん:2011/04/21(木) 23:01:57.11
ちょっとした疑問なのですが%~dp0や%~dpn0などの特殊な変数?はどこかにドキュメントはないものでしょうか?
helpコマンドを見てみましたが見つかりませんでした
%~0で引数の0番目(ここではバッチファイル名)、dはドライブ、pはディレクトリ、nはファイル名という部分的なパスを取得するというのは実行結果からわかるのですが、
こういったことが書いてあるヘルプはないものかと思いまして
375デフォルトの名無しさん:2011/04/21(木) 23:48:03.20
forコマンドのヘルプに載ってるよ
376デフォルトの名無しさん:2011/04/22(金) 00:32:07.89
call/?だろ
377デフォルトの名無しさん:2011/04/22(金) 01:16:31.09
ありがとうございます
378デフォルトの名無しさん:2011/04/22(金) 15:10:34.67
どういたしまして
379デフォルトの名無しさん:2011/04/25(月) 09:14:59.50
明示的に環境引数の変化を受け継ぎたい時以外は
call foo.bat
より
start /wait cmd.exe /c foo.bat
の方が影響受けづらくていいな。exit で親まで巻き添えにされたりすることもないし。
380デフォルトの名無しさん:2011/04/25(月) 11:38:51.26
setlocal

if "%a"=="a" (call :temp_a) else (call :temp_b)
goto eof

:temp_a
echo a
exit /b

:temp_b
echo_b
exit /b

:eof
endlocal
381デフォルトの名無しさん:2011/04/25(月) 11:43:56.35
そういうのをうだうだやらなくて済むって話
382デフォルトの名無しさん:2011/04/25(月) 12:51:52.37
set aa=aa
start /wait cmd.exe /c foo.bat aa
echo %aa%

-foo.bat
echo %*
echo %aa%
set aa=bb
383デフォルトの名無しさん:2011/04/25(月) 16:27:36.12
>>379
惜しいな
cmd.exe /c foo.bat
でいいよ
384デフォルトの名無しさん:2011/04/25(月) 19:03:33.39
>>380
関係無いけど goto :eof と goto eof 使い分けるのは初心者イジメだなw
385デフォルトの名無しさん:2011/04/26(火) 14:11:26.61
>384
関係あるよ
>>380は単なる初心者だろ
goto :eofを知らない だからexit/bを使う
endlocalは不要を知らない
386デフォルトの名無しさん:2011/04/26(火) 14:32:45.57
>>385()
387デフォルトの名無しさん:2011/04/26(火) 16:21:43.93
eofがどうとか言う以前に突っ込み所多すぎだろ。

動かないバッチ前にして何をグダグダやってんだか。
388デフォルトの名無しさん:2011/04/26(火) 16:26:42.93
>>387
何をグダグダやってんだか。
389デフォルトの名無しさん:2011/04/26(火) 16:37:19.77
>>387
ほれ ぐだぐだ
390デフォルトの名無しさん:2011/04/26(火) 17:06:34.80
endlocalは不要を知らない
endlocalは不要を知らない
endlocalは不要を知らない
391デフォルトの名無しさん:2011/04/26(火) 18:56:16.13
何をグダグダやってんだか。
何をグダグダやってんだか。
何をグダグダやってんだか。
392デフォルトの名無しさん:2011/04/26(火) 19:33:02.70
フォルダにあるファイルの名前から数字とそれ以外を抜き出して、
違う名前にリネームしていきたいのですが、

g001hoge → "g" "001" "hoge" に分離 → "ghoge001" を生成
g002hoge → "g" "002" "hoge" に分離 → "ghoge002" を生成
g003hoge → "g" "003" "hoge" に分離 → "ghoge003" を生成

どう書けばよいでしょうか?
393デフォルトの名無しさん:2011/04/26(火) 19:42:23.83
set/?
394デフォルトの名無しさん:2011/04/26(火) 21:30:48.22
ヒントじゃなく答えを欲しがる人にはバッチや sed 系の何かより、
むしろ Flexible Renamer を勧めたい。
395デフォルトの名無しさん:2011/04/27(水) 10:50:32.23
batファイルでxmlを操作するのって不可能ですか?

<top>
<tax>1.05</tax>
<item name="たまご" price="250">
</top>
396デフォルトの名無しさん:2011/04/27(水) 10:58:54.60
xslプロセッサかe4x使えよ。
397デフォルトの名無しさん:2011/04/30(土) 05:46:52.36
>>395
不可能じゃないからやれば?
398デフォルトの名無しさん:2011/04/30(土) 22:00:52.19
どうやるんdすか?
399デフォルトの名無しさん:2011/05/01(日) 13:31:46.32
毎日サーバからzipをダウンロードするのですがzipの中で特定の拡張子のファイルのみをbatファイルで一発で展開したいと思います
7Zipを使ってます
これをbatファイルに保存して実行するとtest.zipの拡張子txtのファイルを全て展開します
これを1回のコマンドでtxtだけでなくpdfもにも対応するにはどのように書いたらよいのでしょうか?

C:\7-Zip\7z.exe e test.zip -oC:\hozon .txt -r

.(txt|pdf)みたいに書ければよいのですが・・・
400デフォルトの名無しさん:2011/05/01(日) 13:41:38.28
>>399
2回実行するか
マニュアルよくよんでみるか
どうしても1回って意味不明な縛りがよくわかんね
401デフォルトの名無しさん:2011/05/01(日) 14:34:18.77
2回に分けると2度zipにアクセスするのが無駄なので1回でtxtとpdfファイルを取り出したいのです
マニュアルには複数拡張子は書いてないので出来ませんよね
402デフォルトの名無しさん:2011/05/01(日) 14:58:49.64
そもそも特に拡張子のことなんて書いてないだろ
それっぽいのを拡張子だと判断するのは勝手だが。

拡張子という言葉を頭から削除してマニュアルもっと見ろ
403デフォルトの名無しさん:2011/05/01(日) 15:03:20.73
>2回に分けると2度zipにアクセスするのが無駄なので
そこまで考えるほうが無駄だろ?下手の考え休むに似たりってなw
404デフォルトの名無しさん:2011/05/01(日) 15:31:07.67
C:\7-Zip\7z.exe e test.zip -oC:\hozon .txt -rのところの.txtに正規表現で*.(txt|pdf)も指定できれば良いのですよ
405デフォルトの名無しさん:2011/05/01(日) 15:37:19.88
と思ったら解決できました
406デフォルトの名無しさん:2011/05/01(日) 15:38:24.03
それはそれはよろしいですね! では、よろしく!
407デフォルトの名無しさん:2011/05/01(日) 15:40:42.81
どうでもいいが
*.(txt|pdf)
というのは正規表現じゃないと思うのだが…
408デフォルトの名無しさん:2011/05/01(日) 15:59:25.68
ワイルドカードでもない
409デフォルトの名無しさん:2011/05/01(日) 17:24:50.56
だが言いたいことは分かる
410デフォルトの名無しさん:2011/05/01(日) 19:31:59.45
じゃあ、読んで字の如く、ワイルド表現ちうことで
411デフォルトの名無しさん:2011/05/07(土) 17:58:41.82
バッチファイルの中からMSのsdkに付属のbin\setenv.cmdを呼び出して、環境変数を設定しようと

call "c:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\SetEnv.cmd" /Release /xp
と書いたらsetenv.cmdの中に
SET Path=%VCTools%;%VSTools%;%SdkTools%;%FxTools%;!Path!
などと書かれていて、最後の!Path!(オリジナルのPATHでなく)がそのまま残ってしまいます。

!が%と見なされるような呪文があるのでしょうか?
412デフォルトの名無しさん:2011/05/07(土) 18:13:13.56
>>411ですが、自己解決しました。
413デフォルトの名無しさん:2011/05/08(日) 01:45:29.85
> !が%と見なされるような呪文があるのでしょうか?

そういう呪文、ありますなぁ…
414デフォルトの名無しさん:2011/05/08(日) 02:43:47.53
せっとろうかるでぃせいぶるでぃれいどいくすぱんしょん
415デフォルトの名無しさん:2011/05/08(日) 08:36:32.44
EnableDelayedExpansion

って書いて欲しいなあ、とよく思う…
大文字だけとか小文字だけだと読みにくいw
416デフォルトの名無しさん:2011/05/08(日) 12:05:41.98
そもそもつなげて書くのが間違い。
ちゃんとスペース空けろ!
417デフォルトの名無しさん:2011/05/08(日) 16:07:11.53
C:\test\2010\の中にsample_xxx.zipというファイルがあります
このこのファイル名のxxxのx部分には数字と . 半角英字が入ります
この規則のファイルはフォルダの中に1つしか存在しません
このファイル名を取得して変数に入れる方法はございませんでしょうか?


想定するファイル名
sample_1.0.5.zip
sample_1.12.3.zip
sample_2.0.zip
sample_2.0b1.zip
418デフォルトの名無しさん:2011/05/08(日) 16:14:43.80
set dir = dir sample_*.zip
echo %dir%
で取れるのかなと思ったのですが無理でした
419デフォルトの名無しさん:2011/05/08(日) 16:18:33.11
for %f in (sample_*.zip) do set dir=%f
420デフォルトの名無しさん:2011/05/08(日) 16:59:08.76
>>419
ありがとうございます
421デフォルトの名無しさん:2011/05/08(日) 18:47:26.85
$dir = dir sample_*.zip
echo $dir
422デフォルトの名無しさん:2011/05/08(日) 20:18:54.40
>>421
誰もそんな事は聞いてないの。
423デフォルトの名無しさん:2011/05/11(水) 12:11:48.86
batファイルでゲームって作れるの?まあ作ってる人いないだろうけど
424デフォルトの名無しさん:2011/05/11(水) 13:25:22.39
>>423
batにスクリプト言語埋め込んで、ならやったことあるが
バッチファイルの標準添付コマンドのみで
埋め込みJSとかも禁止、とかになると流石にやる気しないw
425デフォルトの名無しさん:2011/05/11(水) 13:27:11.97
…あ、でも数当てゲームぐらいなら作ったことあるような気もする
これをゲームの内に入れても良いなら「ある」ことになるかなw
426デフォルトの名無しさん:2011/05/11(水) 17:29:12.48
ディレクトリの存在確認で
if exist c:\tmp\nul ...
というテクニックがありますが、名前に空白を含むディレクトリの確認をしようと
ダブルクォートでくくったら正しく動きませんでした。

調べてみるとc:\tmpというディレクトリが存在するとき
1 if exist c:\tmp
2 if exist c:\tmp\nul
3 if exist "c:\tmp'
4 if exist "c:\tmp\nul"
で4だけifが成立しません。今回はcd出来ることで確認したけれど、後学の
ためにif existで正しくディレクトリの存在確認をする記法を教えてください。
OSはXpSP3です。
427デフォルトの名無しさん:2011/05/11(水) 17:35:13.48
"c:\tmp\"
428デフォルトの名無しさん:2011/05/11(水) 18:54:42.75
429デフォルトの名無しさん:2011/05/11(水) 18:56:31.05
430デフォルトの名無しさん:2011/05/11(水) 21:16:46.54
>>427でOKでした。NTFSなので>>428-429によるとできるはずなのにバグですかね。
でも、ファイルシステムの違いで出来ない場合もあるんですね。まんどうだなあ。
431デフォルトの名無しさん:2011/05/12(木) 01:50:07.54
432デフォルトの名無しさん:2011/05/12(木) 02:02:02.97
433デフォルトの名無しさん:2011/05/13(金) 17:08:46.45
姑息な手段でなくまともな方法でやれ
434デフォルトの名無しさん:2011/05/13(金) 18:55:17.92
そういうなら、まともな方法を答えろ。
435デフォルトの名無しさん:2011/05/13(金) 19:15:29.74
属性見ろよ
436デフォルトの名無しさん:2011/05/13(金) 19:21:56.81
だからその方法だよ。ここがバッチスレだと知ってるんだろうな。
GetFileAttributesとか寝言いうんじゃねーぞ。
437デフォルトの名無しさん:2011/05/13(金) 19:47:50.84
おれは知ってるが、おまえは%~aIを知らねーの?
438デフォルトの名無しさん:2011/05/13(金) 19:53:50.80
>>436
寝言言ってないでfor/?くらい読めよな
439デフォルトの名無しさん:2011/05/13(金) 22:17:59.10
for? どれどれ… forを指摘するならむしろ/dだろ。
for /d ("ディレクトリ") do found=%d
属性なんか取得する必要ない。取得しても属性文字列を姑息な方法で検査しなきゃならないし。w
440デフォルトの名無しさん:2011/05/13(金) 22:25:28.84
おっと、抜けてた
for /d %d in ("ディレクトリ") do found=%d
441デフォルトの名無しさん:2011/05/13(金) 22:27:36.70
>>439
寝言言ってないで確認してから言えよな
442デフォルトの名無しさん:2011/05/13(金) 22:28:38.02
>>440
寝言言ってないで確認してから言えよな
443デフォルトの名無しさん:2011/05/13(金) 22:35:57.18
setが抜けてるくらいで、詰まらねー突っ込み入れてんじゃねーよ。
ところで、属性文字列の姑息じゃない確認方法ってあるのか? w
444デフォルトの名無しさん:2011/05/13(金) 22:39:41.78
>>443
寝言言ってないで確認してから言えよな
445デフォルトの名無しさん:2011/05/13(金) 22:54:40.10
>>444
コピペしなかったが、動作確認はしてるぞ。

寝言言ってないで、属性文字列の姑息じゃない検査法答えろよ。
446デフォルトの名無しさん:2011/05/13(金) 23:02:53.86
>>445
for /d %d in ("ファイル") do echo ファイルがディレクトリだってー?
447デフォルトの名無しさん:2011/05/13(金) 23:13:37.95
うん、そこまでの対応法は考えてある。w

set dir=%~1
for /d %%d in ("%dir%*") do if "%dir%" == "%%~d" set found="%%~d"

姑息じゃない、属性文字列の確認方法はどうしたんだよ。
448デフォルトの名無しさん:2011/05/13(金) 23:17:00.69
>>447
for/?読んでfor/f使えよ
449デフォルトの名無しさん:2011/05/13(金) 23:38:11.72
for /f "delims=-" %%i in (`echo "%~a1"`) do if %i == d set found="%~1"
こうか? 十分に姑息だろう。w
450デフォルトの名無しさん:2011/05/13(金) 23:43:54.07
おまえが姑息なんだろ
普通の頭持ってりゃもっとスマートに書けるわ
もっとfor/?読み込めよ
451デフォルトの名無しさん:2011/05/13(金) 23:46:16.23
echoいらない
ifいらない
delimsいらない
452デフォルトの名無しさん:2011/05/13(金) 23:52:06.39
スマートっていうのの見本を示してみろよ。自信ないのか? w
453デフォルトの名無しさん:2011/05/14(土) 00:00:17.23
ここまで教えてやったのに無礼なやつ
そんなやつには教えてやらんよp
454デフォルトの名無しさん:2011/05/14(土) 00:03:04.00
別に良いよ。属性を文字列で取り出すという時点で筋悪すぎだから。
455デフォルトの名無しさん:2011/05/14(土) 00:09:37.01
そりゃよかった
おまえの頭の筋悪すぎだからなw
456デフォルトの名無しさん:2011/05/14(土) 00:14:32.46
酸っぱい葡萄みたいw
457デフォルトの名無しさん:2011/05/14(土) 00:28:10.52
ディレクトリであるかいなかの2値に対して、多値になる文字列を取得し、
それを解析するから、筋が悪いのである。
458デフォルトの名無しさん:2011/05/14(土) 00:34:45.99
もう少し、わかりやすい例を挙げよう。
UNIXでは"ls -ld ディレクトリ"の出力を解析するバカは居ない。test -dで真偽が判定出来るからだ。
ディレクトリ以外の属性情報を含む文字列を取得し、解析する方法は筋が悪いのである。
459デフォルトの名無しさん:2011/05/14(土) 00:36:17.04
おまえの頭ではGetFileAttributesも筋が悪そうだな
460デフォルトの名無しさん:2011/05/14(土) 00:47:33.89
IsDirectoryがあったら、わざわざGetFileAttributes呼ぶか?
真偽で返してくれる手段が存在するのに、多値の方を選ぶのは筋が悪い。
461デフォルトの名無しさん:2011/05/14(土) 01:40:34.43
IsDirectoryがある?ほほう、あるなら示してもらおうじゃないか?
if exist folder\か?
if exist folder\*か?
462デフォルトの名無しさん:2011/05/14(土) 04:43:10.31
一部の条件でたまたま動く方法を使うのはとても筋がいいなぁー
463デフォルトの名無しさん:2011/05/14(土) 06:32:21.42
必死になって何でもかんでもbatで解決する意味あんの?
464デフォルトの名無しさん:2011/05/14(土) 07:14:27.86
てめー俺のバッチdisってんのか
465デフォルトの名無しさん:2011/05/14(土) 08:03:37.06
たまたま動く方法で問題あるなら最初からbatなんか使わないだろ
466デフォルトの名無しさん:2011/05/14(土) 08:23:37.03
>>461
2値の結果を得る方法は既に出した。多値の属性を文字列で取り出して判定するような
筋の悪い方法にしがみつくバカには見えないらしい。w

>>462
「一部の条件でたまたま動く」ではなく、「仕様(ヘルプ)に書かれている通りに動く」
なので全然問題ない。
467デフォルトの名無しさん:2011/05/14(土) 08:36:22.62
バッチで解決しようとしてること自体が筋悪だって……
468デフォルトの名無しさん:2011/05/14(土) 09:03:58.99
筋悪なバッチで筋悪な多値の方法を使うのは、筋悪の二乗。w
469デフォルトの名無しさん:2011/05/14(土) 09:20:28.33
ちゃんとしたプログラム作るまでもなかったり、
プログラム作るまでの間に合わせぐらいの用途だろ
470デフォルトの名無しさん:2011/05/14(土) 09:45:21.25
ある程度簡単なスクリプトはバッチでいい。数行で済むし
複雑にグチャグチャなスクリプトはWSHでいい
471デフォルトの名無しさん:2011/05/14(土) 10:13:08.68
環境変数設定したりとかバッチじゃなきゃできないのがある。
472デフォルトの名無しさん:2011/05/14(土) 10:45:48.67
環境変数セットするだけならバッチでも良いだろうが、その他ごちゃごちゃと処理するんだったらWSHとかEXE作ったりで良いじゃない。
バッチじゃないとダメだなんて特殊状況はそうそう無いし。

まぁ、バッチに縛られたい趣味でもあるなら、仕事に持ち込まれない限りは止めないけど……
473デフォルトの名無しさん:2011/05/14(土) 10:57:01.70
どんな言い訳付けても属性文字列で判定するのは筋悪。
474デフォルトの名無しさん:2011/05/14(土) 12:46:47.88
>>466
> 2値の結果を得る方法は既に出した。

それってひょっとして >>447 のこと?
475デフォルトの名無しさん:2011/05/14(土) 17:56:52.15
>>466
if exist "c:\System Volume Information\*" echo これか?
476デフォルトの名無しさん:2011/05/14(土) 18:01:28.91
>>473
おまえスクリプトのド素人か?
477デフォルトの名無しさん:2011/05/14(土) 18:27:50.63
その点トッポってすげぇよな、最後までチョコたっぷりだもん。
478デフォルトの名無しさん:2011/05/14(土) 18:34:10.05
どういうことだよw
479デフォルトの名無しさん:2011/05/14(土) 18:40:41.44
ポッキーさんをdisってるの?
480デフォルトの名無しさん:2011/05/14(土) 20:05:59.92
>>466
>「仕様(ヘルプ)に書かれている通りに動く」
読解能力も欠如してんのか?
481デフォルトの名無しさん:2011/05/14(土) 22:20:25.07
リダイレクトで適当なファイルに書き出しをするのに、文字コードを指定するのはどうすればいいでしょうか?
例えば基本中の基本、echo aa > a.txtみたいなのでいいのでsjisでなくutf8で書き出したいのですが…

調べてchcp 65001とかやっても、あくまで切り替わるのは表示で、
リダイレクトには効果無いみたいなんですが、皆さんの環境だとどうなってます?
482デフォルトの名無しさん:2011/05/14(土) 22:29:39.18
切り替わるが?
483デフォルトの名無しさん:2011/05/14(土) 22:31:27.72
>>481
最小コードを提示してみそ
484デフォルトの名無しさん:2011/05/14(土) 22:57:51.11
>>483
すいません、やりたい最終形はActivePerlを入力としてのファイルへのリダイレクトなんです。

chcp 65001
perl test.pl > output.txt
ってだけの。

ってあれ、バッチで実行したら最後に追記したpauseが効かない…
ひょっとしてperl読み込んだ時点で何か乗っ取られる的な事になってる?
そういうことってあるんでしょうか?
485デフォルトの名無しさん:2011/05/14(土) 23:12:57.09
>>484
そりゃ test.pl が utf8 吐かないとだめだろ。
486デフォルトの名無しさん:2011/05/14(土) 23:16:40.94
perlがcpを見てるなら出るだろ

chcp 65001 & perl test.pl > output.txt & pause

ってやってみそ
487デフォルトの名無しさん:2011/05/14(土) 23:50:46.34
コマンドプロンプトからecho 100*5みたいに計算することってできないのでしょうか?
やってみたのですが答えじゃなくて式がそのまま出力されました
488デフォルトの名無しさん:2011/05/15(日) 00:13:53.20
set /a x = 100 * 5
489デフォルトの名無しさん:2011/05/15(日) 10:23:44.14
set /a 100*5
490デフォルトの名無しさん:2011/05/15(日) 10:32:20.54
>>474-476,>>480
筋悪爺見苦しいぞ。
491デフォルトの名無しさん:2011/05/15(日) 12:23:37.40
>>485>>486
アドバイスありがとうございます、どうも一朝一夕には無理っぽいので諦めて逐一コード変換通すことにします。
というか何かマイマシンの仕様やら何やらが複雑に絡み合ってて原因究明に時間掛かるっぽいので…
492デフォルトの名無しさん:2011/05/15(日) 14:25:23.97
>>491
やっつけでいいなら

perl test.pl | nkf -w8 > output.txt

とかでいいと思う。

もちろん nkf のインストールが必要だが。

あと、この手の話に「マシンの仕様」が絡むことはほとんどないし、
原因ははっきりしてるように思うけど...。
493デフォルトの名無しさん:2011/05/15(日) 14:53:54.42
0:00〜23:59までの時間をランダムに表示したいのですが方法ないですか?
494デフォルトの名無しさん:2011/05/15(日) 14:55:56.54
>>490
自身のこと言ってんの?
495デフォルトの名無しさん:2011/05/15(日) 16:21:49.30
>>493
set/?
%RANDOM% - 0 から 32767 の間の任意の 10 進数に展開します
496デフォルトの名無しさん:2011/05/15(日) 16:30:54.86
%RANDOM%で0〜23と0〜59までの値を生成できるんですか?
497デフォルトの名無しさん:2011/05/15(日) 16:35:17.12
あほですか?
498デフォルトの名無しさん:2011/05/15(日) 16:46:49.64
>>493
> 0:00〜23:59までの時間をランダムに表示したいのですが方法ないですか?

setlocal enabledelayedexpansion
:loop
set /a M = %RANDOM% / 22
if 1440 leq %M% goto loop
set /a HH = %M% / 60
set /a MM = %M% %% 60
echo %HH%:%MM%
endlocal

1:2 を 01:02 みたく出す方法は思いつかなかった。
499デフォルトの名無しさん:2011/05/15(日) 17:26:42.64
set n=2
set /a n=1000+n
echo %n:~-2%
500デフォルトの名無しさん:2011/05/15(日) 17:36:42.93
>>498
ある数値mからn以下の数値を求めるには剰余を使うのが一般的

set /a h=100 + %random% % 24
set /a m=100 + %random% % 60
echo %h:~-2%:%m:~-2%
501デフォルトの名無しさん:2011/05/15(日) 18:22:01.17
それだと32767が24や60の倍数でないから偏りが出るだろ

set /a h=100 + random * 24 / 32768
set /a m=100 + random * 60 / 32768
echo %h:~-2%:%m:~-2%

/aでは%はいらない
502デフォルトの名無しさん:2011/05/15(日) 18:24:39.47
32767が→32768が
503デフォルトの名無しさん:2011/05/15(日) 19:01:29.25
>>501
> /aでは%はいらない

一度位試してから書け
504デフォルトの名無しさん:2011/05/15(日) 19:13:15.18
if defined random set random
505デフォルトの名無しさん:2011/05/15(日) 19:54:00.67
あーれー
506デフォルトの名無しさん:2011/05/15(日) 20:43:12.31
>>494
自信満々で「属性嫁」とかいう筋の悪い回答出した、てめーの事だよ。
507デフォルトの名無しさん:2011/05/15(日) 20:56:20.41
ケンカはやめて(><)
508デフォルトの名無しさん:2011/05/15(日) 21:09:45.07
>>506
おまえ人としての筋が悪いんじゃね?
509デフォルトの名無しさん:2011/05/15(日) 22:49:26.87
>>506
仕様上の保証が全くない、たまたま動作に依存することのどこがよい筋なんだ?
510デフォルトの名無しさん:2011/05/15(日) 22:53:28.74
>>509
仕様(ヘルプ)すら読めない池沼は引っ込んでろ。
511デフォルトの名無しさん:2011/05/15(日) 22:55:39.54
どれどれ?
512デフォルトの名無しさん:2011/05/15(日) 22:57:58.58
EXIST ファイル名 指定したファイル名が存在するときに条件が真になるように
指定します。
513デフォルトの名無しさん:2011/05/15(日) 23:05:48.28
>>509
ところで、自信満々の属性文字列なんだが、「ディレクトリの場合はdが先頭になる」
というのはどこかに書いてあるのか? for /?には書いてないぞ。まさか、

> 仕様上の保証が全くない、たまたま動作に依存することのどこがよい筋なんだ?
じゃないよなあ。 www
514デフォルトの名無しさん:2011/05/15(日) 23:45:00.36
どれどれ?
515デフォルトの名無しさん:2011/05/15(日) 23:56:10.47
>>513
>>451 がそれほど悔しかったのか?だったらそれをばねにして勉強しろよ
516デフォルトの名無しさん:2011/05/16(月) 00:17:51.73
>>515
あれ、聞いてはいけない事聞いちゃった? 検証方法も秘密。ドキュメントも秘密。
やっぱ、属性文字列取り出すのは↓なんだね。www
> 仕様上の保証が全くない、たまたま動作に依存することのどこがよい筋なんだ?
517デフォルトの名無しさん:2011/05/16(月) 00:19:58.98
>>516
はいはい
「コマンドの出力をスクリプトに取り込んで処理するなんてスクリプトとして筋悪です」
これでいい?
518デフォルトの名無しさん:2011/05/16(月) 00:27:12.98
「自分の筋悪に気づかずにブーメラン投げてしまいました」は?
519デフォルトの名無しさん:2011/05/16(月) 00:32:57.49
ttp://technet.microsoft.com/en-us/library/bb490920.aspx

You cannot use the if command to test directly for a directory
520デフォルトの名無しさん:2011/05/16(月) 00:47:29.47
but the null (NUL) device does exist in every directory. As a result, you can test for the null device to determine whether a directory exists.
521デフォルトの名無しさん:2011/05/16(月) 01:48:04.92
そんな周回遅れのドキュメント引っ張ってきて、何が言いたいのだ?
522デフォルトの名無しさん:2011/05/16(月) 02:09:33.57
>>521
おまえさんがあほってことじゃないの?
523デフォルトの名無しさん:2011/05/16(月) 02:27:01.48
>>521
周回遅れのあほってことじゃないの?
524デフォルトの名無しさん:2011/05/16(月) 11:28:31.99
net start サービス名
exit

これでサービスが立ち上がったときに自動的にコマンドプロンプトを閉じてるのですが
もしサービス開始するときにエラーがあったらコマンドプロンプトを閉じたくないのですが
エラーがないときはexitでそのまま終了させて、エラーがあればそのまま表示しておく方法ってございませんか?
525デフォルトの名無しさん:2011/05/16(月) 11:34:29.06
試してないけど
net start サービス名 && exit /b || echo error&pause
でいけるかもしれない
526デフォルトの名無しさん:2011/05/16(月) 11:43:51.69
net系はerrorlevel返さないじゃないかな
エラーメッセージで判定するとなると筋悪とか言うあほがいるから気をつけたほうがいいよ
527デフォルトの名無しさん:2011/05/16(月) 13:06:40.05
よっぽど悔しかったんだな。

「属性嫁」って颯爽と登場したところまでは良かったけど、具体的な方法も示せずに、
ヒントとかいって苦し紛れにだしたfor /?で、属性読まずに済む完全な方法を発見さ
れた上に、始めに言い出した属性文字列の仕様がどこにもなくて動いたとしてもまぐ
れで動いているに過ぎない事を指摘されちゃ、立ち直れないだろうな。
その上、ブーメランもくらっているし、仕様も読めないし、たった2行のバッチスクリ
プトの意味も理解できてないし。

でも、己の未熟さが招いた結果だから、諦めて受け入れろ。
528デフォルトの名無しさん:2011/05/16(月) 13:14:44.13
一生懸命長文書いたつもりだろうがsageろカス
529デフォルトの名無しさん:2011/05/16(月) 15:04:40.89
ぶっちゃけ念入りにこのスレチェックしてないから話しよく知らない側としてはその話はうぜえ
530デフォルトの名無しさん:2011/05/16(月) 21:31:33.63
悔しい 悔しいよぉ〜
周回遅れの阿呆にスクリプトの常道を筋悪なんてけなされてくやち〜よぉ〜
これでいい?
531デフォルトの名無しさん:2011/05/16(月) 22:06:38.96
>>524
周回遅れのドキュメントで申し訳ないが、
ttp://support.microsoft.com/kb/194916/ja
にnet startのerrorlevel判定とメッセージ出力判定のサンプルがあるよ
532デフォルトの名無しさん:2011/05/16(月) 23:02:22.07
>>531
>if errorlevel==1 goto SMTPSVC
ってなんだよ ひでーな 動くけど
533デフォルトの名無しさん:2011/05/17(火) 13:23:07.55
set p=C:\Tools\Firefox\firefox.exe
この p という変数からフォルダパス (C:\Tools\Firefox) を抜きとるのに、
call でサブルーチンの引数にして %~dp1 とする以外に方法はありますか?
534デフォルトの名無しさん:2011/05/17(火) 13:28:15.01
似たようなもんだけど
for %%i in (C:\Tools\Firefox\firefox.exe) do set parent=%%~dpi
echo %parent%
535デフォルトの名無しさん:2011/05/17(火) 15:08:31.36
>>534 ありがとうございます。
こちらの方が随分良いので、そのまま使用させていただきます。
536デフォルトの名無しさん:2011/05/17(火) 16:42:59.25
>>527
>その上、ブーメランもくらっているし、仕様も読めないし、たった2行のバッチスクリ
>プトの意味も理解できてないし。
それって>>447のことみたいだが、たった2行のバッチスクリプトもまともに書けんのか?情けない。
まともに動くものを書いてから大口たたけよな。

call xxx c:\users
537デフォルトの名無しさん:2011/05/17(火) 17:06:54.42
はず ポッ
538デフォルトの名無しさん:2011/05/17(火) 17:20:55.57
for/?には書いてないが、

You cannot use the for command to test directly for a directory
539デフォルトの名無しさん:2011/05/17(火) 17:39:34.02
なぁんだ そんな姑息な方法を筋がよいと思っていたのか?
540デフォルトの名無しさん:2011/05/17(火) 18:05:28.66
いつまで言ってんの?
541デフォルトの名無しさん:2011/05/17(火) 18:44:26.59
>>536
よっぽど悔しかったんだな。
5日間必死で考えてようやくバグ見つけたか。 実はそれも考えてあるんだ。w

set dir=%~1
for /d %%d in ("%dir%*") do if /i "%dir%" == "%%~d" set found="%%~d"
542デフォルトの名無しさん:2011/05/17(火) 18:50:10.89
>>541
すごーい! あんた天才やね!
543デフォルトの名無しさん:2011/05/17(火) 19:12:44.43
天才さんは
call xxx c:\boot
の対策も当然考えてるんだろうな?
544デフォルトの名無しさん:2011/05/17(火) 19:31:22.67
ガーン そっそんなぁ for/?に書いてないんだけど…
545デフォルトの名無しさん:2011/05/17(火) 19:54:43.71
筋悪だけど
dir/b /adh c:\boot*
の多値出力を処理するのかなぁ?
546デフォルトの名無しさん:2011/05/17(火) 20:32:33.49
それよりは、筋悪だけど、%~aI の多値出力を処理してほうがマシじゃないのか?
これが使えないっていう話は聞いたことがないもんな
547デフォルトの名無しさん:2011/05/17(火) 22:01:41.64
>>546
ディレクトリかどうかの判定に属性見ることのどこが筋悪なんだ?
属性見ないでやろうってーのが姑息だろが?
548デフォルトの名無しさん:2011/05/18(水) 22:56:40.93
>>543
実はそれも考えてあるんだ。w
549デフォルトの名無しさん:2011/05/19(木) 04:46:23.83
set dir=%~1
for /f "delims=" %%d in ('dir/b /ad "%dir%*") do if /i "%dir%" == "%%~d" set found="%%~d"
550デフォルトの名無しさん:2011/05/19(木) 13:19:45.24
text.txtに以下の5行があります

aaaa
bbaa
ccaa
ddaa
eeaa

先頭がcから始まる(ここでは3行目)文字列に、頭に#をつけて以下のようにこのようにしたいのですが
どのようにできますか?

aaaa
bbaa
#ccaa
ddaa
eeaa
551デフォルトの名無しさん:2011/05/19(木) 20:52:19.29
if "%string:~0,1%"=="c" set string=#%string%
552デフォルトの名無しさん:2011/05/19(木) 21:15:11.65
WSHでやれよ
553デフォルトの名無しさん:2011/05/20(金) 00:28:06.49
PowerShellやろうず
554デフォルトの名無しさん:2011/05/20(金) 05:07:19.81
>>551
ifで引用符を付けたのにsetで付けないのはナゼ?
555デフォルトの名無しさん:2011/05/20(金) 10:52:48.10
変数がnullだった時に引用符付けてないと…
556デフォルトの名無しさん:2011/05/20(金) 12:00:02.80
なるほど了解です。
でも、どっちにしろnullの部分展開だとエラーが出るね。
The syntax of the command is incorrect.
>if "~0,1string
557デフォルトの名無しさん:2011/05/20(金) 13:31:41.03
if "%string:~0,1%"=="c" (
set string=#%string%
)


if と同じ行にset置いたら動かん…set以外だったら行くみたいだが。
ようわからんわw
558デフォルトの名無しさん:2011/05/20(金) 17:04:08.35
ifと同じ行だとset文に%があるとダメっぽい
559デフォルトの名無しさん:2011/05/20(金) 17:55:28.83
if not defined string goto :x
if "%string:~0,1%"=="c" set string=#%string%
:x
560デフォルトの名無しさん:2011/05/20(金) 17:56:52.90
setは=の後、改行までの内容を全て「変数に入れたい内容」とみなしてしまうのだが
ifとか()とかは解釈の過程でなんか空白入れられたりとか色々やるんよね
非常に相性が悪い
561デフォルトの名無しさん:2011/05/21(土) 23:10:27.60
パソコンを1個のPCで監視しようとしています

batファイルに
"C:\Program Files\zeroremote\zeroremote.exe" /c:192.168.0.201
"C:\Program Files\zeroremote\zeroremote.exe" /c:192.168.0.202
と記載してバッチを起動してみると
1行目のプログラムは起動するのですが
2行目の方のは1行目で開かれたウィンドウを閉じないと実行されず処理が停止状態になってしまいます

どんどん処理を実行して行く方法があったら教えていただけないでしょうか
よろしくお願い致します
562デフォルトの名無しさん:2011/05/21(土) 23:44:07.23
563デフォルトの名無しさん:2011/05/22(日) 00:32:46.26
564デフォルトの名無しさん:2011/05/22(日) 18:57:34.05
set a=C:\test\test.txt
set /p x=<%a%
echo %x%

こんなんで test.txt の一行目が取得できますが、2 行目だけを取得する
最も簡単な方法を教えて下さい。set /p を使ってできたような気がする
んですけど…。
565デフォルトの名無しさん:2011/05/22(日) 19:55:32.37
set a=C:\test\test.txt
(set /p x=
set /p x=)<%a%
echo %x%
566デフォルトの名無しさん:2011/05/22(日) 20:44:54.62
例えば1〜100行あるとして
指定した行を取得したいばあいはどうやるのですか?
567デフォルトの名無しさん:2011/05/22(日) 20:51:43.91
for /L
568564:2011/05/22(日) 20:57:34.38
ありがとうございます、できました。しかし仕組みがよくわかってないです。
set /p についてる括弧はどういう機能でしょうか?
569デフォルトの名無しさん:2011/05/22(日) 21:00:46.57
echo a>c
echo b>c

(echo a
echo b)>c
570デフォルトの名無しさん:2011/05/22(日) 21:57:29.03
>>568
set に括弧が付いてるんではなく
(
set /p x=
set /p x=
)<%a%
571564:2011/05/23(月) 05:59:49.29
みなさんありがとう。ググっても、ここで教えてもらった以上の説明が見つからなかった。
>>570>>569 のように括弧なしにすることは出来るんでしょうか?
朝のうちにもう一回ググってきます。
572デフォルトの名無しさん:2011/05/23(月) 08:34:42.79
明示的にERRORLEVELをクリアする方法ないですか
意味もなく dir すればできるっぽいけどもうちょっとスマートな方法あれば
573デフォルトの名無しさん:2011/05/23(月) 08:50:26.75
cmd /c exit 0
574デフォルトの名無しさん:2011/05/23(月) 12:18:38.75
net start サービス
これでサービスが正常に起動できた場合に特定の処理をする方法ってありますか

if (サービスが正常に起動できたか){
575デフォルトの名無しさん:2011/05/23(月) 13:42:39.04
>>574=>>524
あっちの落とし前が先
576デフォルトの名無しさん:2011/05/23(月) 14:19:22.39
>>525じゃできないよ
577デフォルトの名無しさん:2011/05/23(月) 14:37:08.32
net start|findstr ^サービス$
でerrorlevel見ればいいんじゃね
578デフォルトの名無しさん:2011/05/23(月) 14:41:26.88
net start | find "your service"
とかじゃダメなん
579デフォルトの名無しさん:2011/05/23(月) 14:46:47.74
function a(){
}

function b(){
}

みたいに1ファイルにまとめておきたいのでこういうふうに関数って作れませんか?
580デフォルトの名無しさん:2011/05/23(月) 14:50:18.56
call :label
581デフォルトの名無しさん:2011/05/23(月) 15:19:00.28
582デフォルトの名無しさん:2011/05/23(月) 15:20:58.79
>>572-573
call;
583デフォルトの名無しさん:2011/05/23(月) 15:25:43.52
>>571>>569を理解してない 両者でcの結果が違う
584デフォルトの名無しさん:2011/05/23(月) 16:52:15.83
echo a>c
echo b>>c
と勘違い?
585デフォルトの名無しさん:2011/05/23(月) 22:50:48.15
>>574
俺は sc コマンドで適当にループさせてやってる。
sc PC名 query サービス名 | findstr "RUNNING" 1>nul 2>&1
if errorlevel 1 (
適当に待ちとループ
)
あとは10回ループして動いてなかったら失敗扱いにしてメッセージを出して、みたいな。
586デフォルトの名無しさん:2011/05/24(火) 14:47:40.72
いきなり質問で失礼します
バッチで コマンドを入れる事は可能でしょうか?

というのもCSV保存、読み込み用のバッチを作ろうと思っています
その際に保存用(save.bat)にオプション等で保存先を指定したいのです。

考えている呼び出しの形こんな感じ→ call save.bat -str=%a -savelocation="c:\\test" -fileName="test.csv" -init=1
求めてる動作→initが1なのでTEXTを初期化する(デフォ:上書き) savelocation,fileNameがあったらそこを保存場所に使う(なければデフォ:./savelogYYMMDD_MM.dat(YYMMDDMMは書き込みの最初に取得する)
strに保存する1行分の文字を入れる(必須) )

call save.bat -savelocation="c:\\test"のようにしてcall時に変数に入れて渡さず コマンドでセーブ場所を指定する事は可能ですか?
587デフォルトの名無しさん:2011/05/24(火) 15:22:46.26
文章が長い 要点だけ書け
588デフォルトの名無しさん:2011/05/24(火) 15:48:57.64
うまく説明できなくてすみません
現在save.batを呼ぶ際に下の方法で保存場所を指定しています

rem main.bat
set Location="c:\test"
call save.bat
goto :EOF

ところが、save.batをバッチ以外から読み込もうとしてもできなかったので

rem main.bat
call save.bat -Location="c:\test"
goto :EOF

このような形に変更したいと思っています
可能でしょうか
589デフォルトの名無しさん:2011/05/24(火) 16:04:34.53
>ところが、save.batをバッチ以外から読み込もうとしてもできなかったので

できないというのも不思議な話だが、それがだめならmain.batでも呼べば?
590デフォルトの名無しさん:2011/05/24(火) 16:10:40.25
それか、call /? でも読めば?
call main.bat 111 222 333
%1=111
%2=222
%3=333
591デフォルトの名無しさん:2011/05/24(火) 16:13:20.88
ちがうだろ
sub.batを変更しないで可能でしょうか?っていう質問だろ
だから答えは不可能
592デフォルトの名無しさん:2011/05/24(火) 16:17:25.68
>バッチで コマンドを入れる事は可能でしょうか?
可能
593デフォルトの名無しさん:2011/05/24(火) 16:26:24.22
>>586 の最後の1行は
自動車のようにガソリンを使わず移動できる。かそれとも
自動車のように長い主翼を持たない飛行装置。の文か迷った。
594デフォルトの名無しさん:2011/05/24(火) 16:30:22.41
>>589
呼び出し:main.bat "c:\Program Files\aaco\v1\save\save.dat"

main.bat中身

rem ダブルクオーテーションを抜く処理(違うかも)
set DATA = %1~1,-1%

if NOT EXIST %DATA% goto ERROR
call save.bat %DATA%
pause
exit

:ERROR
goto :EOF
こんな感じですか?
595デフォルトの名無しさん:2011/05/24(火) 16:34:15.22
問題を理解してないのですか?
596デフォルトの名無しさん:2011/05/24(火) 16:42:19.64
可能なのか不可能なのか・・・
597デフォルトの名無しさん:2011/05/24(火) 16:54:44.40
問題は何ですか?
598デフォルトの名無しさん:2011/05/24(火) 16:57:35.36
質問者が問題を理解してないことでは?
599デフォルトの名無しさん:2011/05/24(火) 17:04:02.20
答えは不可能じゃなくて、答えるのは不可能だっちゃ
600デフォルトの名無しさん:2011/05/24(火) 17:08:01.01
> ところが、save.batをバッチ以外から読み込もうとしてもできなかったので
一層、意味不明な文を…
お前の住んでる環境では、この意味をみんな理解できるのか?
601デフォルトの名無しさん:2011/05/24(火) 17:13:05.50
chcp 65001
ではバッチファイルは読み込めない。
という文章なら正しいよ
602デフォルトの名無しさん:2011/05/24(火) 17:15:18.74
>バッチで コマンドを入れる事は可能でしょうか?
バッチファイルの中身はコマンドだけど?
603デフォルトの名無しさん:2011/05/24(火) 17:19:12.20
ありがとうございます
自己解決しました
604デフォルトの名無しさん:2011/05/24(火) 17:20:39.36
どうしたら伝わるんだろうか・・・

使用方法1
$save.bat エンター
結果 → 通常処理(上書き)。保存する場所もデフォルト

使用方法2
$save.bat -Location="c:\test"
結果 → 通常処理(上書き)。保存する場所をc:\testに変える

使用方法3
$save.bat -init=1
結果 → 通常処理(新規)

使用方法4
$save.bat -init=1 -Location="c:\test"
結果 → 通常処理(新規) 保存する場所をc:\testに変える
605デフォルトの名無しさん:2011/05/24(火) 17:27:13.20
がんばればできるんじゃね 以上
606デフォルトの名無しさん:2011/05/24(火) 17:32:35.92
>>605
おう・・・

意味不明な事を書きまくってすみませんでした・・・
ちょっと頭冷やしてきます
607デフォルトの名無しさん:2011/05/24(火) 17:42:10.41
単に引数をパースしたいだけなんじゃね
もっとシンプルに -location c:\
って形式にして
if "%~1"=="-location" (
set location=%~2
shift
shift
)
とかやればいいんじゃねーの
608デフォルトの名無しさん:2011/05/24(火) 17:54:37.57
今のバッチファイルは保存先を環境変数で渡している。
(環境変数の渡し方を知らないから)バッチファイル以外からは読み込めない(実行できない)
だから、コマンドラインオプションで渡したい。

という事か。どういう訓練を積むとあんなに難解な質問文を書けるようになるのだろう。
ネイティブ日本語スピーカーじゃないのかな?
609デフォルトの名無しさん:2011/05/24(火) 18:08:56.40
名前付き引数はめんどいから環境変数渡しのほうが私はよいが
610デフォルトの名無しさん:2011/05/24(火) 18:13:04.59
ま あのシンタクスは苦労するだろな 私なら避けるが
611デフォルトの名無しさん:2011/05/24(火) 19:14:46.18
call save.bat -str "%a" -saveLocation "c:\\test" -fileName "test.csv" -init 1
こんな感じなら出来るんじゃない。>>607 見て思った。
612デフォルトの名無しさん:2011/05/24(火) 19:21:36.12
batファイルでコマンドプロンプトが表示されるとき、画面サイズを大きくしたいのですが
batファイルで調節することは不可能ですか?手動がめんどうなのです
613デフォルトの名無しさん:2011/05/24(火) 19:25:44.35
今来たばかりで問題がなんなのか全然わかってないんだけど
変数をパラメータに入れて渡したいなら

save.bat str=%a,savelocation="c:\\test",filename="test.csv",init=1
みたいにやって、
set args=%*
set %args:,=&set %

これじゃいかんの?
区切りはカンマじゃ問題あるかもしれんから使いそうに無い別文字でも
614デフォルトの名無しさん:2011/05/24(火) 19:28:56.50
>>612
mode /?
615デフォルトの名無しさん:2011/05/24(火) 19:31:03.23
>>611
=使うのと同じ

>>612
可能

>>613
だめだろ
616デフォルトの名無しさん:2011/05/24(火) 19:34:55.73
save.bat "set hoge=fuga&set hage=foo&set aaa=bbb"

set args=%*
%args:~1,1%

こんなのとかw
617デフォルトの名無しさん:2011/05/24(火) 19:36:41.89
%args:~1,-1%
だった
618デフォルトの名無しさん:2011/05/24(火) 19:50:19.07
>>614
おおおおおおおおおおおおおおおおおおおおおおおおおおおできました!
619デフォルトの名無しさん:2011/05/24(火) 22:19:25.00
>>604
可能。save.bat で引数をパースする処理を書かなければならない。
それが面倒なら
%1 "保存場所"
%2 "ファイル名"
%3 "新規"
とか決め打ちして

使用方法1
$save.bat "" "" ""エンター
結果 → 通常処理(上書き)。保存する場所もデフォルト

使用方法2
$save.bat "c:\test" "" ""
結果 → 通常処理(上書き)。保存する場所をc:\testに変える

使用方法3
$save.bat "" "" "new"
結果 → 通常処理(新規)

使用方法4
$save.bat "c:\test" "" "new"
結果 → 通常処理(新規) 保存する場所をc:\testに変える

で%1が "" ならデフォルトの保存場所に保存
set location="c:\保存場所"
if not %1 == "" (
set location=%1
)
%2 %3についても指定されているかをそれぞれ判定
620デフォルトの名無しさん:2011/05/24(火) 22:29:10.80
echo %~1> test.txt とする時に、%~1 に続いて改行コードが入っちゃうんですけど
これを何とかする方法はありませんか?
621デフォルトの名無しさん:2011/05/24(火) 22:34:03.14
<nul>test.txt set /p"=%~1
622デフォルトの名無しさん:2011/05/25(水) 09:55:27.36
>>621 有難うございました。なるほど、そうやってやるんですね。
623デフォルトの名無しさん:2011/05/27(金) 17:53:25.86
バックグラウンドでメモ帳を起動したいのですがどうやるのでしょうか?
624デフォルトの名無しさん:2011/05/27(金) 19:54:32.16
最小化じゃだめなん?
625デフォルトの名無しさん:2011/05/27(金) 19:58:39.04
メモ帳がアクティブにならなければかまいません
626デフォルトの名無しさん:2011/05/27(金) 20:02:50.54
非表示とかフォーカスを移動しないとか?
windowstyleを指定すればええやん
627デフォルトの名無しさん:2011/05/27(金) 20:43:21.10
非表示で起動するサンプル探してwindowstyle値を変える
628デフォルトの名無しさん:2011/06/01(水) 10:37:17.45
batファイルからバルーンを表示する方法ってございませんか?
629デフォルトの名無しさん:2011/06/01(水) 11:51:08.31
標準コマンド以外使ってもいいならnircmdとか
630デフォルトの名無しさん:2011/06/01(水) 12:07:32.44
nircmdいいですね
http://www.nirsoft.net/utils/nircmd.html
でもダウンロードリンクがどこにあるのか分かりませんorz
631デフォルトの名無しさん:2011/06/01(水) 12:11:06.97
aあ、ありました
nircmd.exeとnircmdc.exeが両方入っているのですがどっちもbeep 500 2000を実行したら動いたので違いがわかりませぬ
632デフォルトの名無しさん:2011/06/01(水) 14:13:41.26
In the console version, all error messages goes to the console window, instead of using a message box.
633デフォルトの名無しさん:2011/06/01(水) 19:05:41.17
>>623
nircmd
634デフォルトの名無しさん:2011/06/03(金) 02:01:25.68
del /q ""
これ実行したら、ファイルが全部消えてしもた…
"" は *.* と同じなの?
635デフォルトの名無しさん:2011/06/03(金) 02:06:15.32
/q 付けずにやってみたら *.* じゃなくて *
636デフォルトの名無しさん:2011/06/03(金) 02:20:35.95
"" はワイルドカードじゃないよね??
637デフォルトの名無しさん:2011/06/03(金) 04:34:08.50
dir "" >a
dir * >b
fc a b
638デフォルトの名無しさん:2011/06/03(金) 08:30:39.16
if not exist a copy nul a
if not exist b copy nul b
if not exist c copy nul c
dir /b "" > a
dir /b * > b
dir /b > c
fc a b
fc a c
pause
639デフォルトの名無しさん:2011/06/03(金) 22:20:15.76
ウィンドウ非表示で動かした無限ループのバッチちゃんを
別のバッチちゃんから止めることってできるかな?
640デフォルトの名無しさん:2011/06/03(金) 22:23:49.62
できるっしょ
641デフォルトの名無しさん:2011/06/03(金) 22:25:26.27
おしえてちょ
642デフォルトの名無しさん:2011/06/03(金) 22:26:48.06
>>639
ウィンドウ表示の場合はどうやるの?
643デフォルトの名無しさん:2011/06/03(金) 22:27:23.53
・・・知らない
644デフォルトの名無しさん:2011/06/03(金) 22:34:22.00
taskkill
645デフォルトの名無しさん:2011/06/03(金) 22:46:25.09
アンがト
646デフォルトの名無しさん:2011/06/03(金) 23:15:50.61
単純にプロセス殺すとcmdが全滅するんじゃ
チェック用のファイルやレジストリで自爆させるようなフラグを立てるしか
647デフォルトの名無しさん:2011/06/04(土) 00:10:46.45
なんで全滅するんだろ?
648デフォルトの名無しさん:2011/06/04(土) 00:14:22.20
>ファイルやレジストリ
はやめて〜せめて環境変数でやれよ
649デフォルトの名無しさん:2011/06/04(土) 01:06:15.91
うんそうする
650デフォルトの名無しさん:2011/06/04(土) 03:44:16.11
できねーよ
651デフォルトの名無しさん:2011/06/04(土) 08:34:37.05
md a
copy ""."" a
652デフォルトの名無しさん:2011/06/04(土) 17:17:31.48
for %i in ( * ) do copy %i "%~nxiz"
653デフォルトの名無しさん:2011/06/04(土) 20:20:58.91
system32に自作コマンドとかって可能?
654デフォルトの名無しさん:2011/06/04(土) 20:26:43.04
不可能?
655デフォルトの名無しさん:2011/06/05(日) 02:40:17.94
誰かちょっと知恵を貸してください。

テキストファイル内が下記の感じで、
それぞれスペースで区切られているんだけど・・・
行の末尾の数字のみの合計を求める場合どう書けばよいのでしょう。

aaa bbb ccc 123
ddd eee ddd 456
ggg hhh aaa 789

(この場合123+456+789としたい)
656デフォルトの名無しさん:2011/06/05(日) 06:20:58.67
for/?
set/?
657デフォルトの名無しさん:2011/06/05(日) 06:23:06.04
バッチの副ストリーム対応が中途半端すぎて涙出てくる
658デフォルトの名無しさん:2011/06/05(日) 06:26:36.71
あるだけでもよろこべ
659デフォルトの名無しさん:2011/06/05(日) 14:13:33.30
>>656
>>655です、レスありがとうございます。

検索で調べているのですが、どうも「SET x=」で固定数を計算する例や、
時間・日時の差分などを求めるものが多く、希望通りのサンプルが見つからないもので・・・
具体的にはどんな感じで書けばよいでしょうか?
660デフォルトの名無しさん:2011/06/05(日) 14:24:27.51
引数から相対パスを引っ張ることは可能でしょうか

任意の位置にあるbatにC:\a\b\c.txtを引数として渡した場合に(D&Dで突っ込んだ場合に)
C:\a\y\z.txtを追加してbatのあるフォルダに出力する、みたいな感じに使うのですが
絶対パスではなく%~dp1に対する..\y\z.txtの指定方法をお願いします。
661デフォルトの名無しさん:2011/06/05(日) 15:11:30.04
自分なりにやってみたところ

set aaa=%~dp1
set aaa=%aaa:b=y%
copy "%aaa%z.txt" "%~dp0z.txt"

こんな感じになったのですがどうでしょうか

あちらこちらで使うのですがb、y、zの名前はどこでも変わらないです
662デフォルトの名無しさん:2011/06/05(日) 15:34:11.95
%~dp1..\y\z.txtでいいんじゃないの
663デフォルトの名無しさん:2011/06/05(日) 15:54:55.84
あれ、それでいけるんですか

展開とか何とかで
C:\a\b\..\y\z.txtに・・・

ってこれ普通に読めるorz
どうもありがとうございました
664デフォルトの名無しさん:2011/06/05(日) 18:08:24.49
\a.bat
\a.xls
\b
があってa.batを実行したらフォルダbにa.xlsをコピーして\b\a.xlsを実行
終了後b\a.xlsを削除したいのですがどうすればいいでしょうか
665デフォルトの名無しさん:2011/06/05(日) 19:07:42.07
a.batを実行したらフォルダbにa.xlsをコピーして\b\a.xlsを実行
終了後b\a.xlsを削除すればいいよ
666デフォルトの名無しさん:2011/06/05(日) 19:41:55.67
>>664
すみません、まだ勉強し始めなので正確性に欠けるかもですが、
うちではこれで希望に添う結果になりましたがどうでしょうか?

copy /b a.xls b\
del a.xls


引き続き>>655の方法をおわかりの方、申し訳ありませんが、
具体的にはどう書けば良いのかお知恵をお貸し下さい><
667デフォルトの名無しさん:2011/06/05(日) 20:10:05.78
gawk とか perl を先にインストールすればいいのに。
668デフォルトの名無しさん:2011/06/05(日) 20:33:21.44
>>666
ヒント:
FOR /F ["オプション"] %変数 IN (ファイル セット) DO コマンド [コマンド パラメーター]

ファイル セットは、1 つ以上のファイル名です。各ファイルが開かれ、
読み取られ、処理されてから、ファイル セットの次のファイルに進みます。
処理では、ファイルの読み取り、個々のテキスト行への分割と、0 個以上の
トークンへの解析が行われます。その後、見つかったトークン文字列を変数値に
設定して for ループの本体が呼び出されます。既定では、/F は、各ファイルの
各行から、空白で区切られた最初のトークンを取得して渡します。空白行は
スキップされます。既定の解析動作を変更するには、省略可能な "オプション"
パラメーターを指定します。これは、異なる解析オプションを指定する 1 つ以上の
キーワードを含む、引用符で囲まれた文字列です。キーワードは、次のとおりです:

eol=c - 行末のコメント文字を指定します (1 文字)。
skip=n - ファイルの先頭でスキップする行数を指定します。
delims=xxx - 区切り文字のセットを指定します。
これは、既定の区切り文字であるスペースとタブを
置き換えます。
tokens=x,y,m-n - 各繰り返しに対して、各行から for 本体に渡す
トークンを指定します。これにより、追加の変数名が
割り当てられます。
m-n の形式は範囲で、m 番目から n 番目の
トークンを指定します。
tokens= 文字列の最後の文字がアスタリスクである場合は、

追加の変数が割り当てられ、最後のトークンが解析された
後、行に含まれている残りのテキストを受け取ります。
669デフォルトの名無しさん:2011/06/05(日) 22:56:23.57
>>667
バッチファイルだけで出来るならそれで済ませたいと思いまして・・・

>>668
レスありがとうございます。

for /f "tokens=3" %%a in (test.txt) do @echo %%a で、
下記のように(>>655で書いた末尾の数字のみ)取り出せたのですが、
そこからどうやれば合計を求めることが出来るのでしょうか?

123
456
789
670デフォルトの名無しさん:2011/06/05(日) 22:57:59.91
set/?
671デフォルトの名無しさん:2011/06/06(月) 01:28:13.01
do set /a T=!T!+%%a
echo 合計:%T%
遅延環境変数使いたくないならcallで
672デフォルトの名無しさん:2011/06/06(月) 01:38:31.63
>>666
> copy /b a.xls b\
> del a.xls

それではa.xlsを実行の段が無いだろw
673デフォルトの名無しさん:2011/06/06(月) 01:47:59.00
>>671
> do set /a T=!T!+%%a

set /a 使用時に変数を%や!で囲む必要は無い。常に遅延展開される。
do set /a T=T+%%a でよし。
do set /a T+=%%a でもよし。
一部の特殊な変数は%が必要。上の方でも出てたけど%random%とか。
674デフォルトの名無しさん:2011/06/06(月) 14:09:57.08
>>670-671>>673
レスありがとうございます。
希望通り末尾の数字のみ計算できました!
しかしまれに「演算子がありません。」と表示されるので調べると、
バッチファイルでは小数の計算が出来ないのですね・・・

解決策などありましたらお教え下さい、すみません><
675デフォルトの名無しさん:2011/06/06(月) 14:18:14.08
>>672
すみません、よく読んだらxls実行した後に、
終了後削除となっていますね・・・。
実行はstartで出来るとして調べたらプロセスの監視も出来るようですね。
自分のやりたい事もままならないのにしゃしゃってすみませんでした;
676デフォルトの名無しさん:2011/06/06(月) 18:19:45.97
>>674
1000倍とかして計算すれば?
677デフォルトの名無しさん:2011/06/06(月) 21:29:18.68
>>676
レスありがとうございます。

検索して100倍、1000倍で計算の後にその分を割ると・・・
と説明されているのを見て試してみたのですが、
set/a 以降ですでに小数自体が切り捨てられダメでした。

test.txt
aaa bbb ccc 12.3
ddd eee ddd 45.6
ggg hhh aaa 78.9

for /f "tokens=3" %%a in (test.txt) do set /a T=T+1000*%%a
echo 合計:%T%

演算子がありませんでした。〜表示で、
和は整数だけが足された結果の135となってしまいます・・・。
678デフォルトの名無しさん:2011/06/06(月) 23:09:37.25
>>677
工夫しようぜ
小数が整数部2桁、小数部1桁固定なら何とかなるでしょ
679デフォルトの名無しさん:2011/06/07(火) 04:25:39.11
cmdにしがみつかずvbs使おうぜ
680デフォルトの名無しさん:2011/06/07(火) 05:50:38.23
スレタイ読みやがれです
681678:2011/06/07(火) 08:01:48.35
もうちょっと考えてみたけど小数部が桁数固定であれば、
整数部は何桁でも大丈夫な方法だった

例えば常に、
aaa bbb ccc 12.34
ddd eee ddd 45.00
ggg hhh aaa 78.90
みたいになってればOK(質問者は業務プログラムのバッチファイル部分担当と想定
                先行プログラム開発者に小数部の桁数固定を頼んでね)

for /f "tokens=3" %%a in (test.txt) doをネストするか中間ファイル作るかして、

12.34
45.00
78.90

に対して、
forコマンドの「delims=.」オプションで整数部と小数部を.でスプリットして、
別々の変数に格納し、小数部の合計値が小数部桁数を超えたら繰り上がりを変数で保持して
(今回の例では小数部合計134だから、「1」を変数に格納)、
整数部合計と繰り上がり値を足したら最後に、
set final_sum=%int_sum_with_carry%.%float_num%
みたいな感じで文字列連結すればいいんじゃない?
682デフォルトの名無しさん:2011/06/07(火) 12:03:57.85
小数部が1桁なら簡単なのだが、2桁以上だとちょっと面倒臭いことになる。

先頭が0ではないかで分けて、0だった場合は先頭部の0を全部消すといった
作業が必要。

なぜかというと、set /a x=012 というように一桁目が0の時
これは8進数と解釈されるから。x=089などとなった場合はエラーになる。
683デフォルトの名無しさん:2011/06/07(火) 17:09:08.22
>>682
わざわざそんなあほうなことしないから
684デフォルトの名無しさん:2011/06/07(火) 21:24:10.52
>>679
バッチでは小数演算が出来ないとのことなので、
vbsやwshも考えたのですが余計に分からなくてw;

>>681-683
ありがとうございます。
仰るとおり、一旦数字だけの中間ファイルを作った後、
整数と小数点部分の分離〜それぞれの合計まではできました。
が、小数部分が3桁になった際(例だと134)に1と34を分ける所で躓いてます。

小数部分の変数からオフセット?なるもので ~-2% として後ろ2桁を取り出せても、
百の位の桁はどう検出して整数部分につけるのだろうとか・・・
685デフォルトの名無しさん:2011/06/07(火) 21:48:05.93
ちょっと話が横にそれてしまうのですが、
四則演算が出来るバッチなるものを検索で見つけたのですが・・・
http://folomy.jp/heart/?m=pc&a=page_c_topic_detail&target_c_commu_topic_id=18156

試したところコマンドプロンプトでは小数点含めた数の計算は出来たので、
(test.txt)を上記演算バッチに投げ(読み込ませ)利用できたりしませんでしょうか?;
686デフォルトの名無しさん:2011/06/07(火) 22:33:28.17
そっちできけよ
687デフォルトの名無しさん:2011/06/08(水) 02:17:21.55
>>684
rem 小数点以下最大4桁
for /f "tokens=4" %%a in (test.txt) do (
for /f "tokens=1,2 delims=." %%i in ("%%a") do (
set /a x=x+%%i
set /a t=1%%j0000
call set /a y=y+%%t:~0,5%%-10000
)
)
set /a z=x*10000+y
call echo %%z:%z:~-4%=%%.%z:~-4%
688678:2011/06/08(水) 06:58:50.26
>>684
例の合計値は正しくは124でしたね。>>682の暗算が間違ってました(恥
あとfloat_numではなくfloat_sumと書いたつもりでした

それはさておき、まず
ser /a carry=%float_sum% / 100 で商を取得し、0だったら繰上げなし。
1以上なら以下コマンドを実行し、整数部合計と小数部繰り上がり(余り)を合計する。
set /a int_sum_with_carry=%int_sum% + %carry%

で最後は必ず
set final_sum=%int_sum_with_carry%.%float_sum%
すればおkかな
689デフォルトの名無しさん:2011/06/08(水) 07:24:02.75
このスレで聞くのもなんだが、お前らなんでそんなにcmdに拘るの?
PerlなりRubyなり…昔からある便利な道具を使わない(or使えない)理由は何?
690デフォルトの名無しさん:2011/06/08(水) 08:38:59.98
標準搭載だから
691デフォルトの名無しさん:2011/06/08(水) 09:44:47.34
perlやらRubyやらのオープンソースじゃ悪意ある人間によるウイルス混入の危険性がある
692デフォルトの名無しさん:2011/06/08(水) 12:00:28.42
こんなの制限のある中でどれだけの事が出来るかっていう思考実験だろ?
これを実際にやろうって奴はいないだろ。
もっと簡単便利な言語で書けば終わりなんだし。

逆に言えば普通は出来ない(かもしれない)ことを無理やりでもやろうって所が面白いじゃん。
693デフォルトの名無しさん:2011/06/08(水) 12:23:22.70
>>689
基本的には曲芸だと思う、俺も普段バッチは大半がJScriptで書いてる
694デフォルトの名無しさん:2011/06/08(水) 12:23:53.87
>>688
> ser /a carry=%float_sum% / 100 で商を取得し、0だったら繰上げなし。
> 1以上なら以下コマンドを実行し、整数部合計と小数部繰り上がり(余り)を合計する。
> set /a int_sum_with_carry=%int_sum% + %carry%

そんな面倒なことしなくても
set /a int_sum_with_carry=float_sum / 100 + int_sum
一行で終わりだろうに。
695デフォルトの名無しさん:2011/06/08(水) 18:15:46.46
>>691に溜息
696デフォルトの名無しさん:2011/06/09(木) 15:49:54.35
時間指定で特定のアプリを起動させるバッチコマンドを書いているんですが
いちいち起動させるアプリごとにatコマンドを書かないで済ます方法はないでしょうか?

たとえばこの特定の日時にメモ帳と計算機とペイントを開くバッチなんですが

at 14:50 /interactive /every:M,T,W,Th,F c:\windows\notepad
at 14:50 /interactive /every:M,T,W,Th,F %SystemRoot%\system32\calc.exe
at 14:50 /interactive /every:M,T,W,Th,F %windir%\system32\mspaint.exe

これの
"at 14:50 /interactive /every:M,T,W,Th,F "の部分の記述を
一度だけ書いて起動するアプリごとに書かないで済ますといった感じです。
697デフォルトの名無しさん:2011/06/09(木) 16:31:23.33
>>696
バッチファイル
698デフォルトの名無しさん:2011/06/09(木) 20:11:29.67
変数に入れればいいべ
699デフォルトの名無しさん:2011/06/09(木) 21:11:36.79
>>697
atコマンドを書き込んだバッチで別のバッチを読み込ませるってことですか?
>>698
変数にコマンドを入れてそれぞれの行の頭に変数を書き込むみたいな感じですかね?
まったく素人で申し訳ないんですがちょっと変数でコマンドを書いていただけないですかね?

いろいろいじっていたんですが、Windows7だとatコマンドで起動アプリのGUIを表示することってできないんですね。
これは不便です。
700デフォルトの名無しさん:2011/06/09(木) 21:27:25.26
set at=at 14:50 /interactive /every:M,T,W,Th,F
%at% c:\windows\notepad

「バッチ 変数」でググるくらいのことはしようね
701デフォルトの名無しさん:2011/06/09(木) 21:36:57.73
なるほど 解決!
702デフォルトの名無しさん:2011/06/09(木) 21:45:37.54
>>700
一応ぐぐってはみてコマンドも書いてみたんですが動かなかったんです。
どうもありがとうございました。
703デフォルトの名無しさん:2011/06/09(木) 22:09:24.41
at 14:50 /interactive /every:M,T,W,Th,F c:\windows\notepad
これが動くのか?
704デフォルトの名無しさん:2011/06/10(金) 16:08:32.57
Windowsフォルダの方のnotepad.exeを使いたがる男の人って
705デフォルトの名無しさん:2011/06/10(金) 16:41:15.73
>>704
…憧れちゃう
だろ?w
706デフォルトの名無しさん:2011/06/10(金) 17:59:56.12
もともとwindowsフォルダはpath通ってるよな
707Win7Home32bit:2011/06/10(金) 23:15:17.11
C:\>where notepad
C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe

C:\>fc /b C:\Windows\System32\notepad.exe C:\Windows\notepad.exe
ファイル C:\WINDOWS\SYSTEM32\notepad.exe と C:\WINDOWS\NOTEPAD.EXE を比較してい
ます
FC: 相違点は検出されませんでした
708デフォルトの名無しさん:2011/06/10(金) 23:36:57.73
windowsフォルダにあるのはsystem32フォルダにある奴の
ハードリンクなのに差異なんかあるはずねぇよw
709デフォルトの名無しさん:2011/06/11(土) 01:27:51.82
ハードリンクなのに(笑)
710デフォルトの名無しさん:2011/06/11(土) 02:07:53.78
ハードリンクかどうかは素人目には分からんからな
711デフォルトの名無しさん:2011/06/11(土) 08:58:39.69
ハードリンクに赤いショートカットオーバーレイが出るのは
あれは何のツールだったっけ?
712デフォルトの名無しさん:2011/06/11(土) 09:45:20.81
Link Shell Extension
713デフォルトの名無しさん:2011/06/11(土) 13:47:01.44
java用のバッチファイルjava.batを作って(そのフォルダには、他言語用のバッチファイルなどがある)
そのフォルダにパスが通っているんですけど、

javaファイルを実行しようと思ってコマンドプロンプトで java コマンドを打つと
このバッチファイルが実行されてしまいます。バッチファイル名を変えずに
javaコマンドを実行できるようにならないんでしょうか?

そもそも、exeファイルとbatファイルの優先順位がexeファイルより上なんですか?
また、パスの設定でbatファイルのディレクトリの方を先に書いたから、そっちから先に検索するからでしょうか?
714デフォルトの名無しさん:2011/06/11(土) 13:56:10.83
pathextの記述順
715デフォルトの名無しさん:2011/06/11(土) 13:57:18.27
pathは先に書いたもの順。同じpathで異拡張子なら前述の通り
716デフォルトの名無しさん:2011/06/11(土) 14:19:51.53
pathextの記述順はEXEの方が優先順位高い(先に書いてある)です。

でも、pathはバッチファイルのあるフォルダが先に書いてあります。

という観点でみると、PATHEXTより、PATHの方が優先順位が高いということなんですね。

どうも、みなさん(お一方?)ありがとうございました。すっきりなぞが解けました。
717713,716:2011/06/11(土) 14:20:41.68
失礼しました。私は>>713でございます。
718 忍法帖【Lv=4,xxxP】 :2011/06/11(土) 15:41:27.94
>>713
javaコマンドを拡張子付きで、
java.exe と指定すればいいんじゃね?
719デフォルトの名無しさん:2011/06/12(日) 04:09:49.96
>>713
そういうバッチファイルってsetjavaとかのが良いよ
まあ.exeまで書けば問題ないけど
720デフォルトの名無しさん:2011/06/13(月) 16:11:32.83
>>710
wwwww
721デフォルトの名無しさん:2011/06/13(月) 16:35:56.18
蛍光灯?
722デフォルトの名無しさん:2011/06/13(月) 19:28:03.35
ハードリンクかどうか表示するバッチファイルを求む
723デフォルトの名無しさん:2011/06/13(月) 20:00:41.07
ハードリンクかどうかではなくハードリンクがあるかどうかだな。

lsとか使えりゃ一発なんだけど、標準の環境じゃファイルIDで検索しまくるしか思いつかん。
724デフォルトの名無しさん:2011/06/13(月) 20:28:25.92
hardlink?.cmd C:\Windows\System32\notepad.exe C:\Windows\notepad.exe
725デフォルトの名無しさん:2011/06/15(水) 17:35:42.60
中身を書けよ
726デフォルトの名無しさん:2011/06/15(水) 19:08:58.72
ファイルAとBがお互いハードリンクかってのは簡単にわかるよ。

fsutil file queryfileid ファイルA
でファイルIDゲットしてファイルBも同様にやって同じIDならハードリンク。

ただ、ひとつのファイルに対して他に同じIDを持つファイル(=ハードリンク)があるかとか、
その名前は何かとかになると標準コマンドでは対応できんかと。
727デフォルトの名無しさん:2011/06/16(木) 00:51:28.99
>>27
@REM FIZZBUZZ.BAT 最短目指して
@SET/A N+=2,F=N%%3,S=N*5
@IF %N:~-1%==0 SET S=Buzz
@IF %F%==0 SET S=Fizz%S:*0=%
@ECHO %S:0=%&IF %N% LSS 200 CALL %0
PAUSE
728デフォルトの名無しさん:2011/06/16(木) 08:40:29.91
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,100) do (set /a fb=%%i%%15, bu=%%i%%5, fi=%%i%%3
if !fb!==0 ( echo fizzbuzz) else if !bu!==0 ( echo buzz) else if !fi!==0 ( echo fizz) else echo %%i)
pause
729デフォルトの名無しさん:2011/06/17(金) 00:17:52.47
for (int i=0; i++ < 100;) { static const char* const a[]={" %d"," Fizz"," Buzz"," FizzBuzz"}; printf(a[!(i%3)+!(i%5)*2], i); }
これ参考に書いてみたのですが

setlocal enabledelayedexpansion
set a[0]=%%num%%
set a[1]=Fizz
set a[2]=Buzz
set a[3]=FizzBuzz
for /l %%i in (1,1,100) do (
set /a u=!(%%i%%3)+!(%%i%%5)*2, num=%%i
call echo %%a[!u!]%%
)
pause

+!(%%i%%5)*2 の使い方が誤っています。
と出ます。

コマンドで
set i=15
set /a u=!(%i%%3)+!(%i%%%5)*2
バッチで
set /a u=!(%i%%%3)+!(%i%%%5)*2
とかだと3と結果が出て動くので、何が悪いかわかりません。
わかる人がいれば教えてください。
730729:2011/06/17(金) 00:26:59.42
for /l %%i in (1,1,100) do ( set num=%%i
set /a u=!(num%%3)+!(num%%5)*2
call echo %%a[!u!]%%
)
これも同じように
+!(num%5)*2 の使い方が誤っています。
となりました。お手上げ。
731デフォルトの名無しさん:2011/06/17(金) 01:11:06.99
set /a u=!(%%I%%3^)+!(%%I%%5^)*2
括弧の対応ぐらいしてくれとは思う
732デフォルトの名無しさん:2011/06/17(金) 01:18:37.97
setlocal enabledelayedexpansion
set a[0]=%%num%%
set a[1]=Fizz
set a[2]=Buzz
set a[3]=FizzBuzz
for /l %%i in (1,1,100) do (set num=%%i
set /a "u=^!(num%%3)+^!(num%%5)*2"
cmd /c call echo %%a[!u!]%%)
pause
733729:2011/06/17(金) 01:41:43.78
>>731
レスありがとうございます
)をエスケープしてやる必要があったのですね
動くようにはなりましたが u が 0,2,4,6,8 となっているようで思ったようには動きませんでした

>>732
ちゃんと思ったように動作しました!ありがとうございます!
動作の原理的なことがよくわからないのですが
"で全体をエスケープして且つ、!をエスケープてことなんですよね?
!(num%%3)+!が存在していない環境変数とみなされないようにってことなのかな?
call の部分も cmd /c 付けないと %num% となって展開が足りなかったみたいです
ちゃんと書ける人を見ると自分がなんとなくわかった気がしてるだけで
全然理解出来て無いのがよくわかります
バッチ難しいですねー
734 忍法帖【Lv=1,xxxP】 :2011/06/18(土) 19:36:23.19
>>726
C:\>fsutil hardlink list
使用法 : fsutil hardlink list <ファイル名>
例 : fsutil hardlink list c:\foo.txt

C:\ap>fsutil hardlink list C:\Windows\System32\notepad.exe
\Windows\notepad.exe
\Windows\winsxs\x86_microsoft-windows-notepadwin_31bf3856ad364e35_6.1.7600.16385_none_42a023025c60a33a\notepad.exe
\Windows\winsxs\x86_microsoft-windows-notepad_31bf3856ad364e35_6.1.7600.16385_none_6ef0e39ed15350e4\notepad.exe
\Windows\System32\notepad.exe
735デフォルトの名無しさん:2011/06/18(土) 20:00:13.40
>>734
list is an invalid parameter.
736デフォルトの名無しさん:2011/06/18(土) 21:18:47.01
listがあるのはvista以降だな
737デフォルトの名無しさん:2011/06/18(土) 21:20:12.50
間違えた。vistaじゃなくて7と2008サーバ
738デフォルトの名無しさん:2011/06/18(土) 21:46:29.92
んなこといったらWin2K以前にはfsutilコマンド自体ないし
739デフォルトの名無しさん:2011/06/21(火) 18:24:58.90
vista用で
740デフォルトの名無しさん:2011/06/21(火) 18:40:32.95
おら早くnotepadがハードリンクなのか証明しろやカス共(XP対象でお願いします。)
741デフォルトの名無しさん:2011/06/21(火) 19:28:05.93
ことわる
742デフォルトの名無しさん:2011/06/21(火) 20:47:08.37
リンクされてるわけ無いじゃん

ちなみに>>726は嘘です
743デフォルトの名無しさん:2011/06/21(火) 23:06:01.76
64bitではwindows\notepad.exeはどっち?
744デフォルトの名無しさん:2011/06/23(木) 11:01:42.23
タスクスケジューラに登録したものを無効にしたり有効にしたり無効にしたりできませんか?
745デフォルトの名無しさん:2011/06/23(木) 16:13:37.37
できま
746デフォルトの名無しさん:2011/06/23(木) 16:54:42.37
type http://hibari.2ch.net/test/read.cgi/tech/1298873550/745.dat
echo.
echo ┌───┐
echo │→す  │
echo │→せん│
echo └───┘
747デフォルトの名無しさん:2011/06/23(木) 17:51:38.05
一時的にタスクを切りたいときとかわざわざタスクスケジューラの画面出すのがめんどくさかったんですよね
できないのか残念です
748デフォルトの名無しさん:2011/06/23(木) 19:31:31.82
教えるのがめんどくさかったんですよね
残念です
749デフォルトの名無しさん:2011/06/23(木) 19:44:31.41
初心者プギャー
750デフォルトの名無しさん:2011/06/23(木) 20:59:00.96
質問です。
会社のネットワークプリンタを新規に導入するにあたって、不要のプリンタ設定の削除、新規ポート追加、
既存のプリンタの設定変更、新規プリンタ追加の設定をバッチファイルで処理しようとしてるんだけど、
不要プリンタの削除、既存プリンタの設定変更、新規ポート追加までは共有サーバに置いてる
バッチファイルで正常に動いてるのに、新規に作ったポートでの新規プリンタ追加だけが
自分のpcでは出来て、他のpcでは「アクセス権がない」とけられる現状。何で?

rundll32 printui.dll,PrintUIEntry /r "ポート" /if /b "プリンタ名" /f "共有サーバ上のinf" /m "モデル名" /q /u

引数の順序は違うがこんな感じの追加設定。
ドライバのインストールまでは走るけど、最終的な追加で蹴られちゃいます。
google先生に尋ねても同じような事例は出てこないので誰か助けて。
あ、XPです。
751デフォルトの名無しさん:2011/06/23(木) 21:46:56.71
runasで調べた上で試してみれば?
752750:2011/06/24(金) 19:26:34.38
>>751
各ユーザーに自分でバッチファイル実行してもらう予定で、
別にアカウントにはプリンタ変更さわれないほどの制限はかけてなかった。

削除とか変更は走るから謎だったんだけど、今日もう一回やったら普通にでけたわ。
昨日できなかった理由がわからん。
けどレスしてくれてありがとね。
753デフォルトの名無しさん:2011/06/25(土) 04:14:33.97
WindowsXPのリモートデスクトップで使うクリップボードのファイルrdpclipが時々動作しなくなる(コピペできなくなる)ので
rdpclipを再起動させるバッチを書いたのですが
コマンドプロンプトで一行ずつ実行するのには問題ないのに
バッチで処理するとコマンドプロンプトに戻ってこなくなります
対策があればお願いします

以下書いたバッチ
taskkill /IM rdpclip.exe
rdpclip.exe

バッチファイル名
rerunclip.bat
でSystem32フォルダに入れる
754デフォルトの名無しさん:2011/06/25(土) 04:28:47.94
start rdpclip.exe
755デフォルトの名無しさん:2011/06/25(土) 05:06:13.07
>>754
ありがとうございます
うまくいきました
756デフォルトの名無しさん:2011/06/28(火) 11:32:40.66
バッチファイルに D&D で画像ファイルパスを投げると
リサイズして新たに保存してくれるスクリプトです。

@echo off
set _size="640x480"
rem set /p _size="Resize option (Default:640x480)"
for %%f in (%*) do (
set _new="%%~pf%%~nf.new%%~xf"
echo "Convert %%f"
echo " to --> %_new%"
E:\exe\ImageMagick-6.6.9-8\convert.exe -resize %_size% -quality 20 %%f %_new%
)
echo Done.
pause

上のでは _new に新しいパスが入りません。
どなたか教えてください。
757デフォルトの名無しさん:2011/06/28(火) 11:51:16.44
まず、set /?
遅延展開 でググる、
call でこのスレ検索する
758デフォルトの名無しさん:2011/07/04(月) 22:58:45.20
マイ コンピュータ\(デジカメとかポータブルメディアプレイヤーとかの機種名)\Device Storage
とかのストレージのフォルダを扱うには
どういう風にすればいいっすか

UNCみたく
\\HOSTNAME\ABC\DEF
みたいな指定はできないっすか

WSHとか PowerShell使えば
扱えるっすか?
759デフォルトの名無しさん:2011/07/04(月) 23:03:25.46
こういう風でいいっす
できないっす
扱えるっす
7601/2:2011/07/05(火) 00:22:16.07
教えてください。
以下のバッチを実行したところ、期待通りの結果になりません。

#ip.bat
@echo off
for /f %%a in (ip.lst) do (
echo ------------------------
ping -n 1 %%a
echo %ERRORLEVEL%
if %ERRORLEVEL% EQU 1 echo pingに失敗
if %ERRORLEVEL% EQU 0 echo pingに成功
)

#ip.lst
127.0.0.1
192.168.0.5
111.111.111.111 <これは通じないIP

7612/2:2011/07/05(火) 00:23:37.60
再現手順
スタート→コマンドプロンプト起動→cd <ip.batのあるディレクトリ>
→>ip.batと実行すると、なぜか全部%ERRORLEVEL%が0になってしまう。

上で、ip.batを実行したコマンドプロンプト上で、↑キーを押して、
再度、ip.batを実行すると、pingこまんどの出力は変わらないのに、%ERRORLEVEL%が1になってしまう。

実行環境はWindows7 ホームプレミアムです。

よろしくお願いします。
762デフォルトの名無しさん:2011/07/05(火) 00:43:53.65
>>761
とりあえず、
echo %ERRORLEVEL%
の行は要らない、というか場所がマズすぎる。

もう一度
if /?
を読み直すことをお勧め
errorlevel は
if ERRORLEVEL 1 なにか
で使えるのだから。

あるいは、
>>757

お好きな方で。
763デフォルトの名無しさん:2011/07/05(火) 06:14:14.69
764デフォルトの名無しさん:2011/07/05(火) 11:44:08.38
@echo off
for /f %%a in (ip.lst) do (
echo ------------------------
ping -n 1 %%a
if %ERRORLEVEL%==0 (
echo pingに成功 %ERRORLEVEL%
) else (
echo pingに失敗 %ERRORLEVEL%
)
765デフォルトの名無しさん:2011/07/05(火) 12:17:44.15
>>764
× for in () do (if %ERRORLEVEL%==0

○ for in () do (if !ERRORLEVEL!==0
  for in () do (if ERRORLEVEL 1 (echo) else (echo) )
766デフォルトの名無しさん:2011/07/05(火) 13:20:53.46
成功だけを拾いたい時
if errorlevel 0
とやってしまわないよう注意。
if not errorlevel 1
こっちを使う。
767デフォルトの名無しさん:2011/07/05(火) 13:29:16.99
ちなみに、pingの成否をerrorlevelで判断するのはよろしくない。
pingが通らなかった時にerrorlevelが0になるパターンがあるから。
destination host unreachable はそのひとつ。
同じ条件でもOSによって反応が違ったりするんで当てにならない。

errorlevelでなく、forで出力を受けて解析したほうがいい。
768デフォルトの名無しさん:2011/07/05(火) 14:58:36.70
ちなみにpingの成否をforで出力を受けて解析するときは改行文字に注意したほうがいい。
769デフォルトの名無しさん:2011/07/05(火) 21:45:21.02
>>759
ありがとう
このさいPowerShellの勉強でも始めるよ

ググって自分で勉強しようと思うんだけど
下記みたいなこういうパスの正式名称がわからないから
検索キーワード教えて

"マイ コンピュータ\(デジカメとかポータブルメディアプレイヤーとかの機種名)\Device Storage "

770761:2011/07/07(木) 23:04:55.90
>>762 >>763 >>764 >>765 >>766 >>767 >>768
大変参考になりました。ものすごく作成が進みましたありがとうございます。
続けてで大変恐縮なのですが(以下、字数制限の為省略してかいております。)
771761:2011/07/07(木) 23:06:13.02
for /f %%a in (yamada.,txt) do
call :pin
call :netmount
)
:pin
ping -n 1 %ipaddr% | find "TTL"
set pingerr=%errorlevel%
(以下、%pingerr%によって判定。)
ブルーチンpinが失敗したら、:netmountは実行しないというのに良い方法はありますでしょうか。
(具体的には記載は見つからなかったのですが、for 内でgotoやgotoのとび先指定はどうも使えないようなので)

772デフォルトの名無しさん:2011/07/07(木) 23:59:14.87
後出して申し訳ありませんが

for /f %%a in (yamada.,txt) do
call :pin
call :netmount
<:pinがエラーならここに飛ぶ処理> <こんなしょり
)
:pin
ping -n 1 %ipaddr% | find "TTL"
set pingerr=%errorlevel%

こんな処理ができれば最高です。
よろしくお願いします。
773デフォルトの名無しさん:2011/07/08(金) 00:26:09.42
if %pingerr%==0 call :netmount
じゃだめなん?

call :pin
if errorlevel 1 goto :jump
call :netmount
:jump

exit /b

:pin

exit /b %pingerr%
774773:2011/07/08(金) 00:30:48.92
やりたい仕様書いて、自分が書いたコードをコードパッドにでもあげたら
誰かが暇つぶしにもっと良いものを書いてくれるかもしれんぞ。
775デフォルトの名無しさん:2011/07/08(金) 00:39:50.14
ああすまんforの中でgoto使えないってか。
for /f %%a in (yamada.,txt) do (call :sub %%a)
とかでcallで一時的にサブルーチンに逃げれば:subの中でgotoも更にcallも使えるよ
776デフォルトの名無しさん:2011/07/08(金) 02:22:48.42
>ああすまんforの中でgoto使えないってか。
使えるが
使えないのはラベルのほうだろ
777デフォルトの名無しさん:2011/07/08(金) 12:19:41.59
errorlevelで返すのもいいけど、pinの中で分岐してはいけない
理由が何かあるのか?

forの中で分岐する必要がないだろ。
778デフォルトの名無しさん:2011/07/08(金) 12:36:21.24
>>771
>ブルーチンpinが失敗したら、:netmountは実行しないというのに良い方法はありますでしょうか。
試してないけど、

call :pin
call :netmount

を1行にまとめて、

call :pin && call :netmount

としたら上手く行きませんか?
779デフォルトの名無しさん:2011/07/09(土) 18:29:12.21
time.txtというファイルに日付を格納し、
その中身を読み込みnewtimeという一時変数に格納したいんですがどうやればいいんでしょうか

set newtime = (type time.txt)
set newtime = & type time.txt
等々色々試してみたんですが上手く行きません。

上手くsetする方法をどうぞお教えください。
実行環境はWindows7 Ultimateです。
780デフォルトの名無しさん:2011/07/09(土) 18:37:51.54
set /p newtime= <time.txt
781デフォルトの名無しさん:2011/07/09(土) 19:33:28.51
>>780
助かりました、ありがとうございます
勉強不足もいいところ、しっかりと学習してきます
782デフォルトの名無しさん:2011/07/09(土) 21:03:38.42
>>780
横からだが...

こんなことできるんだ。
俺も勉強になったよ。
783デフォルトの名無しさん:2011/07/09(土) 22:21:40.24
(
set /p x=
set /p y=
) < a.txt
もよろしく
784デフォルトの名無しさん:2011/07/12(火) 12:24:12.47
質問させてください batファイルでこれらを複数起動させたいんですが
うまくいきません・・ CMDウインドウが開いて残るだけです
start "G:\FREESOFT\ProxN45j\Proxomitron.exe"
start "G:\FREESOFT\sleipnir166\Sleipnir.exe"
start "G:\FREESOFT\DoeView06120\Jane2ch.exe"
start -wait "G:\FREESOFT\TF1610\TF.exe"
ウエイトオプションをつけて一気じゃなくて前のソフトの
HDDカリカリが終わってから起動したいんです。
なにとぞお力をおかしください 願います
785デフォルトの名無しさん:2011/07/12(火) 12:55:00.19
start /?
START ["タイトル"] [/Dパス] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [コマンド/プログラム]
[パラメータ]

start "タイトルはなんでもいい無くてもいいが二重引用符は残すこと" /wait "G:\FREESOFT\TF1610\TF.exe"

カレントごと移動する必要があるならこっち
start "" /d "G:\FREESOFT\TF1610" /wait "TF.exe"
start "" /d "C:\TEMP" /wait "G:\FREESOFT\TF1610\TF.exe"
786デフォルトの名無しさん:2011/07/12(火) 14:14:41.10
>>784
> HDDカリカリが終わってから起動したいんです。

無理。

スリープ入れるとか、HDD使用率を監視するとか、それっぽい事は出来なくもないが。
startを連続で入れるんじゃ無理。
787デフォルトの名無しさん:2011/07/12(火) 15:50:39.64
ウエイトオプションをつけて、一気じゃなくて
ウエイトオプションをつけて一気、じゃなくて
どっちで切るかで意味合いが変わってくるなw
質問するなら紛らわしい書き方するな

> HDDカリカリが終わってから起動
どちらにせよこれを厳密にやろうとすると面倒。てかバッチで無理じゃね?

まあどっちにせよ>>785->>786で聞きたいことの解答は足りてるぽいな
788デフォルトの名無しさん:2011/07/12(火) 15:53:59.42
今度は「スリープ入れるってどうすれば…」とか聞いてきそう
789デフォルトの名無しさん:2011/07/12(火) 16:03:39.40
>>787
> ウエイトオプションをつけて、一気じゃなくて
> ウエイトオプションをつけて一気、じゃなくて

start の /wait の事だから結局一緒だと思うが。
790デフォルトの名無しさん:2011/07/12(火) 16:20:53.28
sleepの-cってこういう用途に使えん?
791デフォルトの名無しさん:2011/07/12(火) 17:38:46.69
>>785 ありがとうございます
しかし、startupdelayerを導入することにしました。
これから設定してみます。 応えてくださったのにすみません
みやすたーとあっぷもよいでしょうが高機能っぽいのです

また質問させてください
ファイラはTF.exeを使っているのですが
あるフォルダを選択して右クリック送るから
そのフォルダの名前を取得してその中に同名からフォルダを
任意の階層で作るbatがほしいのです。

あとZドライブなどのルートの中のフォルダにある
txtファイルをすべて切り取って任意の場所に
スマートに移動するbatもほしいのです。

よろしくお願いします
792デフォルトの名無しさん:2011/07/12(火) 18:47:24.25
for dir set if md copy del
組み合わせてがんばれ
793デフォルトの名無しさん:2011/07/12(火) 19:25:04.60
TF使ってないから
794デフォルトの名無しさん:2011/07/12(火) 19:43:37.49
>>791
ここは作ってくれスレじゃねーから
795デフォルトの名無しさん:2011/07/13(水) 17:22:25.91
%cd% のようなカレントディレクトリのフルパスでなく、ディレクトリ名だけが欲しい時には
どのようにすれば良いでしょうか。

c:\123\456\789\abc.txt
の時に abc.txt のある 789 だけ得る、のような場合です。
796デフォルトの名無しさん:2011/07/13(水) 17:39:18.06
%cd:\=&set cdname=%
797デフォルトの名無しさん:2011/07/13(水) 17:53:44.67
abc.txtにならん?
798デフォルトの名無しさん:2011/07/13(水) 18:27:08.83
>>797
set cd=c:\123\456\789\abc.txt
とかしてなければabc.txtにはならないよ。 %cd%はカレントディレクトリだから。

>>795
パスから親ディレクトリ名が欲しいなら call とか for で %~dp とかの
修飾子と >>796みたいな set の置換を組み合わせると出来るかな
callやバッチの引数からなら %~0\..\ とか。
修飾子については call /?
799デフォルトの名無しさん:2011/07/13(水) 18:27:57.48
for /f "delims=\ tokens=4" %I in ("c:\123\456\789\abc.txt") do echo %I
800デフォルトの名無しさん:2011/07/13(水) 18:35:25.57
そりゃ4番目ってわかってりゃいいけどw
801デフォルトの名無しさん:2011/07/13(水) 18:37:09.47
>>796 >>798
あたま悪そう
802デフォルトの名無しさん:2011/07/13(水) 18:38:07.34
前もって\の数を数えてtokens=4を動的にすれば済む話だな
803デフォルトの名無しさん:2011/07/13(水) 19:07:29.56
for %I in ("c:\123\456\789\abc.txt") do for %J in ("%~pI") do echo %~nxJ
804デフォルトの名無しさん:2011/07/13(水) 20:50:30.33
>>801
796は昔からある方法だが…
知らないの?

それとも理解できないのかな?
805795:2011/07/13(水) 20:54:40.46
レスありがとう >>796-804、ザックリの返答でごめんなさい。

>>796
大変参考になりました。

>>798
%~0\..\ を使った完全版を考えて見ましたがちょっと分かりませんでした。

>>799,802
4つ目とは限らないので \ を数えないといけないのですが数える方法が
わかりませんでした。

>>803
『ECHO は <ON> です。』になってしまいました、意図は分かるのですが
%~dpJ や %~tJ が良くてなぜ %~nxJ が『ECHO は <ON> です。』になるのかが分かりません……。
806795:2011/07/13(水) 20:56:20.50
連投失礼、とりあえず次が意図した結果になったので上手く行きそうです。

set nanika=C:\123\4 5 6\7(((8)9\あいう\abc.txt
for /f "usebackq delims=" %%i in (`echo "%nanika%"`) do (
set dirpath=%%~dpi
)
set dirpath=%dirpath:~0,-1%
%dirpath:\=&set dirname=%
echo %dirname%

ありがとうございました。
807デフォルトの名無しさん:2011/07/13(水) 21:26:19.34
for %I in ("c:\123\456\789\abc.txt") do for %J in ("%~pI.") do echo %~nxJ
808デフォルトの名無しさん:2011/07/13(水) 21:39:08.27
set a=c:\123\456\789\abc.txt
%a:\=&set b=%
call set a=%%a:\%b%=%%
%a:\=&set b=%
echo %b%
809795:2011/07/13(水) 22:13:46.75
さらなるフォローありがとうございます。

>>807
なるほど、理解できました。
言われてみればしごく当たり前というか自分で気がつけという話でしたね、お手数かけました。

>>808
call で尻尾を削るとか発想が全く無かったです。
私にとって「 call で変数」は敷居が高いです……。

あと、気がついたので自己レス
>>806
みたいにするなら set _dummy=%dirpath:\=&set dirname=% のようにしておいた方が安全というか
後で面倒が無さそうですね。
810デフォルトの名無しさん:2011/07/13(水) 22:20:04.37
for %a in (.) do echo %~nxa
811デフォルトの名無しさん:2011/07/14(木) 01:11:42.24
for %I in ("c:\123\456\789\abc.txt\..") do echo %~nxI
812デフォルトの名無しさん:2011/07/14(木) 08:03:39.38
set "_dummy=%dirpath:\="&set "dirname=%"
813デフォルトの名無しさん:2011/07/14(木) 15:10:36.91
set a=c:\123\abc.txt\789\abc.txt
%a:\=&set b=%
call set a=%%a:\%b%=%%
%a:\=&set b=%
echo %b%
814デフォルトの名無しさん:2011/07/14(木) 15:54:07.76
'c:\123\abc.txt\789\abc.txt'.parent.basename
815デフォルトの名無しさん:2011/07/14(木) 16:12:27.96
set a=c:\123\456\789\789
%a:\=&set b=%
call set a=%%a:\%b%=%%
%a:\=&set b=%
echo %b%
816デフォルトの名無しさん:2011/07/14(木) 23:35:45.80
set a=c:\123\456\789\abc.txt&
rem. %a:\=&set b=%&
call set a=%%a:\%b%=%%&
rem. %a:\=&set b=%&
echo %b%&
817デフォルトの名無しさん:2011/07/15(金) 03:17:08.60
set a=c:\123\456\789\789&
rem. %a:\=&set b=%&
call set a=%%a:\%b%=%%&
rem. %a:\=&set b=%&
echo %b%&

456
818デフォルトの名無しさん:2011/07/19(火) 07:08:48.38
echo hello | set /p s=

が行けるかと思ったら駄目だった…
for使わずこれくらい簡単に出力をキャプチャする方法はないのかな。
819デフォルトの名無しさん:2011/07/19(火) 14:46:20.92
echo hello | ( set /p s= & set p)

820デフォルトの名無しさん:2011/07/19(火) 15:19:19.10
echo hello | ( set /p sss= & set sss)
821デフォルトの名無しさん:2011/07/20(水) 15:06:06.68
dir /b /on *.jpgを実行すると
001.jpg 002.jpg 003.jpg 004.jpg...といった結果になりますが
コレを逆さの004から呼び出す事は可能ですか
004.jpg 003.jpg 002.jpg 001.jpg
822デフォルトの名無しさん:2011/07/20(水) 15:18:25.22
/o-n
823デフォルトの名無しさん:2011/07/20(水) 15:33:10.27
>>822
ヘルプの-降順ってそういう意味だったんですね
ありがとうございます
824デフォルトの名無しさん:2011/07/20(水) 19:18:38.09
勉強になる良スレsage
825デフォルトの名無しさん:2011/07/23(土) 12:34:50.31
ttp://d.hatena.ne.jp/jak-san/20081217/1229510807 これの最初の2行の原理?が知りたい
pushd "%~dp1"
"%~f0" "%CD%"
この2行。何してるの?
826デフォルトの名無しさん:2011/07/23(土) 14:22:36.28
pushd /?
call /?
set /?
827デフォルトの名無しさん:2011/07/23(土) 14:49:03.31
ファイルが指定された場合に自分自身を呼んだ後に終了してないから
以降のコマンドがそのまま実行されてるな。

ファイルパスがおかしくなるからエラーで実行はされないけど。
828デフォルトの名無しさん:2011/07/23(土) 15:31:44.35
ってかリンク先のページになにしてるかも書いてあるじゃん
829デフォルトの名無しさん:2011/07/23(土) 17:42:54.57
バッカもんだな
830デフォルトの名無しさん:2011/07/23(土) 18:26:26.20
とおりもんみたく
831デフォルトの名無しさん:2011/07/24(日) 00:38:43.11
pushd "%~dp1" ならわかるんですが その次の2つ行は一体何をしてるのか・・・
832デフォルトの名無しさん:2011/07/24(日) 00:47:55.34
echo して pause でもすりゃ
文字通り、見ればわかる
833デフォルトの名無しさん:2011/07/24(日) 00:54:28.28
>>831
%0はそのバッチ自身。あとはわかるな?
834デフォルトの名無しさん:2011/07/24(日) 01:07:54.54
以下のバッチを実行してみればわかるよ

set /a n+=1
pause
%0
835デフォルトの名無しさん:2011/07/24(日) 01:52:15.81
>>832-834
スレみたりechoしてみたらわかりました
再帰処理のようなことをしてたのか!
で↓で再帰を抜け出してる・・・とふむふむ
dir /a:d "%~1">NUL 2>&1
if %errorlevel% EQU 0 goto top
836デフォルトの名無しさん:2011/07/24(日) 04:44:07.19
>>825
このバッチファイル自身を、渡されたファイルを格納しているディレクトリ名に変えて改めて実行する

その上の行で
渡されたのがディレクトリか、それ以外のファイルかをチェックしてるので
最終的に欲しいのはディレクトリ名なのだろう

しかし、そのコードって>>825の後にgoto :eofは要らないのだろうか
837デフォルトの名無しさん:2011/07/24(日) 16:56:05.60
いらん
838デフォルトの名無しさん:2011/07/24(日) 18:06:45.20
x:\
なんてやると無限ループしない?
839デフォルトの名無しさん:2011/07/24(日) 20:04:00.98
ディレクトリを渡す時に最後に\を付けるとNGなんだよな。
dirは\があってもなくても同じ結果だけど
%~nx1は結果が違う。

840デフォルトの名無しさん:2011/07/27(水) 19:16:22.46
なるほど
841デフォルトの名無しさん:2011/07/28(木) 02:14:53.60
教えてください。あるフォルダ(C:\test)の中に、毎日、日付名(yyyymmdd)で
サブフォルダが作成されます。一年以上前のサブフォルダ以下を削除したいのですが、
調べながら自分で作ってみて一部よくわからないところがあります。

CD "C:\test"
SET YYYY=%DATE:~0,4%
SET MM=%DATE:~5,2%
SET DD=%DATE:~8,2%
SET /A Z=(%YYYY%-1)*10000+%MM%*100+%DD%
FOR /D %%A IN (*) DO (
IF %%A LSS %Z% (
RD /S /Q %%A
)
)
842841:2011/07/28(木) 02:16:59.09

つづきです。

上記の「FOR /D %%A IN (*) DO 」の部分があまりよくわかっていません。
(*):カレントディレクトリ(C:\test)以下の、/D:フォルダに対して
%%A:FORで繰り返される分の各ディレクトリ名(例 C:\test\20110728) に対して、
DO以下を実行しなさい。という解釈であっているでしょうか?
843デフォルトの名無しさん:2011/07/28(木) 03:57:36.39
FOR /?
844デフォルトの名無しさん:2011/07/28(木) 06:45:41.13
>>842
分からないなら、FORの中身をECHOなどに変えてみることだ。
845デフォルトの名無しさん:2011/07/28(木) 11:59:43.26
>>841
> SET /A Z=(%YYYY%-1)*10000+%MM%*100+%DD%

/a オプション使った場合は一部の特殊なもの(%random%とか)を除いて
変数を%で囲む必要ないぞ。

このためforの中でcallとか遅延展開とか使わずに計算できたりと便利。
846デフォルトの名無しさん:2011/07/28(木) 12:16:48.66
日時の計算をバッチでやんな
forfiles使え
847デフォルトの名無しさん:2011/07/28(木) 13:22:10.29
いや、もっとメジャーで他にも応用が利くPerlを使え
848デフォルトの名無しさん:2011/07/28(木) 17:33:28.29
ここは日本語もロクに通じない役に立たないクズばかりだな
聞いてねーことペラペラレスしてんじゃねーよバカ
849デフォルトの名無しさん:2011/07/28(木) 18:46:56.27
あらーおおバカさん現る
850デフォルトの名無しさん:2011/07/28(木) 18:55:49.72
おおクズさんじゃねーの
851デフォルトの名無しさん:2011/07/28(木) 19:29:07.30
%DATE%を日替わり前後で参照すると1日か1月か最大1年ずれるよ
852デフォルトの名無しさん:2011/07/28(木) 19:33:58.65
そんなこと聞いてないからほっとけば 好きにさせれば
853デフォルトの名無しさん:2011/07/28(木) 19:52:55.51
どうせバカには通じないから
854デフォルトの名無しさん:2011/07/28(木) 22:39:45.09
Cドライブ以外から実行したら誤動作するんじゃね
855デフォルトの名無しさん:2011/07/28(木) 22:51:47.59
そんなこと聞いてないからほっとけば 好きにさせれば
856デフォルトの名無しさん:2011/07/28(木) 22:56:21.58
それよりも8〜9月はエラー出るし
Win2kだと誤動作するし
857デフォルトの名無しさん:2011/07/28(木) 23:11:09.09
ここは日本語もロクに通じない役に立たないクズばかりだな
聞いてねーことペラペラレスしてんじゃねーよバカ
858デフォルトの名無しさん:2011/07/28(木) 23:33:02.84
8〜9日もダメだな
859デフォルトの名無しさん:2011/07/28(木) 23:44:51.23
set outText=****************改行****************改行****************
echo %outText%>>test.txt

test.txt中身予定
****************
****************
****************

こんな感じに作りたいと思っているんだけどなかなかうまくできない
助けて!
860デフォルトの名無しさん:2011/07/28(木) 23:56:04.59
環境変数に改行文字 site:scripting.cocolog-nifty.com
861デフォルトの名無しさん:2011/07/29(金) 00:00:19.37
>>860

@echo off
rem 改行を入れる
set LF=^

rem
set caption=説明文%LF%説明文2
SET /P x=%caption%<NUL>out.text
goto :EOF

こうすると結果
out.text
説明文1
となってしまうorz
862デフォルトの名無しさん:2011/07/29(金) 00:08:43.19
だから遅延展開使えと書いてあるのでは?
863デフォルトの名無しさん:2011/07/29(金) 00:11:25.06
SETLOCAL ENABLEDELAYEDEXPANSION
SET x=aaa!LF!bbb
ECHO !x!>>out.txt
こういう方法ですね。改行を入れることができました。ありがとうございます。
gdgdとすみませんがテキストで開くと↑のようなマークになってしまうんですが回避する方法はないでしょうか・・・orz
864デフォルトの名無しさん:2011/07/29(金) 00:19:51.42
同様に SET x=aaa!CR!!LF!bbb みたいにCRを入れる 改行はCR+LFだからね
865デフォルトの名無しさん:2011/07/29(金) 00:24:39.44
>>864
CR入れたら無事直りました!
時々TEXTで開くと↑になってるのってUNIX系でかかれた文章だったんですね
どうもありがとうございました!
866841:2011/07/29(金) 03:58:35.53
ありがとうございます!

>851
0時前後に実行するとまずいということですね。

>854
バッチをCドライブに置くか、
cd /Dでドライブ移動するようにします。

>856,858
なぜエラーが起きるのでしょうか?
8月になったら試してみます。

867デフォルトの名無しさん:2011/07/29(金) 04:06:22.16
SET MM=%2011/07/31:~5,2%
SET DD=%2011/08/01:~8,2%
だとMMDDは0701になる

set /a 08
868デフォルトの名無しさん:2011/07/29(金) 09:14:58.15
>>863-865
crやlfってtimeやerrorlevelみたいな標準の環境変数なの?
それとも遅延環境変数有効時に、!でくくった場合のみ使える環境変数?
869デフォルトの名無しさん:2011/07/29(金) 16:14:20.12
そうだよ
870868:2011/07/29(金) 18:48:43.31
>>869
前者?後者?
どっちがそうなの?
871デフォルトの名無しさん:2011/07/29(金) 19:15:11.02
普通の変数
872デフォルトの名無しさん:2011/07/29(金) 20:18:08.15
set/?
873727:2011/07/30(土) 18:07:14.45
@REM FIZZBUZZ.BAT もっと短く100Bytes
@SET/A N+=1,F=N*N%%3,B=N%%5,S=N*F
@IF %B%==0 SET S=%F:1=%Buzz
@ECHO %S:0=Fizz%&IF %N% LEQ 99 CALL %0
874デフォルトの名無しさん:2011/07/30(土) 18:12:05.89
@@@@@@@@@@@@ECHO @@@@@@@@@@@@
875デフォルトの名無しさん:2011/07/31(日) 05:28:52.89
ここで質問していいことかわからないのですが、質問です。
copy "%~1" "E:\ts"
↑のようなbatで2.5GBくらいのTSファイルをコピーすると
ファイルが破損してしまいます(ハッシュで確認)
軽めのtxtをコピーさせたところ破損していなかったので、ファイルの容量が問題になっていると思います
どうすれば破損させずに大きいファイルをコピーできるのでしょうか。
コピー先もコピー元もそれぞれNTFSフォーマットされたUSB2.0の外付けHDDです。
876デフォルトの名無しさん:2011/07/31(日) 06:00:38.56
/B バイナリ ファイルとして扱います。
/V 新しいファイルが正しく書き込まれたか検査します。
877デフォルトの名無しさん:2011/07/31(日) 10:27:47.84
>>876
できました。めちゃくちゃ初歩的なことで質問して申し訳ありませんでした
878デフォルトの名無しさん:2011/07/31(日) 15:22:56.85
copyで隠しファイルがコピーできないんですが、こういうときはattribで変えてやるんでしょうか?
879デフォルトの名無しさん:2011/07/31(日) 17:06:41.61
xcopy /?
880841:2011/08/02(火) 00:06:34.43
841です。

バッチ実行してみると、確かにエラー起きました。。。
「無効な数値です。・・・」

調べてみると、08 や09 は、8進数と認識して、
エラーが起きるようですね。。

以下のように書き換えて対応してみます。
SET YYYY=%DATE:~0,4%
SET MM=%DATE:~5,2%
SET DD=%DATE:~8,2%
SET /A MM=1%MM%-100
SET /A DD=1%DD%-100
SET /A Z=(%YYYY%-2)*10000+%MM%*100+%DD%

・・・というか上記は慣れてる人じゃないと気付かないですよね。。
ここに聞いてよかったです!ありがとうございました!!
881デフォルトの名無しさん:2011/08/02(火) 11:56:04.93
set d=%date%
set /a z=%d:~-10,4%%d:~-5,2%%d:~-2%-20000
882デフォルトの名無しさん:2011/08/02(火) 12:58:34.78
set /a z=%date:/=%-20000
883デフォルトの名無しさん:2011/08/02(火) 13:35:26.59
基本的な質問かつバッチでもないのでスレ違いかもしれませんが
教えていただけますか。

拡張子を除いたファイル名だけの一覧を取得したい のですが、
dir /b /a-d "パス"  では、
aaa.jpg
bbb.txt
などと拡張子が入ってしまいます。
aaa
bbb
となるようにするにはどうすれば良いのしょうか。

スレ違いでしたら誘導お願いいたします。

よろしくお願いいたします。
884デフォルトの名無しさん:2011/08/02(火) 13:44:24.22
for /f "delims=" %i in ('dir /b/a-d "パス"') do @(echo %~ni)
885デフォルトの名無しさん:2011/08/02(火) 14:20:49.83
>>884
早速のレスありがとうございます。

できました!
こうやるんですね…。
勉強致します。

ありがとうございました。
886デフォルトの名無しさん:2011/08/02(火) 21:07:04.68
感動した!
887デフォルトの名無しさん:2011/08/03(水) 20:55:12.28
バッチファイル上でプログラムを指定して開く事は可能ですか
ダブルクリックで開かれたくないので.batを.datに変えてcallしようと考えているのですが
888デフォルトの名無しさん:2011/08/03(水) 21:02:49.53
>>887
> バッチファイル上でプログラムを指定して開く事は可能ですか
はい
> ダブルクリックで開かれたくないので.batを.datに変えてcallしようと考えているのですが
意味がわからん
889デフォルトの名無しさん:2011/08/03(水) 21:11:43.98
>>887
> バッチファイル上でプログラムを指定して開く事は可能ですか
意味がわからん
> .batを.datに変えてcallしようと考えているのですが
できない
> ダブルクリックで開かれたくないので
デフォルト動詞をeditかダミーに変える
batfile\shell
@="edit"
cmdfile\shell
@="none"
890デフォルトの名無しさん:2011/08/03(水) 21:42:45.40
サブルーチンとして呼び出し専用のバッチを単独実行されたくないとかじゃね?
callする直前にリネームして終了時に再リネームするとか。
891デフォルトの名無しさん:2011/08/03(水) 21:52:21.48
cmd < hoge.dat
とかは?
892デフォルトの名無しさん:2011/08/03(水) 21:53:39.66
for /f %%i in (hoge.dat) do %%i
893デフォルトの名無しさん:2011/08/04(木) 00:27:52.70
そっちの方が簡単だな、今までメンドイ事をしていた俺

メインに
call yobidasuyo.cmd yobarete hoge
こんな感じで書いて

サブの頭に
set jikkou=%1
if not "%jikkou%"=="yobarete" (
echo 単独で実行しないで
pause
goto :EOF
)
こンな感じで受けてたわ
894デフォルトの名無しさん:2011/08/04(木) 02:19:56.21
forで読むのもcmdに入力するのもgoto不可能
895デフォルトの名無しさん:2011/08/04(木) 02:40:37.58
だからできないと言っただろ?
896デフォルトの名無しさん:2011/08/04(木) 09:37:17.59
callについてしか言ってないだろw
897デフォルトの名無しさん:2011/08/04(木) 15:37:35.12
cmd.exeをコピーしてdat.exeにリネームして
中の.batを.datに書き換えて
dat.exe /c hoge.dat
ならできるぞ
898デフォルトの名無しさん:2011/08/04(木) 20:51:37.34
.datを.batにリネームするほうが簡単だな
899デフォルトの名無しさん:2011/08/04(木) 23:00:22.31
.datをコピーして.batにリネームしてコールして終わったら削除というのは処理的にはだめなんだろうか
900デフォルトの名無しさん:2011/08/05(金) 03:41:55.96
cmdで現在のmsecって取得できる?
全体の処理にどのくらいかかってるのかが知りたいので
901デフォルトの名無しさん:2011/08/05(金) 09:56:38.88
echo %date:/=%%time:~0,-3%
902デフォルトの名無しさん:2011/08/05(金) 10:19:29.17
>>897
DOSコマンドでバイナリファイルの置換なんてできるの?
903デフォルトの名無しさん:2011/08/05(金) 10:26:53.25
空気読めてない様だ
904デフォルトの名無しさん:2011/08/05(金) 10:45:20.16
>>902
はぁ?バイナリファイル?
905デフォルトの名無しさん:2011/08/05(金) 10:49:54.41
>>902
なんだコイツ?
906902:2011/08/05(金) 11:38:29.84
cmd.exeのクローンの中身を書き換えるんでしょ

であれば、バイナリファイルの編集手段が必要ではありませんか?
907デフォルトの名無しさん:2011/08/05(金) 12:02:20.36
そういう事を言ってるんじゃないんだがね。
分からないならいいよw
908デフォルトの名無しさん:2011/08/05(金) 14:40:06.67
>>902
debug.com
909デフォルトの名無しさん:2011/08/06(土) 00:04:17.05
>>901
timeで取れるのかありがとう
910デフォルトの名無しさん:2011/08/06(土) 03:01:55.46
>>901
dateとtimeの間に日替わりしたら…
911デフォルトの名無しさん:2011/08/06(土) 18:47:25.15
for文で取得した変数[%%i]と文字列のあいまい比較ってどのようにすれば良いですか?
↓このような事をしたいです。
for 〜 (
  if %%i==aaa* goto EXIT
)
912デフォルトの名無しさん:2011/08/06(土) 19:15:09.39
>>911
比較文字列に正規表現っぽいものを使いたいのなら findstrでerrorlevelみて判定。
その例みたいに単純に先頭3文字で比較判定したくて簡単にやるにはこんなのとかかな。
for %%i in () do (set a=%%i

)
if %a:~0,3%==aaa (
)

ifもfindstrも判定する文字列にダメ文字があったりするが。
913デフォルトの名無しさん:2011/08/06(土) 20:22:51.29
遅延展開
914デフォルトの名無しさん:2011/08/06(土) 20:26:36.95
>>912
ありがとうございます
if文前に事前にsetで適当な変数に入れておけば簡単な比較は出来そうですね
915デフォルトの名無しさん:2011/08/06(土) 21:26:35.64
>>912
指摘されてるが、遅延展開しねーとerrorlevelの数値が変わらんぞ
916デフォルトの名無しさん:2011/08/06(土) 23:20:33.04
echo aaab | findstr /b "aaa" && echo 1 || echo 2
917デフォルトの名無しさん:2011/08/07(日) 00:25:01.43
ifでerrorlevelの判定するのに%errorlevel%でやってる奴いるの?
918デフォルトの名無しさん:2011/08/07(日) 00:52:20.97
>>917
バカそうな>>915とかはやってるんじゃねーか?
919デフォルトの名無しさん:2011/08/07(日) 02:06:08.11
≠0や==0で判定したいときは使うんじゃね
920デフォルトの名無しさん:2011/08/07(日) 02:18:48.55
馬鹿がもう一人
921デフォルトの名無しさん:2011/08/07(日) 02:37:16.79
cmd /c exit 1
if errorlevel==0 echo %errorlevel%
922デフォルトの名無しさん:2011/08/07(日) 02:39:33.57
cmd /c exit 1
if %errorlevel%==0 echo %errorlevel%
923デフォルトの名無しさん:2011/08/07(日) 02:41:03.17
>>919
≠0をやるのは多少めんどくさいが大抵の場合1未満と1以上で事足りる
if errorlevel 1 (echo 1以上) else (echo 1未満)
924デフォルトの名無しさん:2011/08/07(日) 02:46:07.49
バカがもう一匹湧いてるな
925デフォルトの名無しさん:2011/08/07(日) 03:13:46.66
≠0や==0で判定したいときは使うんじゃね
926デフォルトの名無しさん:2011/08/07(日) 03:31:53.14
if==1==1 echo =
927デフォルトの名無しさん:2011/08/07(日) 17:09:50.02
おまいら!遅延展開!かcall :subか使わんとでけんのか?
928デフォルトの名無しさん:2011/08/09(火) 23:35:13.81
DOSの言語仕様リファレンスってどこにあるのでしょうか?
929デフォルトの名無しさん:2011/08/09(火) 23:36:58.37
windows\help\ntcmds.chm
930928:2011/08/09(火) 23:45:57.45
>>929
windows7ではそのファイルはなかった…でもありがとう!
Microsoft Download Centerとかでntcmds.chm配布してくれないかなー
931928:2011/08/10(水) 00:01:36.72
ntcmds.chmというキーワードを教えてもらったおかげでググって英語版はゲットした。WinCmdRef.chm
http://d.hatena.ne.jp/IIJIMAS/20101101/1288542425
http://kogelog.wordpress.com/2011/02/05/20110205-01/
http://www.microsoft.com/download/en/details.aspx?id=2632
>the use of the command-line tools used to perform various tasks related to
>Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows 7, and Windows Vista.
日本語版chmはなさそう
932デフォルトの名無しさん:2011/08/10(水) 00:58:10.44
そろそろMSはcomspec=powershell.exeすべき
933デフォルトの名無しさん:2011/08/10(水) 01:53:39.88
WinCmdRef.chm は各コマンドのリファレンスみたいで 例えば %~dp1変数 とかは検索しても出なかった。
Using batch files http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx?mfr=true
これが求めるものに近いけど、例えばDOSパーサーでコマンドと引数との間に空白なしでも認識される挙動
(例「for/?」) が何故そうなるかの説明は載ってなさそう。
934デフォルトの名無しさん:2011/08/12(金) 00:52:44.25
無用だ
935デフォルトの名無しさん:2011/08/13(土) 05:24:17.89
そんなもんがコマンドリファレンスに載るわけがない たわけが
insideもんだろ
936デフォルトの名無しさん:2011/08/13(土) 10:01:52.79
ソフトを再起動させるバッチを作りたいのですが
終了はtaskkill で終了させたのですが
ソフトの起動が以下の文を実行すると、両方ともコマンドプロンプトが立ち上がったままになっていまいます。

A
c:\soft\freesoft.exe
exit

B
start c:\soft\freesoft.exe
exit

exeファイルの実行後、コマンドプロンプトが終了するような方法ってないでしょうか。
937デフォルトの名無しさん:2011/08/13(土) 13:26:43.61
>>936
start /?
938デフォルトの名無しさん:2011/08/13(土) 16:28:02.13
>>935
言語仕様のことが何で「コマンドリファレンス」になってる
その区別もつかんのか
939935 じゃないが:2011/08/13(土) 17:11:35.28
>>935 は、>>933 の「WinCmdRef.chm は各コマンドのリファレンスみたいで」に
対するレスだろ。
940デフォルトの名無しさん:2011/08/13(土) 17:33:44.24
>>938
文脈の区別もつかんのか
941デフォルトの名無しさん:2011/08/23(火) 07:18:30.23
test.bat
---------------------------
@echo off
set fname="test"
start test.bat
pause
---------------------------

test1.bat
---------------------------
@echo off
echo "%fname%"
set fname=testl
echo "%fname%"
pause
---------------------------

なぜかウインドウが無限に出てくる。
942デフォルトの名無しさん:2011/08/23(火) 07:20:59.54
> start test.bat
943デフォルトの名無しさん:2011/08/23(火) 07:41:37.32
教訓:紛らわしい安直な名前を使うな
944デフォルトの名無しさん:2011/08/23(火) 07:58:23.11
>>942
ファイル名を間違えていのか・・・
修正したら無限にウインドウが出てこなく成った

for /d %%A in (*) do (
マルチコア非対応のプログラム
)

マルチコア非対応のプログラムを文で実行すると
コアを1つしか使わない為、CPU使用率が25%でしか動作しない
バッチで常に4つのプログラムが並列に動作しているようにする事は可能?
945デフォルトの名無しさん:2011/08/23(火) 13:47:10.28
あほにはむり
946デフォルトの名無しさん:2011/08/23(火) 14:18:05.69
for /d %%A in (*) do (
start マルチコア非対応のプログラム
)
947デフォルトの名無しさん:2011/08/23(火) 14:54:39.67
>>936
exit いらんよ

>>941
pasue いらんよ
exit いるよ
948デフォルトの名無しさん:2011/08/26(金) 09:46:49.99
スレ復活上げ
949デフォルトの名無しさん:2011/08/26(金) 15:49:39.60
>>948
いらんよ
950デフォルトの名無しさん:2011/08/26(金) 17:40:39.06
main-msdos prompt
http://www.michaelv.org/
951デフォルトの名無しさん:2011/08/30(火) 15:46:42.72
タスクスケジューラの特定の名前のタスクの前回の実行時刻を取得する方法無いですかね?

録画の為に目的時間の5分前に起動するようにタスクを設定しているのですが
たまにその5分の間に手動でスリープさせてしまって録画をミスることがあります。

その手動操作の時に5分以内に実行されたタスクが無いかどうか
確認して実行済みが無い場合だけスリープに入るようにしたいのです。

自動で入るスリープに関してはタスク実行時に電源スキームを
書き換えてスリープに入らないようにしているので問題は無いのですが
問題はうっかりやってしまう手動(バッチコマンド起動)によるスリープです。

OSはWin7です。
952デフォルトの名無しさん:2011/08/30(火) 22:52:22.14
set x=%~1
という処理で
%1がaaa&bbbだった場合
set x=aaa
bbb
というふうに&で分かれてしまいます
xに%1の値をセットするにはどう書けばいいんですか。
set x="%~1"
だとxに""が入ってしまいます。
953デフォルトの名無しさん:2011/08/31(水) 00:52:50.58
set "x=%~1"
954デフォルトの名無しさん:2011/09/02(金) 01:29:12.63
>set x=%~1
>という処理で
>%1がaaa&bbbだった場合
>set x=aaa
>bbb
>というふうに&で分かれてしまいます

どのバージョン?
955デフォルトの名無しさん:2011/09/02(金) 14:47:58.67
そんなバージョンないわ
956デフォルトの名無しさん:2011/09/02(金) 14:56:41.04
for変数だとならんがcall変数だとなるよ
957デフォルトの名無しさん:2011/09/03(土) 20:31:44.88
んじゃ

for %%1 in (%1) do set x=%%~1

でいいよ
958デフォルトの名無しさん:2011/09/03(土) 23:22:01.15
call set x=%%~1
959デフォルトの名無しさん:2011/09/04(日) 14:01:11.63
1日1個出来るファイル(yyyymmdd.log)を、60日たったものから削除するバッチを作ることになりました。
タスクで毎日起動させて削除したいのですが、ヒントはいただけないでしょうか?
960デフォルトの名無しさん:2011/09/04(日) 14:09:51.27
dir/?
for/?
del
で十分だろ
961デフォルトの名無しさん:2011/09/04(日) 14:19:23.04
とりあえずこんなの見つけたけど、
ttp://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html
計算なんてやってられんから、

ファイルが毎日できるのが確実なら、
yyyymmdd.logを新しいもの順にソートして
上から60個以降を削除、というアプローチはどうだろうか。
dir /b /o-dとかをテンポラリファイルに書いて、
for でskip=60とかやってテンポラリファイルの60行以降をdelとか。
962デフォルトの名無しさん:2011/09/05(月) 02:16:10.25
まず日本語文法を勉強して下さい。
963デフォルトの名無しさん:2011/09/05(月) 07:07:04.09
>>962
墓穴を掘るだけだぞ
964デフォルトの名無しさん:2011/09/05(月) 08:44:52.12
>>960-961
レスありがとうございます。
何分バッチ作成初体験なので戸惑っております。

とりあえず
dir *.log /o-d
でファイルを表示させるところまではわかったのですが、
その後のfor文とdel文の書き方がよくわかりません……。
965デフォルトの名無しさん:2011/09/05(月) 08:46:26.23
ソーランソーラン
966デフォルトの名無しさん:2011/09/05(月) 08:47:27.50
「特定のフォルダの中から半年以上更新されていないファイルを探し出して、該当するファイルを削除する」
http://www.atmarkit.co.jp/fwin2k/operation/psh01/psh01_01.html

Get-ChildItem | Where-Object {$_.LastWriteTime -lt (Get-Date).AddMonths(-6)} | ForEach-Object {$_.Delete()}
 
967デフォルトの名無しさん:2011/09/05(月) 11:10:46.88
すなおにPowerShellつかうのがよさそうだけど…

dir /b /o-d *.log > temp.$$$
for /f "skip=30" %%i in (temp.$$$) do del %%i
del temp.$$$

バッチファイルはこんな感じか。
このサンプルだとログのおいてるフォルダにバッチファイルが
あることになってるけど、そこは適宜置き換えて。
968デフォルトの名無しさん:2011/09/05(月) 11:52:20.52
おれがいつも使ってるヤツ↓
for /f "skip=30" %%i in ('dir /o-d /b *.log') do del %%i
969デフォルトの名無しさん:2011/09/05(月) 12:23:40.75
unixのshellのバッククォートみたいな事できるんだな、初めて知った。
helpにちゃんと載ってたけどw
970デフォルトの名無しさん:2011/09/05(月) 19:20:57.94
unixのshellのバッククォートみたいな事
for /f "usebackq skip=30" %%i in (`dir /o-d /b *.log`) do del %%i
971デフォルトの名無しさん:2011/09/06(火) 02:28:07.48
みなさんレスありがとうございました。
>>968とほぼ同じ感じで提出したところ、
「やっぱ日付を取得して30日前以前のを削除するようにして」
と言われたので今度は日付の取得にチャレンジしたいと思います。
動作的には変わらないはずなのに何なんだ_| ̄|○
972 忍法帖【Lv=9,xxxP】 ◆IFQSknf/N. :2011/09/06(火) 05:38:35.19
1日にログが2個以上できてたら、だめじゃん。(←何なんだ)
973 忍法帖【Lv=9,xxxP】 ◆IFQSknf/N. :2011/09/06(火) 06:32:02.93
60日前以前は、ほんとの日付けか、それともファイル名の日付か悩みどころ&gt;仕様&lt;
なので、とりあえず、ファイル名は必ずファイルの日付と合ってると仮定しよう。
しかしそれでも、YYYYMMDD.txtは file1_YYYYMMDD.txt とか YYYYMMDDhhmmss.txt に変わってくる。
974デフォルトの名無しさん:2011/09/06(火) 06:59:44.74
ガチでやるなら
・今日の日付とファイルのタイムスタンプを文字列で取得
・文字列を切り貼りしset /aを駆使して0000(2000?)年1月1日からの経過日数を算出(当然閏年も考慮)
・引き算して30以上なら削除

なんだろうけどあまりにもだるすぎるな。バッチで日付操作は鬼門。
PowerShellとは言わないまでもせめて判定部分にVBS使えないのか。

>today = Now
>d = DateSerial(Year(today), Month(today), Day(today)-30)

forfiles使用可なら一発なんだけどそれも無理なんだろうな
> forfiles /P "E:\logs" /M *.log /C "cmd /c if @isdir==FALSE del /s @path" /D -30
975デフォルトの名無しさん:2011/09/06(火) 14:48:02.44
俺もVBSを使うほうが無難だと思う。
976デフォルトの名無しさん:2011/09/06(火) 15:33:05.72
959はバッチファイルじゃなきゃいけないんだろうか?
日付計算プログラムを作ってそれを使うとか。

例のブランコの絵が思い浮かぶな…。
977 忍法帖【Lv=10,xxxPT】 ◆IFQSknf/N. :2011/09/06(火) 16:31:09.51
VBSでmain(){return 200;}とか出来るのか? >>日付計算プログラムを作ってそれを使うとか
-- vbs1.vbs --
Set objfs = CreateObject("Scripting.FileSystemObject")
Set objfolder = objfs.GetFolder("work")
str1 = objfolder.Path & vbCR
datetmp = DateAdd("h", -2, Date & " 16:49:00")
str1 = str1 & datetmp & vbCR
MsgBox(str1)
For Each objfile In objfolder.Files
  datetmp1 = DateDiff("s", datetmp, objfile.DateCreated)
  If datetmp1 <= 53 Then
    str1 = objfile.DateCreated & " " & datetmp1 & " " & objfile.Name & vbCR
    res = MsgBox(str1, 1)
    If res = 2 Then ' = Cancel ?
      Exit For
    End If
    'objfs.DeleteFile objfile
  End If
Next
'MsgBox(str1)
978デフォルトの名無しさん:2011/09/12(月) 20:08:55.72
batにA.txtドロップ
@ren A.txt B.txt
B
C
Dren C.txt A.txt
E

このようにしたいのですが
Dでどう打てばC.txtをA.txtにリネームできるでしょうか?
ちなみにAの名前には半角スペースや()-色々入る可能性があります。
bat初心者で恐縮ですが、どうかアドバイスのほどよろしくお願いします。
979デフォルトの名無しさん:2011/09/12(月) 20:11:44.29
すいません、修正です。今@は↓にしています。
ren *.txt B.txt
980デフォルトの名無しさん:2011/09/12(月) 20:47:24.78
>>978
ren C.txt A.txt
>>979
ren *.txt A.txt
981デフォルトの名無しさん:2011/09/12(月) 20:52:44.27
>>980
作成したいファイル名がAではなくて
ドロップしたファイル名を総称してAのつもりで書きました。
Aの名前はドロップしたファイルによって様々です。

これを1ファイル毎にbatで書きなおすのは大変です。
なので質問をさせて頂きました。よろしくお願いします。
982デフォルトの名無しさん:2011/09/12(月) 20:53:58.19
set fname="%~nx1"
ren %fname% B.txt
ren C.txt %fname%
983デフォルトの名無しさん:2011/09/12(月) 20:55:59.49
@ren %1 B.txt
B
C
Dren C.txt "%~nx1"
E
984デフォルトの名無しさん:2011/09/12(月) 21:00:51.65
>>982
ありがとうございます!できました!
985デフォルトの名無しさん:2011/09/12(月) 21:07:23.92
凄い!
986デフォルトの名無しさん:2011/09/12(月) 21:08:10.70
>>983
これも試した事あったんですがDをまた%1だけ書いて失敗してました。
ありがとうございます、勉強になります。


もしよかったらもう1つ伺いたいのですが
このbatと編集したいtxtファイル全てが同一フォルダにあったとして
batを押したら全てのtxtが、@〜Eを1ファイルづつ処理するように
組むにはどう書けばよいでしょうか?
987デフォルトの名無しさん:2011/09/12(月) 21:24:44.64
Aが無いのには誰も突っ込まないのか
988デフォルトの名無しさん:2011/09/12(月) 21:31:48.53
for %%a in (*.txt) do (
set fname="%%a"
@〜E
)
989デフォルトの名無しさん:2011/09/12(月) 21:35:05.32
setlocal enabledelayedexpansion
990デフォルトの名無しさん:2011/09/12(月) 21:55:47.15
>>987
Aは書き忘れました。実際には他のプログラム、exeが入ります。
ごめんなさいです。

>>988
ありがとうございます!ちょっとまだ成功はしてないですが
@〜Eを1ファイルづつやってくれてるみたいでこの構文でいけそうです!
forについても%%変数名やDOの展開が分からなかったのでまた勉強になりました。

この度は本当にありがとうございました。
991デフォルトの名無しさん:2011/09/12(月) 21:58:47.00
使わんでもいいもの使うからだろ
for %%I in (*.txt) do (
@ren %%I B.txt
B
C
Dren C.txt "%%~nxI"
E
)
992デフォルトの名無しさん:2011/09/12(月) 22:00:35.43
あと数回トラブルだろな
993デフォルトの名無しさん:2011/09/12(月) 22:55:29.31
>>982>>988
>>983>>988
そして>>991
全部やってみたのですが、全てB.txtが存在せず
コマンドの構文が違ってると出てしまいました。
それはつまり@のA→B.txtから出来ていないという事でしょうか・・・

for %%I in (*.txt) do (
ren %%I B.txt
プログラムのパス(B.txtからC.txtを新たに生成するもの)
del B.txt
ren C.txt "%%~nxI"
)
pause

これなら>>991さんがいう使わんでもいいものを使ってない?
かもしれないので出来ると思ったんですが難しい・・・

何度もしつこくて恐縮なんですが
どうかヒントだけでも教えてもらえないでしょうか?
何度もすいません
994デフォルトの名無しさん:2011/09/12(月) 23:00:34.36
ファイル名に空白があるとか

@ren "%%~I" B.txt
995デフォルトの名無しさん:2011/09/12(月) 23:12:33.79
うおおおおおおおおおおおおおおおおおおおできたあああああああああああああああああああああああああああ

>>994
はい、あります!ありがとうございます!
けど何で>>993の1行目と2行目は複数処理になって急に出来なかったんだ…
ちょっと削りながら試してみます。

皆様どうもありがとうございました!!
996995:2011/09/12(月) 23:29:51.47
特に変更なければ>>1のテンプレで次スレ立てちゃうけど良いですか?

拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %7 【.bat】
http://hibari.2ch.net/test/read.cgi/tech/1298873550/

【.cmd】 バッチファイルスクリプト %6 【.bat】
http://hibari.2ch.net/test/read.cgi/tech/1277465356/
【.cmd】 バッチファイルスクリプト %5 【.bat】
http://pc12.2ch.net/test/read.cgi/tech/1242268171/
【.cmd】 バッチファイルスクリプト %4 【.bat】
http://pc12.2ch.net/test/read.cgi/tech/1229955189/
【.cmd】 バッチファイルスクリプト %3 【.bat】
http://pc11.2ch.net/test/read.cgi/tech/1217860043/
【.cmd】 バッチファイルスクリプト %2 【.bat】
http://pc12.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
http://pc11.2ch.net/test/read.cgi/tech/1178281991/
997デフォルトの名無しさん:2011/09/13(火) 00:56:25.24
>>996
よろしく
998デフォルトの名無しさん:2011/09/13(火) 02:08:16.90
ドロップのときはドロップハンドラが空白があると""を付けてくれるが、
forのときは、空白があっても""を付けてくれない
仮令for in ("*.txt")とやっても駄目
999デフォルトの名無しさん:2011/09/13(火) 03:20:03.62
1000デフォルトの名無しさん:2011/09/13(火) 04:03:56.41
んこ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。