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

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

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.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デフォルトの名無しさん:2010/06/26(土) 01:47:00
>>1
スレ立て乙
3デフォルトの名無しさん:2010/06/28(月) 07:01:18
お願いします。

for /f "usebackq tokens=*" %i in (`echo c:\`) do @set RESULT=%i
echo %RESULT%
c:\

とうまくいくのですがこれにパイプを入れて

for /f "usebackq tokens=*" %i in (`echo c:\ | dir`) do @set RESULT=%i
とすると、| の使い方が誤っています。とエラーになります。
echo c:\ | dirだけ打ち込むと、
dir c:\と同じ結果が得られます。

パイプ処理を用いたコマンド結果を変数に格納したいのですが、うまくいきません。
どのようにすればうまくいくか教えて下さい。

主として使うOSはvistaですが、xpでも動くようにしたいです。

4デフォルトの名無しさん:2010/06/28(月) 07:07:00
>xpでも動くようにしたいです。

xpだとecho c:\ | dir自体うまくいかないぞ
カレントディレクトリのリストが表示されるだけ
普通にdir c:\形式に書き換えればいいんじゃねーの
53:2010/06/28(月) 07:40:33
>>4
レス恐縮です。

コマンドは、dirを説明上用いていますが、
for /f でパイプが動作しないのです。
コマンドの組み合わせが悪いのかと思い
いろいろコマンドを変えてはみたのですが。

そこをなんとかお教えいただければ。

ちなみに当方の環境では、echo c:\ | dirはうまく動きました。
xp proとメディアセンターエディションで確かめました。
6デフォルトの名無しさん:2010/06/28(月) 09:50:46
| を ^ でエスケープして ^|

他の例は「バッチファイル エスケープ」あたりでググれば良いかと。
本筋じゃないけど、>>4 の言うように「echo c:\ | dir」はうまくいかないと思うんだが。
「dir /b < echo c:\」?
7デフォルトの名無しさん:2010/06/28(月) 12:01:55
単に説明に使ってるだけだからdirでもdriでもなんでもいいんじゃね
8デフォルトの名無しさん:2010/06/28(月) 14:39:04
for /f "usebackq tokens=*" %i in (`"echo c:\ | dir"`) do @set RESULT=%i
"〜"で逃げろ
9デフォルトの名無しさん:2010/06/29(火) 07:20:47
>>1
10デフォルトの名無しさん:2010/06/29(火) 21:32:22
                 。・ 。・゚。・゚。・゚。゚・.・。゚゜。゚・。.゚・。
              。・゚ 。・゚ 。・゚。・         ・゚.
             。・゚ 。・゚ 。・゚             。・。
            。・゚ 。・゚ 。・゚             。・。・
           。・゚ 。・゚ 。・゚              。・。・゚
          。・゚ 。・゚ 。・゚                。・。・゚・
         。・゚ 。・゚ 。・゚               。・゚・゚・
         。・゚ 。・゚ 。・゚           。・゚・。・゚
         。・゚ 。・゚ 。・゚       。・゚・。・ ゚・
   ∧_,,∧  。・゚ 。・゚ 。・゚     ・。・゚・ 。 ・゚。
  ( ;`・ω・ ) 。・゚ 。・゚ 。・゚。・゚・。 ・゚・。 ・゚・。・゚ ・。・゚・。・゚・ 。・゚ ・。・。・
  /   o━ヽニニニニニニニニニニニニニニニニニニフ
  しー-J


ID:にカーソルを合わせると不思議と>>1乙になる馬鹿にはできない魔法のコピペ
11デフォルトの名無しさん:2010/06/30(水) 00:07:48
12デフォルトの名無しさん:2010/07/09(金) 19:12:34
ファイルをD&Dすると拡張子を除去するバッチを作ったんですが、
全角スペースが含まれている場合にファイル名が分割されてしまって動きません。
半角スペースが含まれる場合はダブルクォーテーションが付加されるので問題なく処理できるのですが・・・
やはり対処法はファイル名を変更するかD&Dをしないことしかないでしょうか。
echo %1 >> log.txt を追加してやると、ファイル名が分割されてるのが確認できます。

cd /d "%~dp1"
:loop
if %1=="" goto end
rename %1 "%~n1"
shift
goto loop
:end

とりあえず
> rename "たいとる *.*" "たいとる *.*"
でまとめて半角スペースにできたのでこれでいきます。
13デフォルトの名無しさん:2010/07/09(金) 23:41:10
%*を自分でパーズすればできるよ
14デフォルトの名無しさん:2010/07/09(金) 23:47:10
パーズ
15デフォルトの名無しさん:2010/07/10(土) 00:17:16
普通のプログラミング言語ならやりやすいだろうけど
%~dp1を記憶しといて一致するまでのやつを連結?
ちょっと大変だなあ。
16名無しさん@そうだ選挙に行こう:2010/07/10(土) 17:09:02
ぐぐればサンプルあるよ
17デフォルトの名無しさん:2010/07/12(月) 21:13:48
set x=%*
for %%i in (%x: =?%) do echo "%%~i"
18デフォルトの名無しさん:2010/07/14(水) 11:13:01
&を含む引数を受け取る方法は無いでしょうか?
拡張子関連付けして、他のプログラムから受け取ってます
19デフォルトの名無しさん:2010/07/14(水) 14:11:35
""で囲ってやると受け取れるみたいだ
20デフォルトの名無しさん:2010/07/14(水) 14:50:18
>>19
ありがとうございます。
いろいろ試行錯誤してたのが馬鹿みたいに、スマートに解決しました。
21デフォルトの名無しさん:2010/07/15(木) 22:04:37
exeファイルがコンソールアプリか否かバッチでどうやっったら判定できますか?
22デフォルトの名無しさん:2010/07/16(金) 15:27:37
ttp://chrono.cocolog-nifty.com/programming/2005/07/windows_0e6f.html
こんなのが。バッチは向かない気がバリバリする。
23デフォルトの名無しさん:2010/07/16(金) 15:34:22
後は任せた

set command=%1
goto %command%

:explorer
:notepad
echo not CUI
exit /b

:cmd
:sort
echo CUI
exit /b
24デフォルトの名無しさん:2010/07/18(日) 02:41:59
バリバリ やめて!(ry
@if(0)==(0) echo off
cscript.exe //NoLogo //E:JScript "%~f0" %1
echo %errorlevel%
goto :EOF
@end
var sc=new ActiveXObject("ScriptControl");
sc.Language="VBScript";
sc.AddCode("Function bin(t):bin=AscB(t)+AscB(MidB(t,2,1))*256:End Function");
function B(data){return sc.Run("bin", data);}
var ado=new ActiveXObject("ADODB.Stream");
ado.Type=1;
ado.Open();
ado.LoadFromFile(WScript.Arguments(0));
if(23117!=B(ado.Read(2))){ado.Close();WScript.Quit(-1);}//not MZ
ado.Position=ado.Size>60?60:0;
sigp=B(ado.Read(2));
ado.Position=ado.Size>sigp?sigp:0;
sig=B(ado.Read(2));
if(17744==sig){//PE
ado.Position=sigp+92;
sys=B(ado.Read(2));
ado.Close();
WScript.Quit(sys);
}else if(17742==sig){ado.Close();WScript.Quit(-2);//NE
}else ado.Close();WScript.Quit(-3);//MZ
25デフォルトの名無しさん:2010/07/18(日) 16:29:01
exehder.exe
dumpbin.exe
26デフォルトの名無しさん:2010/07/19(月) 03:05:32
SHGFI_EXETYPE
27デフォルトの名無しさん:2010/07/21(水) 23:57:28
バッチを実行したタイミングで指定したテキストファイルに
現在の日時を追記し保存する処理を考えています

できるだけ簡単にやりたいのですがcmd(コマンド)だけでできますでしょうか?
cmdのショートカットだけでできれば1番いいのですが
スレ違いでしたら、すいません。
28デフォルトの名無しさん:2010/07/22(木) 01:04:13
echo %date% %time% >> "%~0.log"
start "" yourcommand
29デフォルトの名無しさん:2010/07/22(木) 03:00:58
cmd /c echo %date% %time% >> "%~0.log" & start "" yourcommand
3027:2010/07/22(木) 09:57:25
>>28-29
ありがたき幸せ

あとは余計な秒を削るのを調べてみます
yyyy/mm/dd hh:mm:ssにしたいので
3127:2010/07/22(木) 18:51:07
>>30の目的が達成できました
バッチスクリプトは奥が深いですね
少し勉強してみます
3227:2010/07/22(木) 23:29:23
連投ですいません

cmd /c echo %date% %time% >> "ログ.txt"

これを実行して生成されたファイルを見ると
yyyy/mm/dd hh:mm:ss△
と表記されます(△は半角ブランク)

この半角ブランクをバッチスクリプト内で外す事が出来ずに悩んでます
何か良い方法がありますでしょうか?
また、何故半角ブランクが付加されるのでしょうか?
33デフォルトの名無しさん:2010/07/23(金) 00:25:33
>>32
cmd /c echo %date% %time%>> "ログ.txt"
リダイレクトの直前のスペースを書かない
34デフォルトの名無しさん:2010/07/23(金) 02:44:59
すいません。誰か教えてください
ドラッグ&ドロップするとファイル名の先頭に「決」をつけるように
ren %~f1 決%~n1%~x1
としたんですが、ファイル名に空白があると「コマンドの構文が誤っています」と出ます。
対処法を教えてください。
また複数ファイルドロップに対応する方法はありますでしょうか?
よろしくお願いします
35デフォルトの名無しさん:2010/07/23(金) 04:08:22
for %%a in (%*) do ren "%%a" "決%~n1%~x1"
確認してない
36デフォルトの名無しさん:2010/07/23(金) 06:26:32
>>35
ありがとうございます。
確認したら出来ませんwwwでしたが、元にして完成しました。
空白もなんとか解決できそうです。
3732:2010/07/23(金) 07:49:36
>>33
そんなオチだったとは…
○| ̄|_

ありがとうございました
38デフォルトの名無しさん:2010/07/23(金) 16:38:08
>>34をcmdのショートカットだけでできますか?
39デフォルトの名無しさん:2010/08/08(日) 04:02:40
有効なIPが割り当てられているか否かで処理を分岐したいんですが
ネットワークに接続できている場合変数に0、接続できていない場合変数に1を入れたい場合どうすればよいでしょうか?
40デフォルトの名無しさん:2010/08/08(日) 10:09:32
>>39
自分自身が持つIPが有効で接続されているかどうかということ?
ipconfigでデフォルトゲートウェイのIPアドレスを取得して
そこにpingして帰ってきた文字列をfindして分岐かな?
41デフォルトの名無しさん:2010/08/08(日) 10:40:33
ping後のerrorlevelでええがな
42デフォルトの名無しさん:2010/08/08(日) 11:49:24
netsh interface <ipv4 or ipv6> show interfaces
netsh interface <ipv4 or ipv6> show ipaddress name=<インデックス or 名前>
43デフォルトの名無しさん:2010/08/09(月) 05:05:09
>>40
ありがとうございます。
できました
この方法で分岐しようと思います。

>>41
ありがとうございます。
その方法だと場合によって無効でもerrorlevelに0が入ってしまうんです・・・。
オプションでできるかもしれませんがわかりませんでした。

>>42
ありがとうございます。
一番スマートそうですが
僕のレベルだと理解できませんでした・・・。
44デフォルトの名無しさん:2010/08/09(月) 16:32:19
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/dir/4-0740.html
のようにTESTフォルダ下のフォルダ数を変数に格納したいのですがわかりません
お願いします。
for /D %%f in (*) do set /a i=i+1
45デフォルトの名無しさん:2010/08/09(月) 18:29:50
すまんこ
forのヘルプに書いてあったwww
46デフォルトの名無しさん:2010/08/09(月) 23:03:45
>>44
解決しました。
CD TEST
FOR /F "DELIMS=" %%A IN ('DIR /B ^| FIND /C /V ""') DO SET COUNT=%%A
47デフォルトの名無しさん:2010/08/13(金) 07:25:55
バッチファイルで、一年の第何週目であるかを求めることはできるでしょうか。
可能な場合、どのような方法があるでしょうか。
バッチファイル向きの作業でないのは十分承知しているのですが…。
48デフォルトの名無しさん:2010/08/13(金) 11:45:59
yes
一年の第何週目であるかを求めるプログラムの戻り値を利用する
49デフォルトの名無しさん:2010/08/13(金) 17:12:17
たとえば今年の1月1日は金曜日だけど
去年の12月28日〜31日は今年の第1週目には含まれない
1月1日と1月2日までが第1週目
1月3日から第2週目
ってことでいいの?
5047:2010/08/13(金) 22:19:25
みなさんありがとうございます。

>>48
そうですね。今回は OS 標準の機能でできればと思って質問しました。

>>49
1 月 1 日を含む週に 4 日以上ある場合、第 1 週になるそうです。
ですので今年は 1 月 3 日の週が第 1 週みたいです。
51デフォルトの名無しさん:2010/08/14(土) 00:59:16
OS 標準の機能ということなら、WSHで作ってバッチファイルから呼び出すというのは?
52デフォルトの名無しさん:2010/08/14(土) 05:13:52
>>51 そうですね、WSH に馴染みがないのですけど、まずは文法を調べてみます。
53デフォルトの名無しさん:2010/08/14(土) 20:26:25
多分どこか間違ってる

@echo off
set y=%date:~0,4%
set /a m=1%date:~5,2%-100
set /a d=1%date:~8,2%-100
call :z %y% %m% %d%
set /a d-=zwd
set /a d+=13
call :md %y% %m% %d%
set /a c=md/7
call :z %y% 1 1
if %zwd% geq 4 set /a c-=1
echo %c%
goto :eof
:md
set sd=000000 31 59 90120151181212243273304334
set /a md=%2*3
call echo %%sd:~%md%,3%%+%3
call set /a md=%%sd:~%md%,3%%+%3
if %1 geq 3 set /a md+=(!(%1%%4)^^!(%1%%100)^^!(%1%%400))
goto :eof
:z
set /a zy=%1,zm=%2,zd=%3
if %zm% leq 2 set /a zy-=1,zm+=12
set /a zwd=(zy+zy/4-zy/100+zy/400+(13*zm+8)/5+zd)%%7
goto :eof
54デフォルトの名無しさん:2010/08/14(土) 21:38:03
ttp://codepad.org/u9NX1tjY

>>52
ステップ数少ないなぁ
:md とか :z とか何の処理をしてるんだろ?
55デフォルトの名無しさん:2010/08/14(土) 22:03:42
:zはツェラーの公式
56デフォルトの名無しさん:2010/08/14(土) 22:18:12
日付処理はバグがつきもので地雷だからな
57デフォルトの名無しさん:2010/08/14(土) 23:40:20
>>53
有効なのは2000〜2099年までみたい?
何処いじればいいのか分からないけど

>>55
ややや、車輪の再開発かや…
58デフォルトの名無しさん:2010/08/14(土) 23:50:05
アッチのスレで答えたのに無視か…
59デフォルトの名無しさん:2010/08/15(日) 17:20:15
dateコマンドって地域と言語の設定でフォーマット変わるからなぁ
英語OSだと通常 mm-dd-yy とか
60デフォルトの名無しさん:2010/08/15(日) 21:12:45
年は和暦かもしれん
61デフォルトの名無しさん:2010/08/16(月) 10:40:12
デスクトップパソコンとノートパソコンをバッチ上で判定させたいんだけど、何か良い方法はないかしら?
62デフォルトの名無しさん:2010/08/16(月) 11:46:57
バッテリがあるかないかとか
63デフォルトの名無しさん:2010/08/16(月) 12:05:42
ありがとうございました
64デフォルトの名無しさん:2010/08/17(火) 07:47:09
>>62
う〜ん、いろいろ調べてみたけど難しい・・・
65デフォルトの名無しさん:2010/08/17(火) 08:57:06
難しく考えないでユーザーが手動で環境変数でセットすりゃいいんじゃね

if "%notepc%"=="1"
66デフォルトの名無しさん:2010/08/17(火) 09:01:39
それじゃ意味が無い
67デフォルトの名無しさん:2010/08/17(火) 09:04:03
スクリプトの挙動変えるための環境変数設定なんて普通にやるだろ…
68デフォルトの名無しさん:2010/08/17(火) 09:05:02
だから意味が無いといっておる
69デフォルトの名無しさん:2010/08/17(火) 12:53:08
PROCESSOR_IDENTIFIER
70デフォルトの名無しさん:2010/08/17(火) 21:30:06
Windows 7 で Gauche (Lisp の方言のひとつである Scheme をベースとしたスクリプト言語) の関連付けをしたんだわ。

assoc .scm=GaucheScript
ftype GaucheScript=gosh "%1" %*

で、

hoge.scm 1 2 3

てな感じでコマンド入力すると

gosh hoge.scm "1 2 3"

であるかのように展開されるみたい。 もしやと思って %* のかわりに %~* と書いてみたりもしたけど駄目だった。
どうにかして残りの引数をひとまとまりにしないような書き方ってある?
71デフォルトの名無しさん:2010/08/18(水) 20:45:09
Windows7にGauche入れて試してみたけど %* で問題なかったよ

C:\>type hoge.scm
(define (main args) (for-each print args))

C:\>hoge.scm 1 2 3
C:\hoge.scm
1
2
3

C:\>hoge.scm "1 2 3"
C:\hoge.scm
1 2 3
7270:2010/08/18(水) 21:44:44
なんでだろ。
どこか変な設定入ってんのかな。
7370:2010/08/31(火) 03:04:02
どうしても解決できない。
レジストリか何かで設定が変わるんでしょうか?
7470:2010/08/31(火) 03:14:35
ftype をやりなおしたら何故か解消した。
75デフォルトの名無しさん:2010/09/01(水) 22:55:42
任意ファイルをd&dするとUNIXにftpで転送し、telnetして計算を実行、
計算終了後に計算結果をftpで転送するbatを作ろうとしてるのですが、
二つほどうまくいきません。

一つはtelnet終了の判断が付かないことです。センドキーを使用していますが
exitでtelnetから抜けた後は次のコマンドに移らないので、pauseで次のコマンドに
移るようにしています。

もう一つは、計算結果をgetする際に、ファイルのあるフォルダ指定がうまく行きません。
パス名取得の%^p1を使用すると、”\任意のフォルダ\"の様に”\”で挟みますが
ftpでは右側に"\"があると認識しないようで、”\任意のフォルダ"にする必要が
あるため、一旦別の決め打ちしたフォルダにgetした後で、任意のフォルダへ
ムーブする方法を取っていますが、何か方法はないでしょうか?
76デフォルトの名無しさん:2010/09/02(木) 00:10:24
scp/ssh
77デフォルトの名無しさん:2010/09/05(日) 23:26:22
xcopy test.txt C:\test2.log /h /c /y /r
で拡張子、リネームしてコピーしようとしているのですが、
コマンドプロンプト画面で

C:\test2.log は受け側のファイル名ですか、
またはディレクトリ名ですか
(F= ファイル、D= ディレクトリ)?

と聞かれるのですが、それをbatで自動化にできないでしょうか?
78デフォルトの名無しさん:2010/09/05(日) 23:33:02
echo y|
79デフォルトの名無しさん:2010/09/05(日) 23:34:01
/s /e /v /k /h /c /y /r
80デフォルトの名無しさん:2010/09/06(月) 14:53:22
>>61
デスクトップとノートの能力的な違いって何があるかな。持ち運び以外の点で。

性能的にはデスクトップノートみたいな高性能のものもあるわけだし、
大容量UPSとか付けたらデスクトップでもバッテリーがあるのと一緒だし。
81デフォルトの名無しさん:2010/09/06(月) 14:55:57
UPS代わりになるのは大きい
82デフォルトの名無しさん:2010/09/06(月) 14:56:04
>>77
単一ファイルなのにcopyを使わない理由は?
83デフォルトの名無しさん:2010/09/06(月) 20:39:40
>>61
デスクトップPCにUPSが噛まされてたらバッテリー可否じゃ判定ミスるから
スピーカー設定がラップトップかデスクトップで見るとかは?
流石にデスクトップPCでラップトップに設定してる奴はいないだろうし
サウンドドライバないPCは知らん

しかしノートPCとデスクトップPCの判定って考えてみると奥が深いな
PC機種名が取れれば予め作成した膨大なテーブルで検索すれば…
…自作PCで積むな…

ま、完璧に判定するのは無理っぽいね
84デフォルトの名無しさん:2010/09/07(火) 06:32:14
batファイルベースなRuby on Railsライクなwebフレームワーク来ましたよ

DOS on Dope: The last MVC web framework you'll ever need
http://www.secretgeek.net/dod_intro.asp

Dos on Dope
http://dod.codeplex.com/
85デフォルトの名無しさん:2010/09/07(火) 18:42:47
>>82
レス遅れてすみません。
説明が欠けていました。
隠しファイルをコピーしたいんです。
86デフォルトの名無しさん:2010/09/07(火) 23:00:45
こんなかんじでlist.txtから呼び出した文字をつかってコマンド実行したいのですが、
for /f "delims=" %%i in (list.txt) do (
for /F "tokens=*" %%s in ('dsquery group -name %%i') do (

)

'dsquery group -name %%i'の箇所がコマンドとして認識されません。
コマンドに引数渡すのって無理でしょうか?
87デフォルトの名無しさん:2010/09/07(火) 23:16:18
bashでctrl + uを押すとカーソルより前にある文字が削除されますが、
vimでctrl +uで同じキーバインドにすることができますか?

vimの「dd」だと「ctrl + u」よりも面倒くさい気がするので
88デフォルトの名無しさん:2010/09/07(火) 23:34:16
>>86
普通に出来るが?

list.txtの内容とコマンドがおかしいんじゃね?
89デフォルトの名無しさん:2010/09/07(火) 23:46:09
そいつマルチ
90デフォルトの名無しさん:2010/09/12(日) 03:31:46
>>86
for /f "delims=" %%i in ('type list.txt') do (
91デフォルトの名無しさん:2010/09/19(日) 15:42:44
フォルダ内のある拡張子のファイル数を取得して変数にセットできますか?
ファイル名はいいので、ファイル数だけ取得できればよいです。
92デフォルトの名無しさん:2010/09/19(日) 16:44:13
可能
93デフォルトの名無しさん:2010/09/19(日) 16:46:57
for /f "usebackq" %%q in (`dir *.%1 ^|find "個のファイル"`) do @echo %%q

---↑無理矢理版 ↓ありがち版

::count.bat
@echo off
setlocal
set counter=0
for %%q in ("*.%1") do set /A counter=counter+1
echo %counter%
94デフォルトの名無しさん:2010/09/19(日) 22:17:40
>>93
ありがとうございます。ありがち版を使わせていただきます。

もうひとつ相談なのですが、
あるディレクトリにあるファイル名をテキストに書き込みたいと思っています。
ディレクトリ内には
abc_1.txt
abc_2.txt
 ・
 ・
 ・
といったファイルがあり、出力する1ファイルに3ファイル名ずつ書き込みたいです。
(1.txtにはabc_1.txt〜abc_3.txt、2.txtにはabc_4.txt〜abc_6.txt)

わかりにくい説明かもしれませんが、よろしくお願いします。
95デフォルトの名無しさん:2010/09/19(日) 22:45:08
setlocal enableextensions enabledelayedexpansion
set c=3
for /f %%i in ('dir /b') do (
set /a n=c/3
set /a c+=1
echo %%i>>!n!.txt
)
96デフォルトの名無しさん:2010/09/19(日) 23:09:29
>>95
ありがとうございます。
しかし、実行すると
「2010/09/19」
のように日付が書き込まれてしまいます。
ファイル名を取得する方法はないでしょうか?
よろしくおねがいします。
97デフォルトの名無しさん:2010/09/19(日) 23:18:26
そりゃdir /b のところをdirだけにしてるんじゃね?
ファイル名にスペースが含まれるものなら
for /f "delims=" %%i in ('dir /b') do (
98デフォルトの名無しさん:2010/09/19(日) 23:42:02
>>98
指摘ありがとうございます。
dirの後にパスを指定するときに/bを消してしまっていました。

ひとつ質問したいのですが、
setlocal enableextensions enabledelayedexpansion
の行はどんな意味があるのでしょうか?
99デフォルトの名無しさん:2010/09/19(日) 23:45:09
100デフォルトの名無しさん:2010/09/20(月) 01:11:22
丸投げ教えて君の相手は……
101デフォルトの名無しさん:2010/09/20(月) 13:32:18
>>94,95で
abc_1.txt,abc_4.txt,abc_7.txt・・・の時は
「ファイル名 1ファイル目」

abc_2.txt,abc_5.txt,abc_8.txt・・・の時は
「ファイル名 2ファイル目」

abc_3.txt,abc_6.txt,abc_9.txt・・・の時は
「ファイル名 3ファイル目」

という風にファイル名の後に特定の文字を記述することはできないでしょうか?

if文を使えばいいと思ったのですが、考えてもできませんでした。

わかる方いたら教えてください。よろしくお願いします。
102デフォルトの名無しさん:2010/09/20(月) 13:55:45
できません
10395:2010/09/20(月) 14:47:28
>>101
いい加減に自分で作れ
104デフォルトの名無しさん:2010/09/20(月) 15:03:37
調べてもわからないのでわかる方に聞いているつもりなのですが・・・
105デフォルトの名無しさん:2010/09/20(月) 15:26:01
95を見てちょっと考えればすぐわかる、小学生レベルの代物。

そんなもの調べてる段階でお前にゃ無理。
106デフォルトの名無しさん:2010/09/20(月) 15:27:46
setlocal enableextensions enabledelayedexpansion
set c=3
set x=0
for /f %%i in ('dir /b C:\RS3XDW\temp') do (
set /a n=c/3
set /a c+=1
echo %%i -X%x% >> C:\RS3XDW\merge\m!n!.txt
set /a x+=2000
)

ファイル名の後に-X0、-X2000、-X4000をそれぞれつけたいのですが、上記のバッチではうまくいきません。
原因がわかる方いたら教えてください。
107デフォルトの名無しさん:2010/09/20(月) 15:29:41

具体的には全て-X0になってしまいます。
108デフォルトの名無しさん:2010/09/20(月) 15:29:42
…。
109デフォルトの名無しさん:2010/09/20(月) 15:31:44
>>106
> setlocal enableextensions enabledelayedexpansion
> の行はどんな意味があるのでしょうか?

>>99にググれと言われてググってないのがモロわかり。
上手くいかないのはお前が上記文の意味を理解していないから。
それがバッチによく現れてるわ。
110デフォルトの名無しさん:2010/09/20(月) 15:34:19
>>109
調べてもわからなかったので、質問してみたのですが。。。
111デフォルトの名無しさん:2010/09/20(月) 16:18:51
論外。
112デフォルトの名無しさん:2010/09/20(月) 16:40:07
>>109さんのヒントを元に以下のバッチで実行できました。

あまりスマートではないかもしれませんが、とりあえずやりたいことはできました。

アドバイスありがとうございました。


setlocal enableextensions enabledelayedexpansion
set c=3
set x=0
for /f %%i in ('dir /b C:\RS3XDW\temp') do (
set /a n=c/3
set /a c+=1
echo %%i -X!x! >> C:\RS3XDW\merge\m!n!.txt
set /a x+=2000
set /a k=c%%3
if "!k!" == "0" (set /a x=0)
)
113デフォルトの名無しさん:2010/09/23(木) 01:56:10
バッチリ
114デフォルトの名無しさん:2010/09/25(土) 17:39:01
東北の一部にはこんな風習がある。
結婚した女は夫の父・祖父らとも性交をするのである。
現代にもこの風習は残っていると言われている。
(実態を調査するのは非常に困難であるが。)
さて、男が息子・孫の嫁と性交することを「ねぐる」という。
これがネグリジェの語源であることはあまり知られていない。

by 民明書房
115デフォルトの名無しさん:2010/09/25(土) 20:49:52
バッチファイルで起動したプログラムを
さらに好きなように操作するにはどうしたらいいですか?

バッチファイルでGIMPを起動したんですが
画像が
"C:\Program Files\gimp-painter-\gimp\bin\gimp-2.6.exe" %~n1\test\data\background.png
で開けなかったので
どうしたらいいんでしょうか?
116デフォルトの名無しさん:2010/09/25(土) 21:37:02
>>115
UWSCとかのアプリケーション操縦ソフトを使う。かなりややこしくて不確かで不安定だけどね。
エラーを考慮しない記述でこれだけ必要。

ID = EXEC( "C:\Program Files\gimp-painter-\gimp\bin\gimp-2.6.exe" )
ClkItem( ID, "ファイル\開く", CLK_MENU )
DlgID = GetID( "ファイルを開く", "#32770", -1 )
SendSTR( DlgID, "c:\test\data\background.png" )
ClkItem( DlgID, "開く", CLK_BTN )


ていうか、開くファイルのパスは正しいの?
echo %~n1\test\data\background.png でチェックしてみたら?
117デフォルトの名無しさん:2010/09/25(土) 22:03:55
>>115
%~n1ってことはそのバッチに何かファイルをドロップしたりしてるの?

バッチ単体で動かして動かないっていう間抜けな話のような気がするんだが…
118デフォルトの名無しさん:2010/09/25(土) 22:28:40
ありがとうございます
一応詳細を書きますと
フリーソフトのお絵かきソフトの保存ファイルの拡張子を変えて開いて
GIMPで編集したいというものです。

copy %1 %~n1.zip

%~n1.zip
cd C:\Program Files\gimp-painter-\gimp\bin
gimp-2.6.exe "%~dnp1\data\background.png"

こんな感じでファイルが開けました。
アドヴァイスありがとうございます
うwsc調べてみます。
119デフォルトの名無しさん:2010/09/26(日) 00:49:30
ACW(GETID("GNU Image Manipulation Program","gdkWindowToplevel"),-8,-8,1456,884,0)
BTN(LEFT,CLICK,1149,377,219)
KBD(VK_ALT,DOWN,40)
KBD(VK_F,CLICK,10)
KBD(VK_ALT,UP,40)
KBD(VK_E,CLICK,40)

KBD(VK_test,CLICK,40)

すいませんTest.pngをまとめて入力するにはどうしたらいいですか

・・・もうだめぽorz
120デフォルトの名無しさん:2010/09/26(日) 02:30:03
>>119
UWSCはスレチなのであっちに書いておきました。
ttp://hibari.2ch.net/test/read.cgi/software/1260304053/803

> さらに好きなように操作するには
とあったのでUWSCをお勧めしたんですが、
ファイルを開くだけなら起動時の引数で渡せば済むし、その方が確実ですよ。

また、もしUWSCでコントロールするならgimpではなく、アクセサリのペイントなど
Windows標準コントロールを使ったソフトの方が操作が簡単で確実になります。
>>116のようにメニューやボタンの名称を使って、より簡単確実にコントロールができるからです。
gimpは名称ではコントロールできませんでした。

あと、アプリケーションの自動操縦は
一つのことをするごとにいろいろなことを調べないといけないので、
先にどんなことをするのか、それにはどんなことが必要なのかを聞いた方がいいですよ。
手をつける前に。

>>116はWindows標準アプリを想定したもので
gimpを操縦できるか確かめたわけではなかったんですが、
実際には全然使えないコードでした。
121デフォルトの名無しさん:2010/09/26(日) 02:32:35
すいません。
なんかスキル不足で
文章データから必要な数値だけ
取り込むとか色々無理っぽかったんで…
質問取り消します
なんかもうどうしかけを作るとかは考えつくんですけど
今から新しくプログラム覚えるのは無理っぽいです。
昔のCの基本ぐらいしかわかんないです
お騒がせして申し訳ありません
122デフォルトの名無しさん:2010/09/26(日) 02:42:20
まさかの展開…
もうちょっと頑張ってみます。
アドバイス有り難うございます!
123118:2010/09/26(日) 11:19:53
>>118を実行すると
コマンドプロンプトの画面が出っぱなしになって次の
>マークが表示されず次の命令に進みません。
これはどうすればいいですか?
124118:2010/09/26(日) 11:59:07
なんとなく原因が分かってきましたが
これは何を検索すればいいですか

cd C:\Windows\System32
notepad.exe "%~dnp1\stack.txt"
適当にメモ帳を起動したらやはりメモ帳を手動で終了させないと
次の命令に進まない事が分かりましたOTL

こ、これは・・・??
コマンドプロンプト メモ帳で検索したんですがいいヒントが見つかりませんOTL
125デフォルトの名無しさん:2010/09/26(日) 12:00:56
終了待ちしたくなかったら
start notepad.exe "%~dnp1\stack.txt"
126デフォルトの名無しさん:2010/09/26(日) 12:26:28
>>125
あ、ありがとうございます!!!
127デフォルトの名無しさん:2010/09/26(日) 17:02:57
たびたびすいません。
%1に入っている情報をhozon.txtに書き込んで置く方法はないでしょうか?
.txtの中身の検索や比較はできるんですけど
書き込むにはどうしたらよいのでしょうか?
バッチファイルにD&Dしたファイルの名前と位置情報を得て
UWSCに持って行きたいのです。
128デフォルトの名無しさん:2010/09/26(日) 17:41:10
こんな感じでテキストファイルを自動で作るまでは出来たのですが
そこに内容をいれられませんOTL
dir>list.txtではテキストファイルに内容を保存できたのですが・・・
どうしたらよいのでしょうか?

cd C:\Windows\System32
start notepad.exe "%~dnp1\stack.xml"
cd %~dnp1
%~dnp1>list.txt
129デフォルトの名無しさん:2010/09/26(日) 18:25:00
>>127
ヘルプのリダイレクト演算子を参照のこと

echo %1>>hozon.txt
130デフォルトの名無しさん:2010/09/26(日) 18:34:18
>>128
%~dnp1という書き方は凄く違和感あるな…というのはさておき、
これはドロップされたファイルの部分を除いた部分という意味だが
そんなディレクトリが最初からあるの?

それに通常システムディレクトリにpathが通ってるから
> cd C:\Windows\System32
これは要らんし
> cd %~dnp1
これも何のためにカレントディレクトリを移動するのかわからん。
そもそも存在してるのかって疑問も前述の通り。

第一%~dpn1に入ってるのはコマンドじゃないから
notepad起動したあとエラー吐いて終わるだけじゃね?
131デフォルトの名無しさん:2010/09/26(日) 18:36:15
エラーで終わっても一応0バイトのファイルは出来るけど…
もしかして

> こんな感じでテキストファイルを自動で作るまでは出来たのですが

ファイルを自動で作れたってこの0バイトのファイルの事か?
132デフォルトの名無しさん:2010/09/26(日) 18:44:05
うわあああありがとうございます!!

そうですね。別々に作ってきたので
ディレクトリ移動とか変ですよね。
紛らわしくてごめんなさい。

そーですねゼロバイトのファイルですね・・・OTL
cd>hozon.txtとか無理やりやってました。
うぉぉおおおechoですかありがとうございます!!!
HELP>help.txtしてきます!!
133デフォルトの名無しさん:2010/09/26(日) 19:07:56
OSは何? XPなら
C:\WINDOWS\hh.exe ntcmds.chm::/ntcmds.htm
これでコマンドラインのヘルプがまとめて見られるぞ。
134132:2010/09/26(日) 21:35:26
vistaです。
135デフォルトの名無しさん:2010/09/26(日) 21:45:04
手取り足取りやってもらわないとできない状態なら
本ぐらい買って勉強してから出直せ
136デフォルトの名無しさん:2010/09/26(日) 21:53:47
すんません。でもおかげさまで重要な部分は出来ました。
137デフォルトの名無しさん:2010/09/27(月) 02:19:48
ちょっと確認ですけど
バッチで何かプログラムを開いた後、

起動完了した事を確認する方法って無いですよね。
パソコンによって起動時間は違うし
ポーズコマンドでも入れておいて
見た目で起動しおわったか
判断してもらって
なんかキーを押してもらって次のコマンドに行く
ぐらいだよね?


138デフォルトの名無しさん:2010/09/27(月) 02:41:25
139デフォルトの名無しさん:2010/09/27(月) 05:12:32
Win32API使えるならShellExecuteEx&WaitForInputIdleすれば待てる
140デフォルトの名無しさん:2010/09/27(月) 05:14:16
確実性は落ちるけどtasklistでwindowtitle絞って検索するのもありか
141デフォルトの名無しさん:2010/09/28(火) 00:41:26
どうもありがとうございます。
色々手立てはあるのですね。
142デフォルトの名無しさん:2010/09/28(火) 12:05:10
バッチファイルで別のバッチ内のサブルーチンを使うなんて事は出来ないですかね?
同じサブルーチンが複数のバッチにコピペされてて管理が面倒なんですが。

copy main.bat+sub.bat>cat.bat
call cat.bat

みたいにするしかないでしょうか?
143デフォルトの名無しさん:2010/09/28(火) 12:21:53
copy "%~0" "backup.bat"
type sub.bat>>"%~0"
call :hoge
del "%~0"&ren "backup.bat" "%~0"

自分自身にくっつけるのってなんだか不安なんですが
一応動く…

なんかもっとスマートな方法ってないですかね
144デフォルトの名無しさん:2010/09/28(火) 12:39:39
callのヘルプ30回くらい嫁
145デフォルトの名無しさん:2010/09/28(火) 13:20:48
ん?

何回読んでもそんなことが出来るような事は書いていないですが…

--- main.bat ---
call :hoge
--------------

--- sub.bat ---
goto :eof
:fuga
echo fuga
goto eof

:hoge
echo hoge
goto :eof
-------------

mainを実行したらsubのhogeが実行されるような事をしたいんですがね。
一つのサブルーチン毎に一つのファイルにしろって事かな?
146デフォルトの名無しさん:2010/09/28(火) 14:48:38
あれ、コマンドプロンプトではPNGの画像サイズを調べる事が出来ない?
147146:2010/09/28(火) 14:54:16

DIRで見る事が出来るサイズじゃなくて
プロパティの詳細で見れる50×70ピクセルとかいう大きさの事ね
148デフォルトの名無しさん:2010/09/28(火) 15:53:34
さすがにそれは要求がファンタジーすぎる
149デフォルトの名無しさん:2010/09/28(火) 16:07:52
wwwですよねー。
どうもすいません
150デフォルトの名無しさん:2010/09/28(火) 16:22:05
そういうのはPowerShellでBitmapクラスでロードするのが手っ取り早いんじゃね
151デフォルトの名無しさん:2010/09/28(火) 16:34:22
imagemagickとか使えば出来るが
152デフォルトの名無しさん:2010/09/29(水) 03:15:35
超基本的な質問で申し訳ないんだけど
クリップボードの内容をキー操作でコマンドプロンプトにペーストするには
どうしたらいいですか?

とりあえず画面上では右クリックするとメニューが出て来て張り付けをクリックするか
pを押すと出来ますが
マウスを使わずに張り付ける方法が分かりません。

153デフォルトの名無しさん:2010/09/29(水) 03:35:54
>>152
Alt+スペース → 編集(E) → 貼り付け(P)
154デフォルトの名無しさん:2010/09/29(水) 07:11:29
うぉぉおおおありがとう!!!!
155デフォルトの名無しさん:2010/09/29(水) 19:06:29
バッチファイルにドロップしたファイルと同じディレクトリに
abc.txtをコピーしたいんですが

copy abc.txt %~dp1
を実行してみるとコマンドプロンプトでは最後に¥マークが付いて
うまくコピーされません
どうしたらコピーされますか?
156デフォルトの名無しさん:2010/09/29(水) 19:23:20
copy abc.txt %~dp1.
157デフォルトの名無しさん:2010/09/29(水) 20:42:20
ありがとうございます、出来ました!!
158デフォルトの名無しさん:2010/09/30(木) 00:26:39
いろいろ教えて貰ったおかげでなんとか出来ました。
http://www.dotup.org/uploda/www.dotup.org1173513.zip.html
フォトショのpsdファイルからMypaintの.oraに変換するプログラム。
残念ながら一部手動でかなりのむりくり・・・。OTL


えーと、zipに圧縮するところどうしてもうまくいかなかった。
バッチファイルからzipに圧縮ってどうしたらいいのん?
159デフォルトの名無しさん:2010/09/30(木) 01:33:53
cabならcabarcが標準であるけど
zipはzip拾ってくるしかない
160デフォルトの名無しさん:2010/09/30(木) 11:37:53
うーん
ZIP.VBSっていうのを使ってみたんだけど
うまくいかない。
コマンドが間違ってますか?

CScript.exe MakeExZIP.VBS assyuku.zip %~dp0assyuku
というふうに入力後zipファイルは出来るんだけど
その後の処理がうまくいかないので
きちんとzipフィルが出来てないのかな・・・。
161デフォルトの名無しさん:2010/09/30(木) 12:28:59
VBSならソース見るか作った本人に聞けよ
162デフォルトの名無しさん:2010/09/30(木) 17:04:59
そうだね、ごめん。
163デフォルトの名無しさん:2010/09/30(木) 17:46:01
>>155
最後が\でも全然問題ないだろ。
164デフォルトの名無しさん:2010/10/01(金) 02:17:42
そうだね、ごめん。
165デフォルトの名無しさん:2010/10/10(日) 12:17:47
HPを参考にバッチをつくってますが、
どうしてもうまくいきません。
中段にある、javaで書かれたbatでよびだしたいのですが、、、
javaでかかれたものは記述じたい何か変更しなくては駄目なのでしょうか?
お教えいただけませんでしょうか?
http://d.hatena.ne.jp/tarumnk/20091108/1257671905
166デフォルトの名無しさん:2010/10/10(日) 12:25:38
ウイルス
167デフォルトの名無しさん:2010/10/14(木) 21:18:29
バッチで宣言した変数がバッチを終了したのに残ったまま環境変数になってしまいます。
ちゃんと最初にsetlocal、exitの直前にendlocalを記述しているのに・・・
でもプログラムの途中で無理やり終わらせるとちゃんと変数が消えるんです
なぜでしょうか?どなたか教えてください

遅延展開onにしたらこんな症状になるってわけではないですよね
168デフォルトの名無しさん:2010/10/15(金) 01:06:20
他のバッチを呼んでる?
169デフォルトの名無しさん:2010/10/15(金) 01:29:46
endlocalの前にgotoでどっか飛んでるんじゃね?
170デフォルトの名無しさん:2010/10/15(金) 02:15:17
endlocalなくても抜けたらendlocalされる
171デフォルトの名無しさん:2010/10/15(金) 02:22:24
ありえん 最小再現ソースを出せ
172デフォルトの名無しさん:2010/10/15(金) 02:36:23
まあそうなったとして、最後にSETして消したら?
173デフォルトの名無しさん:2010/10/15(金) 02:42:14
>まあそうなったとして、最後にSETして消したら?

setlocalの意味を知らないみたいね?
174デフォルトの名無しさん:2010/10/15(金) 02:59:49
>>173
「消えないってのが想像付かないけど、残ってるなら上書きで消してしまえばいいじゃん」
ってことを言いたいだけなのでは?
175デフォルトの名無しさん:2010/10/15(金) 05:46:59
setlocal&(set 〜)ってやると残るんだけどね
176デフォルトの名無しさん:2010/10/15(金) 05:47:42
間違えた
endlocal&(〜
177デフォルトの名無しさん:2010/10/15(金) 06:26:22
拡張子のないファイルを全削除することってどうやったらできますか?
178デフォルトの名無しさん:2010/10/15(金) 06:37:59
if "%~xi"=="" del %i
とかやっとけば
ディレクトリははねてもいいしエラーになるからそのままでもいい
179デフォルトの名無しさん:2010/10/15(金) 06:47:07
先に
>dir /a-d-h-s *.
で絞り込むのが安全
180デフォルトの名無しさん:2010/10/15(金) 15:48:44
>>174
setlocalの意味を知らないみたいね?

set a=aaa
setlocal
set a=bbb
endlocal
echo %a%
181デフォルトの名無しさん:2010/10/15(金) 16:49:36
>>180
173は消えないというのが想像付かないって言ってるんだから
意味は知ってるだろ。

俺も想像は付かんがね。
意図的に残すなら

set a=aaa
setlocal
set a=bbb
endlocal&set a=%a%
echo %a%

みたいにやると残るんだが、仮にバグなり意図せずこんな書き方になってたりとして
事後策として消せばって言ってるんだろ。
182デフォルトの名無しさん:2010/10/16(土) 00:27:51
途中でendlocalやってんだろ
先頭で余分にsetlocalしとけばよいよ
183173:2010/10/16(土) 03:15:54
解決しました。
ある条件でstartコマンドで自身を呼んでサブルーチンを実行させていたのですが、
皆さんの言うとおりそのサブルーチンを終わらせる所にendlocalを記述していませんでした。
startコマンドでサブルーチンを呼んだ時に変数を引き継いでいたのを忘れてました。
どうりでメインルーチンにendlocal記述しても変数が残るわけです。
途中でバッチを強制終了したら変数が残らなかった原因は、バッチを強制終了させた段階はサブルーチンを呼んでいなかった段階だからでした。

一応ソース丸あげしておきます。
念のため最初に全ての変数に空の値入れて消してます。
http://codepad.org/szulekk2
184167:2010/10/16(土) 03:17:55
すみません、私は173ではなく質問者の167でした。ご迷惑をおかけします。
185167:2010/10/16(土) 03:24:32
連投申し訳ございません
codepadのソースのラベルのnexistの一行前にgoto existを入れるのを忘れていました。起動する場合はご注意ください
186デフォルトの名無しさん:2010/10/16(土) 03:37:36
startコマンドだって
187デフォルトの名無しさん:2010/10/16(土) 04:01:56
そんなもん使うからだろあほくさ
188デフォルトの名無しさん:2010/10/16(土) 13:34:59
callでいいところでstart使う奴って何なの?
189167:2010/10/16(土) 14:32:52
>>188
コマンドが動いている時にキーを押させてコマンドを終了させる為には
start使ってバッチスクリプトを2つ起動させ、1つにコマンドを制御させるバッチを記述する必要があったのです。
callだと制御が戻ってくるまでコマンドを進めることができないと考えまして・・・
190デフォルトの名無しさん:2010/10/16(土) 15:21:18
ふーん そりゃ大変だな どうせあほなことやってんだろけど
191167:2010/10/16(土) 16:32:34
>>190
どんなアホな事やってるかは
183のソース見ればわかりますw
これが俺の限界でしたorz
ではこの辺で名無しに戻ります
192デフォルトの名無しさん:2010/10/16(土) 17:46:05
わかったよ ほんとにそうなんだ
193デフォルトの名無しさん:2010/10/16(土) 18:04:47
exitしても環境変数が残るんだ 凄
194デフォルトの名無しさん:2010/10/16(土) 18:07:21
やっぱendlocalで「消える」と思ってるんだ
195デフォルトの名無しさん:2010/10/16(土) 19:10:21
そうだね、ごめん。
196デフォルトの名無しさん:2010/10/16(土) 20:05:09
フォーカスを奪わずにプログラムを実行するよい方法はないでしょうか?

cmd /c img_viewer.exe my_image.png
cmd /c my_image.png # 関連付け実行?
cmd /c start my_image.png # 関連付け実行?

のように起動すると、起動したimg_viewer.exeが前面に来て、さらにフォーカスをうばってしまいます
197デフォルトの名無しさん:2010/10/16(土) 20:12:25
cmd /c start /min my_image.png
198デフォルトの名無しさん:2010/10/16(土) 20:45:39
>>197
試してみたのですが、最小化して起動されてしまいました

ウインドウは表示はするけど、フォーカスをうばわないということがしたいのですが、
cmd単体では無理そうですかね・・・
199デフォルトの名無しさん:2010/10/16(土) 20:49:07
.urlをechoで作ってstart
200デフォルトの名無しさん:2010/10/16(土) 21:01:53
VBSなりAHKなりで直後にAlt+TAB,TABを送るか
アクティブウィンドウを記憶しておいてアクティブにするとかか
cmdの標準的な機能じゃ無理な気がする
201デフォルトの名無しさん:2010/10/16(土) 21:29:54
ありがとう

>>199
[InternetShortcut]
URL=c:\image\my_image.png

みたいに書いてstartで実行してみましたが、ビューアーは前面に出てしまいました
関連付けで立ち上がるアプリケーション側に依存するのかもしれませんね

>>200
やはり無理ですかね。

AHKなりなんなり併用してみます。
202デフォルトの名無しさん:2010/10/16(土) 21:38:06
[InternetShortcut]
URL=c:\image\my_image.png
ShowCommand=4 か 8
203196:2010/10/17(日) 05:55:10
結論から書きますと上手くいきました!!

・関連付け実行するビューアー側の多重起動を防止しついでにアクティブにするオプションを無効化

その上で

>>202 のように ShowCommand=4 か 8で指定して起動
・もしくは、Cygwinのcygstart.exeで cygstart.exe --showna my_image.png
(--shownaの代わりに--shownoactivateでも可)

感謝感激!!ありがとうございました


■以下、チラシの裏

InternetShortcutのShowCommandはAPIのShellExecuteに対応しているんですね。
ネットで調べても一部しか数値が載っていないので何かと思っていましたが、
ふとcygstartを思い出して、-vオプションをつけて試すとShellExecuteを実行していることが表示できるので、
ようやくShowCommandの数値の意味がわかりました。
ShellExecute 関数
http://msdn.microsoft.com/ja-jp/library/cc422072.aspx


その後、関連付けられた画像ビューアーではこれらのオプションが効かずフォーカスを奪うことに気づき、
他のビューアーで試した所、ちゃんと非アクティブになりフォーカスを奪わず問題なしでした。
ここで、ようやく画像ビュアー側の問題もあることに気づきました。

それとこのスレの範疇から外れますが、CygwinのcygstartはShellExecute相当ができてstartよりも便利ですね。
スラッシュ区切りのcygwinのパスも考慮してくれますし
204196:2010/10/17(日) 08:39:57
Cygwinない場合や.urlを一時ファイルに出力するのが面倒な場合は

wshでもできますね

WScript.CreateObject("WScript.Shell").Run("my_image.png", 4, true);

ただし、既定の標準の関連付けではなく、"open"何故かopenの方で開かれてしまうみたいです

あと、batファイルだけなら、
rundll32.exe shell32.dll,ShellExecute でいけるような気もしますが、その後の引数はどういう書式でかけばいいかわからんです。
205デフォルトの名無しさん:2010/10/17(日) 08:47:58
スレ違い
206デフォルトの名無しさん:2010/10/17(日) 14:04:39
CreateObject("Shell.Application").ShellExecute()
207デフォルトの名無しさん:2010/10/17(日) 15:37:22
timeoutコマンドで満了したか、中断したか、区別できますか?
208デフォルトの名無しさん:2010/10/17(日) 16:35:10
sleep -cはどう使うんですか?
209デフォルトの名無しさん:2010/10/18(月) 15:52:26
sleepは外部コマンド
210デフォルトの名無しさん:2010/10/18(月) 16:05:59
>>207
echo %errorlevel%
は常に0だから無理

>>208
commited-memory ratio
ってなんだろね 書き込みデータのあるメモリってことか
211デフォルトの名無しさん:2010/10/18(月) 16:06:34
外部コマンドって言ったらregやfindstrも含まれると思うが…

sleep.exeはMSのツールじゃない罠。
色々な所が色々なsleep.exe出してるからどのsleep.exeかわからん。
212デフォルトの名無しさん:2010/10/18(月) 16:38:11
>>211
> sleep.exeはMSのツールじゃない罠。
由緒正しいのってなら、リソースキットの sleep.exe じゃね?
213デフォルトの名無しさん:2010/10/18(月) 17:03:02
> wshでもできますね
>
>WScript.CreateObject("WScript.Shell").Run("my_image.png", 4, true);

バッチファイルでもできる

mshta.exe vbscript:close(CreateObject("WScript.Shell").Run("my_image.png",4,True))

> ただし、既定の標準の関連付けではなく、"open"何故かopenの方で開かれてしまうみたいです

それがrunの仕様

> あと、batファイルだけなら、
> rundll32.exe shell32.dll,ShellExecute でいけるような気もしますが、その後の引数はどういう書式でかけばいいかわからんです。

できない。rundll32.exeできるのは、引数がそのように作られているか、引数がないもの、引数が1つでそれがゴミでも動くものに限る
214デフォルトの名無しさん:2010/10/18(月) 19:14:20
>>167
別コンソールやtempファイル使わんでもできるだろ
215デフォルトの名無しさん:2010/10/18(月) 20:27:24
>>214
教えてください
216デフォルトの名無しさん:2010/10/18(月) 21:43:03
start /b
title + tasklist
217デフォルトの名無しさん:2010/10/19(火) 06:02:52
>>205
ごめんね(´・ω・`)

>>206
キター!!JScriptなら
WScript.CreateObject("Shell.Application").ShellExecute("c:\\images\\mondainai.png", "", "", "", 4);

でいけますね

IShellDispatch2.ShellExecute Method (Windows)
http://msdn.microsoft.com/en-us/library/bb774148.aspx


>>213
mshtaでワンライナーできるのかw

mshta.exe "javascript:new ActiveXObject('Shell.Application').ShellExecute('c:\\images\\mondainai.png','','','',4);close()"

いけたわぁぁああああああ
218デフォルトの名無しさん:2010/10/19(火) 18:22:53
>>216
ごめんなさい。さっぱりです。
何をするためにそのコマンドを使うのでしょうか?
219デフォルトの名無しさん:2010/10/19(火) 22:48:46
start/?
title/?
tasklist/?
220デフォルトの名無しさん:2010/10/19(火) 23:23:21
>>214
ところでどこからtempファイルなんて出てきたの?

誤爆?安価ミス?
221デフォルトの名無しさん:2010/10/19(火) 23:31:17
222デフォルトの名無しさん:2010/10/20(水) 18:58:46
start "プロセス監視制御" %ownpass%

start /b "プロセス監視制御" %ownpass%
で別コンソール開かない

echo finish!>%Temp%\pknd.log
if not exist %Temp%\pknd.log echo finish>%Temp%\pknd.log

title プロセス監視制御終了

if exist %Temp%\pknd.log del %Temp%\pknd.log&goto exit

for /f %%I in ('tasklist /nh /fi "windowtitle eq プロセス監視制御終了") do exit
223デフォルトの名無しさん:2010/10/20(水) 19:00:25
for /f %%I in ('tasklist /nh /fi "windowtitle eq プロセス監視制御終了"') do exit
224デフォルトの名無しさん:2010/10/22(金) 18:13:12
>>222
>>223
for /f %%I in ('tasklist /nh /fi "windowtitle eq プロセス監視制御終了"') do exit

これだと必ずexitするので

tasklist /nh /fi "windowtitle eq プロセス監視制御終了"|findstr プロセス監視制御終了&if not %errorlevel%==0 goto exit

こう書き換えました。恐らくxp等では正常に動作すると思うのですが、当方windows7で管理者で起動しているので
タイトルに 管理者: という文字が文頭についてしまい動作しませんのでtempを引き続き使用することにします。
225デフォルトの名無しさん:2010/10/22(金) 19:07:51
for /f %%I in ('tasklist /nh /fi "windowtitle eq 管理者: プロセス監視制御終了"') do if %%I=cmd.exe exit

少しぐらい応用しろよな
226デフォルトの名無しさん:2010/10/22(金) 22:08:58
screnameというソフトでファイル名を変更したあと
そのファイルをフォルダ移動させたいのですが
何度か書き換えたりしてためしてるのですが
うまくいかなくて、すいません。教えてください。

@echo off
setlocal

rem SCRename.vbs をインストールしたパスを設定

set SCRPATH=C:\TvRock\SCRename

for /F "usebackq delims=" %%I in (`cscript //nologo "%SCRPATH%\SCRename.vbs" "%~1" "$SCtitle$ 第$SCnumber$話 「$SCsubtitle$」" 13`) do set SCRTARGET=%%~I

move "%SCRTARGET%" "D:\REC FILE\hogehoge"

endlocal
227デフォルトの名無しさん:2010/10/23(土) 13:13:45
>>225
それだとxpなどで使えなくなり困るのです。
2000、XPProでも使いたいので
228デフォルトの名無しさん:2010/10/23(土) 14:07:09
2行並べて書けばいいだけだろ? 応用の効かない奴だな まったく
229デフォルトの名無しさん:2010/10/23(土) 15:31:52
>>228
そうでした
応用のきく奴になりたいです。
ありがとうございました
230デフォルトの名無しさん:2010/10/23(土) 18:42:37
start /b cmd /c " ... & ... "
にすれば再帰呼び出しもいらんよ
231デフォルトの名無しさん:2010/10/25(月) 21:12:13
初心者すぎる質問で申し訳ありませんが、

ping -n 10 202.229.12.1

これを実行させるバッチファイルを作りたいです。
上記のスクリプトのみで保存したバッチファイルだと正常動作しません。
どうしたらよいのでしょうか?
232デフォルトの名無しさん:2010/10/25(月) 21:33:24
ping -n 10 202.229.12.1

pause

↑でやったらできたよ。
結果は↓
Pinging 202.229.12.1 with 32 bytes of data:

Reply from 202.229.12.1: bytes=32 time=10ms TTL=245
Reply from 202.229.12.1: bytes=32 time=9ms TTL=245
Reply from 202.229.12.1: bytes=32 time=10ms TTL=245
Reply from 202.229.12.1: bytes=32 time=11ms TTL=245
Reply from 202.229.12.1: bytes=32 time=9ms TTL=245
Reply from 202.229.12.1: bytes=32 time=11ms TTL=245
Reply from 202.229.12.1: bytes=32 time=9ms TTL=245
Reply from 202.229.12.1: bytes=32 time=10ms TTL=245
Reply from 202.229.12.1: bytes=32 time=10ms TTL=245
Reply from 202.229.12.1: bytes=32 time=10ms TTL=245

Ping statistics for 202.229.12.1:
Packets: Sent = 10, Received = 10, Lost = 0 (0% l
Approximate round trip times in milli-seconds:
Minimum = 9ms, Maximum = 11ms, Average = 9ms
233232:2010/10/25(月) 21:34:09
ちなみに、ファイル名に.batって拡張子つけてますか?
234デフォルトの名無しさん:2010/10/25(月) 21:39:26
>>231
ファイルの名前をping〜って付けてない?
バッチファイルの名前に外部コマンドと同じ名前を付けたら誤動作するっぽいよ

hogehoge.bat

start /b
ping -n 10 アドレス

みたいにやってみては
235デフォルトの名無しさん:2010/10/25(月) 22:29:07
start /bの利用法を調べると、これぐらいだな

再帰的なバッチ ファイルとシステムの応答を停止する
http://support.microsoft.com/kb/105851/ja
236デフォルトの名無しさん:2010/10/25(月) 23:18:26
infos>skills
237覚え書き:2010/10/25(月) 23:47:10
REM Windows Picture and Fax Viewer (WindowsXP)
C:\WINDOWS\system32\rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %~f1

REM Windows Media Player (Version 7.0以降)
"C:\Program Files\Windows Media Player\wmplayer.exe"

REM Windows Media Player (Version 6.4)
"C:\Program Files\Windows Media Player\mplayer2.exe"

REM ワードパッド (WindowsNT4.0〜XP)
"C:\Program Files\Windows NT\Accessories\wordpad.exe"
238デフォルトの名無しさん:2010/10/26(火) 08:05:18
>>234
ビンゴでしたw
ファイル名を"ping.bat"にしていたのが原因だったようです。
勉強になりました。ありがとうございました。
239デフォルトの名無しさん:2010/10/26(火) 09:33:02
わろぬ
240デフォルトの名無しさん:2010/10/28(木) 16:31:20
バッチファイル上やコマンドプロンプトで、Unicodeのアラビア語やタイ語を表示できないでしょうか?

試しにcygwinとutf-8表示できるターミナルソフトckを使ってみたところ表示はできましたが、
ターミナルソフトを使わずCygwin以外でもあつかいたのです。
(ckではなくminttyは表示できない文字がアラビア文字ありました)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
で、932.1に試しに*MeiryoKe_Consoleを設定し再起動してからフォントを変えてみましたが、
”・・・・”というような表示になってしまいます。
PowerShellでも同様でした。(PowerShell ISEのようなソフト上では表示できました)

notepadではそもそもMS ゴシックでもそれらの文字が表示できることから、何かソフト側で工夫しているのかもしれません。

コマンドプロンプトの話題になるので、適切なスレあれば誘導お願いしたいです。
241デフォルトの名無しさん:2010/10/28(木) 18:54:01
chcp 65001 で文字コードを UTF-8 に変更してみたら?
色々と難のある方法らしいから、一度 chcp utf-8 辺りでググレ
242デフォルトの名無しさん:2010/10/28(木) 18:55:06
FontLinkはした?

unicode対応をうたってるエディタでも化けたりするけど
なんでか知らないけどnotepadって混在文字を表示するのは優秀なので
notepadで表示できてもあんまり意味ないw
243デフォルトの名無しさん:2010/10/28(木) 21:45:50
>>241
おまえ chcp 65001 使ったこと無いくせに
244デフォルトの名無しさん:2010/10/28(木) 21:54:28
chcpは要らんが、タイ語の文字セットのフォントが要るだろ
245デフォルトの名無しさん:2010/10/28(木) 21:56:06
>>240
他の対話形式のコマンド使わないなら、PSISE(と、必要ならchcp 65001)のコマンドラインが現状最善だと思うよ
246デフォルトの名無しさん:2010/10/28(木) 22:44:03
chcp が使えるのは XP までだろ
Vista と 7 の cmd は糞
247デフォルトの名無しさん:2010/10/28(木) 23:39:43
つかえるけど?
248デフォルトの名無しさん:2010/10/28(木) 23:44:27
つかえることはつかえるねつかいものにならないけど
249デフォルトの名無しさん:2010/10/28(木) 23:44:42
cmd は変わらんだろ
250デフォルトの名無しさん:2010/10/29(金) 00:14:04
枝野議員「ねんきん定期便、送られてくるけれど、見ないでゴミ箱へ。そういう人は多いと思います。」
ttp://hato.2ch.net/test/read.cgi/news/1288275330/
>  「送ってもらってますが、見もしないでゴミ箱に・・・、すいません、我が家も(ゴミ箱に)行ってます。
> 『ねんきん定期便』送られてくるけれど、見ないでゴミ箱へ行ってます。そういう人は多いと思います。
> その人が(『ねんきんネット』に)移行してくれますか?」(仕分け人、枝野幸男 衆院議員)

枝野くんの「クシャクシャでポイ」
ttp://www.youtube.com/watch?v=taEEKkyAiBM
251デフォルトの名無しさん:2010/10/29(金) 00:37:46
ありがとうございます!
環境かき忘れていました。Vista SP2とXP SP3です。

タイ語やアラビア語のフォントとFontLinkすればということでしょうか?
試してみます。

しかし、CygwinのUTF8対応と謳っているターミナルでもソフトによっては同じフォントでも表示できたりできなかったりするみたいですね。


>>241
chcp 65001は>>240のときや以前にも何回か試したのですが書き忘れていました。
ネットを検索するとchcp 65001の記述をよく見かけるのですが、
何故か残念ながらcmdでまともに使えた試しがなく・・・

UTF-8の文字のファイルは表示できましたが、
>>240 の問題の”・・・・”という文字表示ができない問題は代わりませんでした。
また何故かbatファイルが実行できない、IMでの入力ができない問題がありました。

後出しで申し訳なく

>>242
手持ちのエディタでも化けてました。
notepadすごいんですね

>>245
ISEはPowerShellも強力ですし便利ですよね。

出力テキストの折り返しがなかったり、ファンクションキーで入力履歴がたどれないなど問題があるので、
使い分けが要るかなと。

フォントがMS ゴシックなのにISEもnotepad並に何でも表示できて凄いですね。
むしろ"MeiryoKe_Console"にしたらアルファベット文字がかけたりしました。
252デフォルトの名無しさん:2010/10/29(金) 09:01:42
>>251
ttp://www.geocities.jp/npp_euc_jp/

notepadだけじゃちょっと辛いっしょw
文字が混在してるテキストを表示したいならこのエディタがオススメ
253デフォルトの名無しさん:2010/10/31(日) 17:44:57
for文の中では、cd /dやpushdは使えないことに今頃気が付いた
for文入れ子の時とかどうしてる?

@echo off
cd /d "%~dp0"
echo "%cd%"
cd /d "%~1"
echo "%cd%"
pushd "%~1"
echo "%cd%"
echo -----

cd /d "%~dp0"
echo "%cd%"
for %%A in (%*) do (
cd /d "%%~A"
echo "%cd%"
pushd "%%~A"
echo "%cd%"
echo -----
)
pause
exit
254デフォルトの名無しさん:2010/10/31(日) 19:44:04
使えないのではなく、バカには使えていることがわからない、だろ
遅延展開を調べろ
255デフォルトの名無しさん:2010/10/31(日) 20:41:25
forループの中の変数はfor実行時に代入

pushd c:\hoge
for %%i in (fuga,hage) do ( pushd c:\%%i
echo "%cd%")



pushd c:\hoge
for %%i in (fuga,hage) do (pushd c:\%%i
echo "c:\hoge")

と全く同じ
こういうのはechoをオンにしてるとすぐわかる。
おかしいと思うのにecho offにしてる奴は馬鹿としか言いようがない。
256デフォルトの名無しさん:2010/10/31(日) 21:28:32
あんまりだわ
257デフォルトの名無しさん:2010/10/31(日) 21:39:03
よしよし
258デフォルトの名無しさん:2010/10/31(日) 21:54:39
そういうのは代入とは言わない 展開というんだよ
259デフォルトの名無しさん:2010/11/01(月) 17:54:58
遅延理解しました
260デフォルトの名無しさん:2010/11/02(火) 01:42:36
dir /a:d /b /s
で出てくるディレクトリの一覧を一つづつ引数にして他の処理に渡したいんですけど
そういう事ってできますか?
261デフォルトの名無しさん:2010/11/02(火) 02:07:27
for
262デフォルトの名無しさん:2010/11/02(火) 03:17:03
つづつ
263デフォルトの名無しさん:2010/11/02(火) 09:43:08
>>254,255
レスありがとう
そこ盲点でした
ちゃんとした回答をくれる優しさに感謝してます
264デフォルトの名無しさん:2010/11/02(火) 09:44:43
引数の判定処理書いたので張っときます
batの最初のほうに色々な判定処理を置くと便利なようです

----------------------------------------------
rem 引数のディレクトリが存在しない場合はexit
setlocal enabledelayedexpansion
for %%A in (%*) do (
cd /d "%%~A"
if !ERRORLEVEL!==1 (
echo "%%~A" ディレクトリが存在しません
echo バッチを終了します
echo.
pause
exit
)
)
endlocal
265デフォルトの名無しさん:2010/11/02(火) 12:18:00
そういう時は遅延展開必要ない
if not errorlevel 0
で変数展開無く判定できる。

ちなみにディレクトリの有無は
if not exist "%%~1\nul"
とかやればわかる。
266デフォルトの名無しさん:2010/11/02(火) 12:27:13
ちと間違えた
if not errorlevel 0 はerrorlevel 0 の時の判定
>>264の場合は if errorlevel 1 だわな。
267デフォルトの名無しさん:2010/11/02(火) 14:54:40
if ERRORLEVEL==1 (
でいいよ
268デフォルトの名無しさん:2010/11/02(火) 14:57:00
cd /d "%%~A" || (
だろ
269デフォルトの名無しさん:2010/11/02(火) 15:53:20
そもそもディレクトリ変更する必要はあるんかいな?
ディレクトリ変更が必要ならいいが、単にディレクトリの有無を調べるだけで
元のディレクトリに戻すとかいうんなら無駄もいいとこだが。
270261:2010/11/02(火) 16:05:54
俺はちゃんとした回答にカウントされないのか……

と思ったがよく見ると使われてないや
スルーされた事には違いないけど
271デフォルトの名無しさん:2010/11/02(火) 16:18:20
>>270
260-261はそこで終わってるだろ。

質問者がレス返してないだけで。
272261:2010/11/02(火) 16:41:10
え、この流れで別人???

半年ROMっとく
273デフォルトの名無しさん:2010/11/02(火) 17:36:14
半年と言わずずっとでもいいよ
forじゃわからんだろせめてfor /fと言ってやれよ
274デフォルトの名無しさん:2010/11/02(火) 21:14:45
powershell_iseみたいなcmd_iseはないのか
275デフォルトの名無しさん:2010/11/04(木) 12:38:11
バッチにドラッグアンドドロップしたファイルがダブルクオーテーションに
囲まれるかどうかは、ファイル名に半角スペースが入っていれば全て囲まれると
考えていたんですが、違うんでしょうか?

問題となっているファイルはD&Dで問題が出ないようにあらかじめファイル名に
半角スペースを入れる対策をしてあるものなんですが、なぜかどうやってもD&D時に
""で囲まれないという状態になっています。

不思議なのが同じファイル名で別の場所に作った別ファイルは問題なく""で囲まれるのに
該当ファイルはどんなファイル名にリネームしようが、別名のハードリンクを作ろうが、
複数選択でドロップしようが、ずっと""で囲まれないという事態になっています。

該当ファイル実体を別名でコピーしたり、別HDDにコピーしたりした場合はOKでした。

何かファイルシステム上の問題でもあるんでしょうか?
同様の経験をした方はおられないでしょうか?

当環境はWin7x64 ファイルシステムはNTFSです。
276デフォルトの名無しさん:2010/11/04(木) 13:29:07
同様の経験をしました
277デフォルトの名無しさん:2010/11/04(木) 16:15:56
VBSのドロップするとどうなんだ?
278デフォルトの名無しさん:2010/11/04(木) 16:25:41
半角空白じゃねーんじゃねーの
279デフォルトの名無しさん:2010/11/05(金) 04:04:51
>>275
半角空白が含まれていればダブルクォーテーションがつくけど、そうじゃない場合はつかない。
問題が起こるのは、半角空白がなくて全角空白がある場合。

一旦引数を一つの変数にまとめて切り出すといいらしい。具体的にどうなってるのか理解してないんだけど。
>>17



それより、abc01.flv を漢字01.flvにリネームするのが、ワイルドカードだとうまくいかないので、
for /L で自分で数値を与えてやるとうまく出来た。
"01"とかの"0"は文字で与えてやればいいだろう。
今までバッチファイル編集とかやってたよ。
>for /l %I in (1,1,9) do ren G_SEED_0%I.flv 種物語0%I.flv
280デフォルトの名無しさん:2010/11/05(金) 04:46:02
ren abc* 漢字0*
281デフォルトの名無しさん:2010/11/05(金) 10:43:06
>>277
VBSでもダメです。

>>278-279
問題のファイルはPT2の出力TSファイルで、ファイル名に
番組名が入るのですが、これが不定で全角空白を含むことも
あるので [番組名] [日付-時間].ts といったようなフォーマットにして
一律半角空白を含めるようにしています。

これが今年の5月から7月中の一つの番組だけに問題の現象発生。
同時期の別の番組や同じ番組の7月以降だと問題なし。

同じファイルやハードリンクならば「aaa aaa.txt」 みたいにリネームして
:loop
echo %1
shift
if not "%~1"=="" goto :loop
といった引数だけ表示するバッチに落とした状態でも""では囲まれてはいない状況です。

%*を使うのはNG。元々複数選択してドロップするものなので他のファイルとの区切りが
なくなってしまいます。
282デフォルトの名無しさん:2010/11/05(金) 13:41:00
>>281
ああ、それは、半角スペースが前後の文字とくっついちゃったんだろうね。
文字コードによってはそういうこともある。
「日付-時間」じゃなくて「日付 時間」と言う風にしていればそういうことにはならなかっただろう。

> 元々複数選択してドロップするものなので
それをforループで分割処理するんだけど。
283デフォルトの名無しさん:2010/11/05(金) 15:13:43
>>282
それが、問題のファイルは
aaa aaa.txt
のような単純なファイル名にしてもNGだから困っているのです。
当然、問題のファイル実体以外でこんなファイル名なら""で囲まれます。

> それをforループで分割処理するんだけど。

a b.txt
c d.txt (問題のあるファイル)
e f.txt (問題のあるファイル)
g h.txt

これを複数選択してドロップすると
%* は
"a b.txt" c d.txt e f.txt "g h.txt"
となるんですが。どう分割するんですか?
284デフォルトの名無しさん:2010/11/05(金) 15:28:47
該当ファイルのファイル名とやらを晒してもらおうか
285デフォルトの名無しさん:2010/11/05(金) 15:32:15
attrib 変なファイル
icacls 変なファイル
などで他のファイルを見比べて違いはないのか?
286デフォルトの名無しさん:2010/11/05(金) 15:45:21
>>285
凄い。どうも当たりのようです。

問題の無いファイルは

hoge.ts BUILTIN\Administrators:(F)

 NT AUTHORITY\SYSTEM:(F)

 BUILTIN\Administrators:(F)

 BUILTIN\Users:(RX)

という結果だったのですが
問題のあるファイルは軒並み

fuga.ts BUILTIN\Administrators:(F)

 NT AUTHORITY\SYSTEM:(F)

 (F)

 BUILTIN\Users:(RX)

という結果になっていました。
これが何を意味するのかはよくわからないんですが…
287デフォルトの名無しさん:2010/11/05(金) 15:57:31
そこは『 icacls アクセス権 』あたりでググろうよw
288デフォルトの名無しさん:2010/11/05(金) 16:10:25
今気付きましたが
問題のファイルを作った時のOSはXPだったかもしれないです。

セキュリティタブを見たら不明なアカウントがユーザー名の中に…
そういえば7月前後にOS入れ替えたはず…

>>287
勿論調べてますけど、というか簡単な知識はありますけど
ACL関係深入りするとわけわかめなんでorz
下手にいじると後が怖い。

今アクセス許可の部分、他のファイルと見比べてますが
XPの時のアカウントらしきSIDがある以外は特に何も無く、そのユーザーが所有者になっていました。
XPのユーザーを削除して所有権を取得しても、問題は直っていない…と。
289デフォルトの名無しさん:2010/11/05(金) 16:43:12
>>288
こりゃ失敬。

290デフォルトの名無しさん:2010/11/05(金) 20:12:59
コピーして削除
291デフォルトの名無しさん:2010/11/06(土) 18:47:56
>>288
特にacl を指定していなかったなら

takeown /f <file>
して
icacls <file> /reset
でいいとおもう

OS 入れなおす度 ドライブ全体にやってるorz
292デフォルトの名無しさん:2010/11/06(土) 20:04:06
mandatory levelは/resetで取れんのかね
293デフォルトの名無しさん:2010/11/07(日) 07:21:18
>>240の問題だけど、同じような状況でConsole2というソフトで表示いけたよ
FontLinkはやってないはず

Console | Download Console software for free at SourceForge.net
http://sourceforge.net/projects/console/


もしできないならヘルプの"Language settings"に書いてある方法でいける。

ただし、肝心の日本語入力はできないw
IM起動すると操作できなくなる
表示やコピペや日本語の補完は問題ないのでIMが考慮されていないだけだとは思う

念のためPowerShellも試したけど同様だったよ
294デフォルトの名無しさん:2010/11/09(火) 23:11:00
for /f "usebackq" %i in (`コマンド`)

の逆引用符内でスペースを含むパスを使用する方法を教えて下さい。
変数化したりいろいろ試しているのですがうまくいきません。
295デフォルトの名無しさん:2010/11/09(火) 23:27:27
for /f "usebackq" %i in (`"コ マ ン ド "`)
for /f "usebackq" %i in (`コ^ マ^ ン^ ド`)
296デフォルトの名無しさん:2010/11/09(火) 23:28:24
for /f "usebackq" %i in (`コ^^ マ^^ ン^^ ド`)

297デフォルトの名無しさん:2010/11/09(火) 23:35:05
>>296
>'C:\Program' は、内部コマンドまたは外部コマンド、
>操作可能なプログラムまたはバッチ ファイルとして認識されていません。

どっちをやってもダメです
298デフォルトの名無しさん:2010/11/09(火) 23:37:23
for /f "usebackq" %i in (`""コ マ ン ド ""`)
299デフォルトの名無しさん:2010/11/09(火) 23:38:53
for /f "usebackq" %i in (`コ^^^ マ^^^ ン^^^ ド`)
300デフォルトの名無しさん:2010/11/09(火) 23:43:03
>>298
それもダメでした。
後出しになりますが標準エラー出力をパイプしてるので→2^>^&1 1^>nul ^|
その辺の問題かfindコマンドの二重引用符の問題かも知れません。
301デフォルトの名無しさん:2010/11/09(火) 23:45:49
後出しですがこのコマンドです。
for /f "usebackq tokens=2-4 delims=:. " %i in (`C:\Program^^ Files\MediaCoder\codecs\ffmpeg.exe -i hoge.avi 2^>^&1 1^>nul ^| find ^"Duration:^"`) do @echo %i:%j:%k
302デフォルトの名無しさん:2010/11/09(火) 23:48:47
後出しすんな
for /f "usebackq tokens=2-4 delims=:. " %i in (`""C:\Program Files\MediaCoder\codecs\ffmpeg.exe" -i hoge.avi 2>&1 1>nul | find "Duration:""`) do @echo %i:%j:%k
303デフォルトの名無しさん:2010/11/09(火) 23:50:31
できました!ありがとうございます!
304デフォルトの名無しさん:2010/11/09(火) 23:55:04
解説してやるとin()は、cmd /c ''の中身 で実行される そのとき最外側の""は
cmd/?
2. 最初の文字が引用符であるにも関わらず上の条件に一致しない場合は、最初
の引用符とコマンド ラインの最後の引用符が削除され、最後の引用符の後
のテキストが有効になります。
305デフォルトの名無しさん:2010/11/10(水) 00:03:33
/C または /K が指定されている場合、スイッチの後の残りのコマンド ラインがコマ
ンド ラインとして処理されます。次のルールが引用符 (") の処理に使われます:

1. 次のすべての条件に一致する場合、コマンド ラインの引用符が有効になり
ます:

- /S スイッチがない
- 引用符が 1 組ある
- 引用符の中に特殊文字がない
(特殊文字は &<>()@^| です)
- 引用符の中に 1 つ以上のスペースがある
- 引用符の中の文字列が、実行可能ファイルの名前である

2. 最初の文字が引用符であるにも関わらず上の条件に一致しない場合は、最初
の引用符とコマンド ラインの最後の引用符が削除され、最後の引用符のあ
とのテキストが有効になります。

これっすね。
読んでみます。
306デフォルトの名無しさん:2010/11/10(水) 00:12:23
>>302
コマンドプロンプトに貼り付ければ動くのですが、まっさらなバッチにこの一行だけ記入しても、
>\Program の使い方が誤っています。
と出ます。

何故なんでしょうか?
307デフォルトの名無しさん:2010/11/10(水) 00:13:58
すいませんageます。
308デフォルトの名無しさん:2010/11/10(水) 00:14:24
%%i
309デフォルトの名無しさん:2010/11/10(水) 00:15:46
>>306
ちなみにhoge.aviのあるディレクトリで実行してます。
310デフォルトの名無しさん:2010/11/10(水) 00:16:28
>>308
失礼しました。
311デフォルトの名無しさん:2010/11/10(水) 01:27:09
batの勉強中の者です。
繰り返し処理の件で聞きたいことがあります。
いまいち、for文の書き方がわかってないので、
お手数ですが、教えてください。

【やりたいこと】
(1)任意に数をインプットする。
(2)ディレクトリにあるtxtファイルを(1)で入力した数から連番になるようにリネームしたい。
 →例えばディレクトリにtxtファイルがa.txt、b.txt、c.txtが3個あったとし、
  (1)で入力したのが3ならば、a.txt=3.txt、b.txt=4.txt、c.txt=5.txtとなるようにしたい。

【困っていること】
(1)の任意の数を入力する処理は完了。
(2)のfor文を使って、ディレクトリにあるtxtの文だけリネームする構文が書けない。
 →ワイルドカードのところが、変数Rでリネームされ、txtの数だけ、R+1ずつされて繰り返していきたいのだが…

@echo off
rem 変数の入力
rem 変数Rは繰り返し用の変数として用意
set /p UserInput=Enter a number:
set /a R=UserInput

rem ファイルをリネーム
for %%R in (*) do *.txt R.txt
goto :eof
312デフォルトの名無しさん:2010/11/10(水) 01:51:47
for /f %%S in ('dir /b *.txt') do (
call ren %%S %%R%%.txt
set / R+=1
)
313デフォルトの名無しさん:2010/11/10(水) 02:38:43
>>312
>>311でrenが抜けてました、すいません。
試しに、上記構文をfor文以下をコピペし動かしてみたんですが、
ファイルが一個しかリネームされません…

あと質問がいくつかあります。
教えてちゃんですいませんが、
回答してもらえたら幸いです。

@Sという変数が出てきていますが、これはforで繰り返す為の
「カウンタ」として機能させるための変数という認識でいいでしょうか?
違うとしたらSの変数って一体なんですか?

Ainの('dir /b *.txt')ですが、dirコマンドでディレクトリの中身一覧を
 作成する必要はあるんでしょうか?
 また、/bのオプションの意味がぐぐってみたんですが、よくわかりません。
 (※検索ワードは"bat /b 意味")

Bcallがありますが、呼び出す為の構文がどれなのかよくわかりません。
 "ren %%S %%R%%.txt"を呼び出している?
 callは外部にあるbatやsub:を読みだすイメージがあるんですが…
314デフォルトの名無しさん:2010/11/10(水) 03:23:21

>@
そうだよ
だから繰り返しの変数とかわざわざ宣言する必要もないから
set /p R=Enter a number:
でいい


>A
'dir /b *.txt'
これでそのフォルダ内に別の拡張子のファイルが混ざってても対応できる
フォルダ内が全てテキストファイルなら(*)でも問題ないはず
/bはファイル名だけ取得する。これでフォルダ内のテキストファイルを全て取得できる

>B
callはあるコマンドを使って制御が戻らなくなるのを阻止する為に使う

けど初心者で実際にコマンド走らせてない俺は312がどんな意図を持ってcallを使ったかわからん。
renって制御戻ってこないっけ?
誰か上級者の人答えておくれ
315デフォルトの名無しさん:2010/11/10(水) 03:33:03
0 set /a R+=1 aが抜けてた


1 Sはfor変数

2 リカージョン防止 ren後のファイル名がin (*)の中に入らぬように先にdirですべて取り出す

3 %R% の遅延展開 CALL %%R%%
316デフォルトの名無しさん:2010/11/11(木) 19:17:32
c:\bat
にパスが通った状態で、呼び出し頻度のちょっと低いスクリプトを
c:\bat\xxx
に置いて
xxx\yyy.bat
みたいに呼び出したいんだけどそう言うのは無理なのかな。
指定されたパスが見つかりません。になってしまう。
317デフォルトの名無しさん:2010/11/11(木) 20:13:19
ファイル名にパスが含まれていなかった場合、Windows は次の順序で実行可能ファイルを検索します。

1.アプリケーションのロードに使ったディレクトリ(アプリケーションの実行可能ファイルと同じディレクトリ)

2.親プロセスのカレントディレクトリ

3.Windows 95/98:Windows のシステムディレクトリ。このディレクトリのパスは、 関数で取得できます。

Windows NT/2000:32 ビットの Windows システムディレクトリ。このディレクトリのパスは、GetSystemDirectory 関数で取得できます。このディレクトリの既定の名前は、SYSTEM32 です。

4.Windows NT/2000:16 ビットの Windows システムディレクトリ。このディレクトリのパスを取得する Win32 関数はありませんが、SearchPath 関数の検索対象になります。このディレクトリの既定の名前は、SYSTEM です。

5.Windows ディレクトリ。このディレクトリのパスは、 関数で取得できます。

6.環境変数 PATH に記述されている各ディレクトリ

7.Windows 95/98:32 ビットの Windows システムディレクトリ。このディレクトリのパスは、GetSystemDirectory 関数で取得できます。このディレクトリの既定の名前は、SYSTEM32 です。

318デフォルトの名無しさん:2010/11/12(金) 11:17:55
で?
319デフォルトの名無しさん:2010/11/12(金) 16:05:55
何?
320デフォルトの名無しさん:2010/11/12(金) 16:12:58
so what?
321デフォルトの名無しさん:2010/11/12(金) 16:45:04
The string can specify the full path and file name of the module to execute or it can specify a partial name.
In the case of a partial name, the function uses the current drive and current directory to complete the specification.
The function will not use the search path.
322デフォルトの名無しさん:2010/11/12(金) 17:40:24
I see, thanks a lot.
323デフォルトの名無しさん:2010/11/12(金) 17:45:22
집이 어디예요?
324デフォルトの名無しさん:2010/11/12(金) 19:13:54
あたまの悪そうなあなたへ

c:\bat\xxx.cmd

@echo off
c:\bat\xxx\%*

を作れば
xxx\yyy.bat
じゃなく
xxx yyy.bat
で実行できるよ
325デフォルトの名無しさん:2010/11/12(金) 19:52:45
xxx yyy.bat
とかじゃなく
xxx\yyy.bat
ではできないんですか?
326デフォルトの名無しさん:2010/11/12(金) 21:58:06
>>324
質問者の意図を全然読み取れない良くない頭を持っていることはよくわかった
327デフォルトの名無しさん:2010/11/12(金) 22:26:14
これまたずいぶんと頭の悪そうな文章だな
328デフォルトの名無しさん:2010/11/12(金) 22:40:19
xxx¥yyy.bat ならできるな

329デフォルトの名無しさん:2010/11/12(金) 23:46:57
xxx¥yyy.bat
とかじゃなく
xxx\yyy.bat
ではできないんですか?
330デフォルトの名無しさん:2010/11/13(土) 00:38:52
append.exe
331デフォルトの名無しさん:2010/11/13(土) 02:46:58
run xxx\yyy.bat
はできる。
run yyy.bat
もできる。
xxx yyy.bat
もできる。
332デフォルトの名無しさん:2010/11/13(土) 03:47:07
>>331
質問者の意図を全然読み取れない良くない頭を持っていることはよくわかった
333デフォルトの名無しさん:2010/11/13(土) 04:10:06
質問者の意図は、できることはやりたくない。できないことをやりたい。だろ?
334デフォルトの名無しさん:2010/11/13(土) 04:51:31
c:\bat\xxxなんか作らずc:\batに入れとけボケ
335デフォルトの名無しさん:2010/11/13(土) 15:59:35
  xxx\yyy.bat ならできるぞ
336デフォルトの名無しさん:2010/11/13(土) 18:10:23
現ディレクトリ配下にあればな
337デフォルトの名無しさん:2010/11/13(土) 19:24:32
あれ?
64bit の append.exe が無い。
338デフォルトの名無しさん:2010/11/13(土) 21:18:08
>>335
" .cmd"のつもりだろうができないよ
339デフォルトの名無しさん:2010/11/14(日) 19:32:18
■バッチ文
1 @echo off
2 SET TERM1=PC1
3 SET TERM2=PC2
4 SET TERM3=PC3
5 for %%A in (^
6 %TERM1% ^
7 %TERM2% ^
8 %TERM3%)^
9 do ^
10 echo %%A データ転送

■実行結果
PC1 データ転送
PC2 データ転送
PC3 データ転送


よろしくお願いします。
上記のバッチ文をfor文を見やすくするために8行目を
8-1 %TERM3%^
8-2 )^
に分離して実行したいですが、分離するとうまく実行されません。

キャレットは途中改行でのエスケープだと認識してますが
何か文字を付け足したりしないといけなかったりするのでしょうか。
340デフォルトの名無しさん:2010/11/14(日) 20:22:24
>>339
> 8-1 %TERM3%^
> 8-2 )^

8-2 [space or tab])^

なら行く。理由は知らん。
341デフォルトの名無しさん:2010/11/14(日) 20:42:34
5 for %%A in (
6 %TERM1%
7 %TERM2%
8 %TERM3%
) ^
でいいんじゃないか?ためしてないけど
()内で^は不要
)^
do
だと)doで) doにならん
342デフォルトの名無しさん:2010/11/14(日) 21:06:10
>>341
> だと)doで) doにならん

そっちは元々くっついてても問題ない
343デフォルトの名無しさん:2010/11/14(日) 23:06:39
>>340
ありがとうございます。
>>339 の)の前にスペース置いて以下のように変更して対応しようと思います。

■変更後
5-- for %%A in (^
6-- %TERM1%△^
7-- %TERM2%△^
8-1 %TERM3%△^
8-2 △)^
9-- do ^
10- echo %%A データ転送

※()内の△は半角スペース

原因ははっきりとはわからないのですが、
前の行末の^ が次の行始の) にエスケープでもかけているのですかね
344デフォルトの名無しさん:2010/11/14(日) 23:39:36
yes
345デフォルトの名無しさん:2010/11/15(月) 15:57:15
超初心者スレから誘導されてきました…お手柔らかにお願いします

バッチファイルを作っているのですが
あるディレクトリ内(サブディレクトリ含む)の再生時間○秒以下の動画ファイルを削除する
といったものを作るには、どう書いたらいいでしょうか?

というか動画ファイルなどの再生時間を取得することってできるんでしょうか?
○バイト以下、とかだったら出来ると思うんですが…
よろしくお願いします
346デフォルトの名無しさん:2010/11/15(月) 16:06:10
できません
347デフォルトの名無しさん:2010/11/15(月) 16:16:09
>>345
>>1の※
348デフォルトの名無しさん:2010/11/15(月) 16:29:49
>>345
バッチ単独では無理。

mediainfoとか使えば取れる
349デフォルトの名無しさん:2010/11/15(月) 16:30:10
>>346-+347
ありがとうございます!
先は長い…
350デフォルトの名無しさん:2010/11/15(月) 17:05:04
俺は無視か…
351デフォルトの名無しさん:2010/11/15(月) 17:12:39
もし>>350が>348だったらそっとハンカチを差し出してあげたい

mediainfo --Inform='General;%Duration%' とかすれば
ミリ秒単位で取れるみたいだね
352デフォルトの名無しさん:2010/11/24(水) 19:57:53
引数にURLを受け取りたいのですが、「=」などの記号もそのまま受け取るにはどうすればいいでしょうか?
353デフォルトの名無しさん:2010/11/24(水) 20:11:21
%2E
354デフォルトの名無しさん:2010/11/24(水) 22:21:36
" = "
355デフォルトの名無しさん:2010/11/25(木) 02:28:12
chr(61)
356デフォルトの名無しさん:2010/11/25(木) 08:34:41
"%~1"
357デフォルトの名無しさん:2010/11/25(木) 22:06:06
みなさんありがとう
358デフォルトの名無しさん:2010/11/26(金) 12:49:05
%1にc:\test.lnkが入っているとして
そのリンク先を展開するのってどうやればいいですか。
359デフォルトの名無しさん:2010/11/26(金) 13:06:21
batだけではムリ
wshならできる
360デフォルトの名無しさん:2010/11/26(金) 13:09:13
wshのtargetpath取得するしかないな
361デフォルトの名無しさん:2010/11/26(金) 16:00:40
for /f "usebackq delims=" %%i in(%1) do echo %%i
362デフォルトの名無しさん:2010/11/26(金) 16:48:22
for /f "delims=" %%i in('more %1') do echo %%i

363デフォルトの名無しさん:2010/11/27(土) 15:42:17
for /f "delims=" %%i in('find "\" %1') do echo %%i
364デフォルトの名無しさん:2010/11/27(土) 18:22:55
>>361-363
何がしたいの?

>>358に対するレスってわけでもないだろうけど。
365デフォルトの名無しさん:2010/11/27(土) 18:25:43
あほは放置で
366デフォルトの名無しさん:2010/11/27(土) 18:47:43
for /f "eol=\ delims=" %%i in('find "\" %1') do echo %%i
367デフォルトの名無しさん:2010/11/27(土) 22:28:45
for /f "skip=1 eol=\ delims=" %%i in ('find "\" "%~1"') do echo %%i
368デフォルトの名無しさん:2010/11/29(月) 13:41:19
動かんスクリプト書いて恥を晒すのって楽しいのかな
369デフォルトの名無しさん:2010/11/29(月) 16:24:19
for /f "delims=" %%i in ('shortcut.exe -u d "%~1"') do echo %%i
370デフォルトの名無しさん:2010/11/29(月) 18:06:22
>>368
いや他力本願デバッグだろw
371デフォルトの名無しさん:2010/11/30(火) 15:05:00
.bat を右クリ編集した時のエディタって変更できないの?
メモ帳トラッパーみたいなのじゃなくて。
372デフォルトの名無しさん:2010/11/30(火) 15:16:32
HKEY_CLASSES_ROOT\batfile\shell\edit\command
373デフォルトの名無しさん:2010/11/30(火) 15:23:30
おーサンクス。
Explorerからできないというだけで設定自体は普通にあるのか。
374デフォルトの名無しさん:2010/11/30(火) 17:43:57
関連付けで最小化やカレントディレクトリが指定できないのか。
375デフォルトの名無しさん:2010/11/30(火) 23:51:51
WindowStyle
CurrentDirectory
376デフォルトの名無しさん:2010/12/03(金) 14:13:48
ちょっと大げさな気もするけど便利かも?
Rapid Environment Editor ? About
http://www.rapidee.com/en/about
377デフォルトの名無しさん:2010/12/04(土) 01:15:33
echo %date%>>a.txt
とした時に書き込まれた時に改行をしない
もしくは、前の行の改行を削除してから書き込むことは出来ないでしょうか?

イメージとして
12/01 12/02 12/03
のように横一列に吐いてくようなかんじに
378デフォルトの名無しさん:2010/12/04(土) 01:31:42
単純な方法では無理。

やろうと思えば出来なくもないが・・・
最後の行以外を別ファイルに書き込んで
最後の行に目的文を追加してから書き込んだ後リネームとかw
379デフォルトの名無しさん:2010/12/04(土) 03:45:38
echo -n
380デフォルトの名無しさん:2010/12/04(土) 08:01:34
>>379
スレチ
381デフォルトの名無しさん:2010/12/04(土) 15:28:57
echo.exe を作ればいいんでね?
382デフォルトの名無しさん:2010/12/04(土) 15:35:37
>>377-378
(set /p x=%date%)<nul >>a.txt
383デフォルトの名無しさん:2010/12/04(土) 15:50:03
おお凄い。
384デフォルトの名無しさん:2010/12/04(土) 17:34:16
なんと複雑な
385デフォルトの名無しさん:2010/12/04(土) 18:17:30
>>382
括弧は要らんのじゃね?
386デフォルトの名無しさん:2010/12/04(土) 18:34:53
ロケールの日付形式によっては必要だけど
空白入れるなら要らない
set /p x=%date% <nul >>a.txt
387デフォルトの名無しさん:2010/12/04(土) 18:41:21
set /p x=2010 Dec 1<nul
388デフォルトの名無しさん:2010/12/04(土) 20:04:47
おー、すげー
nulってやると改行されないってこと?
389デフォルトの名無しさん:2010/12/04(土) 21:15:13
nulはnl(new line)の否定
390デフォルトの名無しさん:2010/12/04(土) 21:37:42
>>386
いや形式に寄らず要らんと思うけど。

dateどころかプロンプトに表示する文字列が何であっても要らないんじゃない?

その空白はファイルに出るだけじゃん。
文字列の最後が空白になるだけの話で、コマンドそのものは空白不要。
391デフォルトの名無しさん:2010/12/04(土) 21:38:22
>>388
set /?
392デフォルトの名無しさん:2010/12/04(土) 22:06:10
>>390
>>387を試してから言えよ
393デフォルトの名無しさん:2010/12/04(土) 22:08:52
あれ、拡張子だけ変更するのってどうするんだっけ?
test.txt
%1に
394デフォルトの名無しさん:2010/12/04(土) 22:09:57
ren test.txt test.boke
395デフォルトの名無しさん:2010/12/04(土) 22:37:38
サンキュー、できました。
396デフォルトの名無しさん:2010/12/05(日) 01:13:15
ren test.txt test.%1
397デフォルトの名無しさん:2010/12/05(日) 03:28:45
%*で渡された文字列を全部""で囲いたいのですが、
"%*"とすると、引数が"fuga hoge"のようにすでにダブルクオーテーションで囲まれている場合に、
""fuga hoge""と二重になりアプリによってはエラーを起こしてしまいます。

上手く引数をまとめて渡す方法はないものでしょうか?

例えばこんな感じで書いた場合です。

(%*) && growlnotify.com "%*"
398デフォルトの名無しさん:2010/12/05(日) 03:56:58
399デフォルトの名無しさん:2010/12/05(日) 15:22:41
"%~*"
400デフォルトの名無しさん:2010/12/05(日) 15:39:15
(%*) && growlnotify.com "%~1" "%~2" "%~3" "%~4" "%~5" "%~6" "%~7" "%~8" "%~9"
401デフォルトの名無しさん:2010/12/05(日) 21:18:45
ありがとうございます!

>>399
%~*だと

> バッチ パラメータの置き換えで、パス演算子の次の使用法は無効です:
といわれました(´・ω・`)

CALL /?したら
> 上の例の %1 と PATH は、他の有効な値で置き換えることができ
> ます。%~ 構文は有効な引数の数によって区切られます。%~ 修飾子
> は %* と同時には使用できません。

・・・(´・ω・`)

>>400
上手く行かず調べていたのですが、ソフト側が複数の引数を受け付けないみたいでした。

"%~1 %~2 %~3 %~4 %~5 %~6 %~7 %~8 %~9" みたいにもしたのですが、そうすると余白が余分についてしまいます。
あとは、上記のものをsedでもかけて空白取り除くとか、
>>398 の手もあるのですが、そこまでやるならbatファイルでないほうが楽なので、他のスクリプトを試してみます。
402デフォルトの名無しさん:2010/12/06(月) 00:06:52
set x=%*
growlnotify.com "%x:"=%"
403デフォルトの名無しさん:2010/12/06(月) 18:14:45
set all=%*
if defined all if not ^%all:~0,1%==^" set all="%all%
if defined all if not ^%all:~-1,1%==^" set all=%all%"
404デフォルトの名無しさん:2010/12/07(火) 20:50:25
set x=
:for
shift /0
set y=%0
if defined y goto :next
set x=%x% "%~0"
goto :for
:next
echo %x%
405デフォルトの名無しさん:2010/12/09(木) 00:30:42
複数のテキストファイルがあって、それぞれのテキストファイルの最終行のみ、
別途、1ファイルにコピーするのってどうすればいいでしょうか?
406405:2010/12/09(木) 00:32:46
別途1ファイルというのは、1ファイルにつき、1ファイルということです

1.txt
2.txt
3.txt

↑があったとして、最終行のみを
↓のようなファイルで保存したいです

1.txt.after
2.txt.after
3.txt.after


407デフォルトの名無しさん:2010/12/09(木) 01:42:23
標準コマンドのみって縛りがないならtailコマンドを
どっかから拾ってくるのが手っ取り早いんじゃないかな
408デフォルトの名無しさん:2010/12/09(木) 03:45:54
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for %%I in (*.txt) do for /F %%J in ('type "%%~I"^|find /c /v ""') do (
set /a a=%%J-1
more "%%~I" +!a!>"%%~I".after )
409デフォルトの名無しさん:2010/12/09(木) 09:09:50
for %%I in (*.txt) do for "usebackq delims=" /F %%J in ("%%~I") do echo,%%J>"%%~I.after"
410デフォルトの名無しさん:2010/12/09(木) 14:53:32
一々ファイルアクセスしてると凄く遅くなりそうなイメージあるけど
実際どうなんだろ。
411デフォルトの名無しさん:2010/12/09(木) 14:59:01
ちゃんとしたプログラムが必要な時はバッチなんか使わないからどうでもいい。
412デフォルトの名無しさん:2010/12/09(木) 17:33:07
for %%I in (*.txt) do (
set x=
for "usebackq delims=" /F %%J in ("%%~I") do set x=%%J
call echo,%%x%%>"%%~I.after"
)

413デフォルトの名無しさん:2010/12/09(木) 21:58:30
avi(huffyuv2.1.1)の入ったフォルダごとx264で変換するwindows用bat
なんですが、いかがでしょう?
http://hibari.2ch.net/test/read.cgi/avi/1288510853/318-321
で少し頂いたんですが。
414デフォルトの名無しさん:2010/12/09(木) 22:11:24

x264は[email protected] High4.0 Veryslow crf18 SAR4:3 --qcomp 0.7 --ref 3

できれば、音声をNeroAACで品質固定(最高)設定でエンコして、mp4boxで自動MUX
できるといい。
415デフォルトの名無しさん:2010/12/09(木) 22:19:47
誘導した奴じゃないが…

aviから音声をneroaacencってどうやるんだっけ?
avi2wavとかそんなツールあったっけ?

最近TSからMP4作るのしかやってないからわかんねえ。

バッチでやるって言っても、結局一々手作業で入力してたコマンド群を
ファイルリスト使ってループで回すってだけだから
手動実行してるコマンドがどんなものかってのが無ければわからんぜ。

動画エンコに詳しい、かつバッチにも詳しいって奴ばかりじゃねーから。
416デフォルトの名無しさん:2010/12/09(木) 23:39:04
>>414
とりあえず現状、手動でどうやってるか晒しておくれ。
417デフォルトの名無しさん:2010/12/09(木) 23:44:13
957 :名無しさん@編集中:2010/12/09(木) 13:43:33 ID:zTGKAWby(2)
携帯動画変換君でAVI→1440x1080p@29.97f(High/4.0/crf18 --qcomp 0.7 --ref 3)
のエンコってできそうですか?
418デフォルトの名無しさん:2010/12/10(金) 01:15:14
aviって何でも入るから
逆に言えば何が入ってるか分からないよな

ツールなら判別できるけど
バッチにどうやってその情報を渡すのか…
419デフォルトの名無しさん:2010/12/10(金) 08:08:50
>>417
現状、コマンドをタイプしてエンコードしていないってこと?
それはちょっとアドバイスできないなぁ・・・
むしろ各種コマンドの使い方が分かっていれば、>>413のバッチに書き加えていくことで連続エンコードできるはずだよ。

ところで携帯動画変換君って、ffmpeg一本じゃなかったかな?
独立のx264は使っていなかった気がするんだけど。
420デフォルトの名無しさん:2010/12/10(金) 11:35:11
>>416
手動(コマンドプロンプト)はNeroAACしか使ったことないんです。
以前はTXP4で可逆のHuffyuv2.1.1+無圧縮音声のAVIで出して
MediaCoder0.7.3.4616でx264+NeroAACエンコできてました。
ただ、そのVerは何故かVerySlowだと失敗する。
最近のMediaCoderは何故かフレーム数が減る。
現状はTXP4+x264vfw&TXP内蔵MainConceptAAC512k→mp4boxでMUX。
HandbrakeはFAACの160kまでなのでNG(x264はコマンド追加できるっぽい)
XMediaRecodeはHuffyuvだとハングするし音声はFAACの品質500は設定できる
けどNeroの品質固定最高で実質320k以上で出したい。

1つ設定しといて、D&Dで放り込んで、ボタン押すだけみたいな使い方のできる
ソフトが完成形になってればいいんだけど。
aviの中身判別させてx264に渡して且つx264自体はHUFFYUVはデコードできない?
bat無理っぽいなぁ。
421デフォルトの名無しさん:2010/12/10(金) 12:42:33
手動と同じことを自動可するだけだから、手動で無理なことはバッチにも無理
422デフォルトの名無しさん:2010/12/10(金) 12:46:01
>>420
aviの中身を判別って、どこまでやりたいか知らないけど、
とりあえずHuffyuv自体は、デコードにAvisynthを噛ませばできそうかな。
バッチファイルでAvisynthスクリプトを出力して、それをx264で読ませればいいと思う。
音声は、avs2wavまたはffmpeg→neroAacEncで。
(avs2wavは日本語ファイル名だとか、ちょっとしたことで落ちるからffmpegがいいかも)

@echo off
for %%i in (*.avi) do call :encode "%%i"
pause
exit /b

:encode
set MP4=%~dpn1.mp4
set AVS=%~dpn1.avs
set WAV=%~dpn1.wav
set AAC=%~dpn1.aac
echo AVISource(%1)>"%AVS%"
echo ConvertToYV12()>>"%AVS%"
x264 --thread-input --progress --crf 18 -o "%MP4%" "%AVS%"
ffmpeg -y -i "%AVS%" -vn "%WAV%"
neroAacEnc -if "%WAV%" -of "%AAC%"
mp4box "%MP4%" -add "%AAC%"
exit /b

エンコパラメータは最低限なので、自分で考えてね。
ちなみに120fpsのことは考えてないので、あしからず。
423デフォルトの名無しさん:2010/12/10(金) 13:21:24
いや、携帯動画変換君のスレにも質問してるただのマルチだから
424デフォルトの名無しさん:2010/12/10(金) 14:07:16
>>422
多分そのバッチ使うと音ズレると思うんだわ。
こういうのはコマンド上で書くのは簡単なんだけどな。

自分で試行錯誤できないマルチ君にバッチ例まで書いてやることは無いよ。
大抵無駄になるし、レスしても多分見てないぜ。
425422:2010/12/10(金) 14:15:05
了解。
426デフォルトの名無しさん:2010/12/10(金) 23:56:31
tsMuxeRのGUIとかBonTsDemuxとかって
どうやって音ズレの秒数拾ってんのかなあ
MediaInfoのディレイとも微妙に違ってるし

それが分かれば
自分用の自動化バッチが組めるんだが…
427デフォルトの名無しさん:2010/12/12(日) 22:49:06
初心者に分かりやすいサイトありませんか
428デフォルトの名無しさん:2010/12/12(日) 22:50:59
429デフォルトの名無しさん:2010/12/13(月) 15:30:59
自演乙
430デフォルトの名無しさん:2010/12/13(月) 16:09:02
>>429
428だけど、ちげーよwww
こういう時はぐぐれとだけ言えばいいのか?
431デフォルトの名無しさん:2010/12/14(火) 22:26:53
432デフォルトの名無しさん:2010/12/14(火) 22:39:54
>>431
ありがとう
なるほど……
今度からそれやってみるわ
少しぐぐれば分かることきいてる人には回答しないのが一番かな
433デフォルトの名無しさん:2010/12/14(火) 22:52:45
一番でないといけないんですか?
434デフォルトの名無しさん:2010/12/15(水) 06:22:58
>>431
その上のサイトの機能を下のサイトでやってほしいところだw
435デフォルトの名無しさん:2010/12/16(木) 20:30:47
3スレ目くらいからオマイラにお世話になってるんだが、
ちょっと愚痴らせてくれ…

以前、バッチだけで年月日の取得を組んだんだ…
月またがりと、うるう年判定、年末年始は取得しない、など。
そして、前日と翌日も取得するように作ったら、
100行くらいになってしまったのさ…

そしたら、今度は平日のみを算出するように言われてね…
XP以降、バッチに曜日がでないだろ?

途方に暮れて、しかたなくググってみたのさ。

そしたら、VBSでカンタンにできるじゃないか。
そしたら、たった5行で終わってしまった。

がんばってきたことが無駄だったのか、それともナニカの糧になったのか、
正直わからない。

こういうとき、おまいらはどう考える?

ちなみに、今は平日にプラスして、祝日判定も入れた上での
前日の平日を取得するものをVBSと組み合わせて作成中。
ちょっとつまり掛けてるが、ドウシヨウもなくなったらまた質問させて欲しい。
436デフォルトの名無しさん:2010/12/16(木) 20:34:04
VBSって昔、セキュリティ系のソフトに目の敵にされた覚えあるから正直微妙。
437デフォルトの名無しさん:2010/12/16(木) 21:08:37
そこまでbatにこだわる理由が知りたい
CやVBSで組んだほうがラクなのに、コンパイラなどを使ってはいけないという正当な理由があるの?
438デフォルトの名無しさん:2010/12/16(木) 21:33:57
>100行くらいになってしまったのさ…
間抜けだな
439デフォルトの名無しさん:2010/12/16(木) 22:25:23
愚痴りたい気持ちは分かるが
「新しい知識が身に付いた!」と喜ぶ方が
色々と幸せになれる気がする
440デフォルトの名無しさん:2010/12/17(金) 02:57:28
>>435
しかし色々考えるのって結構楽しいだろ
441デフォルトの名無しさん:2010/12/17(金) 03:44:01
>>439
Windowsでしか使えないバッドノウハウが増えてもちっとも嬉しくないんだが
442デフォルトの名無しさん:2010/12/17(金) 09:55:25
>>441
俺もそうだな。
Windowsでしか動かさなさそうで、batやwshの方が楽ならそっちでさっくり書く
ちょっと面倒だなというときは、LLスクリプトで書いたり
臨機応変に対応してる。

batだけにこだわるとAPIやスクリプトのライブラリ使ったら一瞬で終わることも、
下手するとえらく長くなることがあるからね

ちょっとした構文のど忘れが合った時もググるのが面倒なので、その場でスクリプトのワンライナー書いたりとか
ま、できさえすればいいのよ
batスクリプトだけにこだわるほど人生長くないぞw
443デフォルトの名無しさん:2010/12/17(金) 09:56:33
x >>441
o >>437

変にレスしてしまった
444デフォルトの名無しさん:2010/12/17(金) 10:09:36
バッチでがんばって文字列処理とかやってると泣けてくる
445デフォルトの名無しさん:2010/12/17(金) 16:01:34
バッチはコンソールが開くからやだ
cscript wscriptみたいにcmd wmdつくれよ
446デフォルトの名無しさん:2010/12/17(金) 16:10:44
進行度を知りたいがためにバッチ使ってる
447デフォルトの名無しさん:2010/12/17(金) 21:42:41
おまいらの優しさに元気が出てきたよ。

たしかにそんなに容量を食うことは間抜けではある。
しかし、考えてるときは正直楽しかったのも事実。

うし、元気でた。

バッチにこだわる理由としては
それ以外を禁止されたから。
先人がそれで新聞沙汰になるほどのミスをしたので、
バッチをなにも知らなかった自分にバッチだけで作れといわれてね。

まぁ、できたとたんクビになったが。
今は新天地で培ったものを駆使してる。

バッチ作製は自分が楽したいからが本音だが
それで作業時間かすごく減ったので、もっとがんばりたいと思う。

ちなみに、平日、祝日判定を取り込んだモノが40行くらいで今日できあがった。
祝日テーブル参照とかバッチ内でVBS書きだしとかしてるけど、無事動いた。
朝にレス読んで元気でて、ちょっとクールダウンしたらすらっと書けたのにビックリだ。

おまいらのおかげだ。ありがとう。
448デフォルトの名無しさん:2010/12/17(金) 21:46:12
新聞沙汰になるほどって興味あるw

バグのあるスクリプトを盛大に走らせちゃったとかかな?
449デフォルトの名無しさん:2010/12/17(金) 21:51:25
間違った請求書を印字して送っちゃった程度。100万人くらいに。
450デフォルトの名無しさん:2010/12/17(金) 22:08:50
×間違った請求書
○架空請求書
451デフォルトの名無しさん:2010/12/17(金) 22:08:53
テストしてなかったんかな?
452デフォルトの名無しさん:2010/12/17(金) 23:50:30
通り魔事件でナイフを規制する みたいな
453デフォルトの名無しさん:2010/12/18(土) 00:19:33
交通事故が起きるからで車廃止 とか
454デフォルトの名無しさん:2010/12/18(土) 00:20:50
通り魔wpどうにかしたいならナイフを規制してもそれ以外の手段でやるだけだから無意味
どう考えても道路を規制して誰も通れなくするのが正しい
455デフォルトの名無しさん:2010/12/18(土) 01:08:21
batだったらミスが起こらないという根拠や理屈や理論があるの?
456デフォルトの名無しさん:2010/12/18(土) 14:36:48
xpでlogin.bat
set myenv=1
と記述してログイン時に呼び出して全ユーザープロセスに反映させる方法ないですか。
システムの環境変数と同じ扱いにしたいです。

c:\autoexec.batに記述すればできたけどもうちょっと穏当にやりたいです。
457デフォルトの名無しさん:2010/12/18(土) 15:43:47
setx
458デフォルトの名無しさん:2010/12/18(土) 16:11:17
ImageMagickでpng画像からpsdファイルを作ろうとしましたが
できたpsdファイルを見るとレイヤーの透明部分がロックされてしまいます。
ロックされないで合成する方法かあるいは出来たpsdファイルのロックを
プロンプトの命令で外す方法がありますか?
↓自分がやった透明部分がロックされてしまうコマンド
convert henkan_mae.png henkan_go.psd
459デフォルトの名無しさん:2010/12/18(土) 17:30:48
スレ違い
460デフォルトの名無しさん:2010/12/18(土) 17:43:47
>>459
どこのスレに行けばいいですか?
461デフォルトの名無しさん:2010/12/20(月) 22:25:35
質問です。
if %hoge%=""(
call .\hoge2.bat
)
とやるとhoge2.batを読みに行かず、
「コマンドの構文が誤っています」
と出てくるのですが、
どのようにして外部ファイルをロードさせればいいのでしょうか
462デフォルトの名無しさん:2010/12/21(火) 02:00:40
"%hoge%"==""
463デフォルトの名無しさん:2010/12/21(火) 02:25:13
>>462
申し訳ありません。
if "%hoge%"=""(
の状態です。
464デフォルトの名無しさん:2010/12/21(火) 07:29:47
465デフォルトの名無しさん:2010/12/21(火) 09:50:08
>>463
= と == は同じじゃないよ

ちなみに使えるなら
if not defined hoge
こっちもいい。
466デフォルトの名無しさん:2010/12/21(火) 10:59:34
""と(の間にスペースが必要
てかデバッグするときに@echo offするな
467デフォルトの名無しさん:2010/12/21(火) 12:25:25
>>461です。
申し訳ありません。
if "%hoge%"=="" (
でうまく行きました。
また、 @echo off コマンドはなし。
各所にpauseで処理の流れを見ていました。

話変わりますが、私はデバッグに
@echo off(問題ない部分) @echo on pause echo %変数名%
を組み合わせて利用しています。

>>413,414
ニコ動画作成wikiでコマンドラインで簡単にエンコードできる
つんでれんこ というの見ましたが・・・

変な質問してしまって申し訳ありません。
お詫びにご存知の方もいらっしゃると思いますがとりあえずこれを。

http://otnx.jp/CMD/FrontPage/
468デフォルトの名無しさん:2010/12/21(火) 20:47:23
なにこれ怖くて開けない。
直リンだし。
腹いせで罠サイトでも貼った?
469デフォルトの名無しさん:2010/12/21(火) 20:51:27
470デフォルトの名無しさん:2010/12/21(火) 21:30:03
>>468
知らんのか?
それでよくここに来てるなw
471デフォルトの名無しさん:2010/12/21(火) 22:19:49
>470
オウフ 知らなかったよ
自分はこことかみて勉強したからさ…

DOSプロンプト活用相談室LOG
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/
472デフォルトの名無しさん:2010/12/21(火) 22:31:52
473デフォルトの名無しさん:2010/12/21(火) 22:47:21
しまった 自分で言っておいて、h抜くの忘れてた
474デフォルトの名無しさん:2010/12/22(水) 08:28:08
今どきh抜くとか抜かないとか…
専ブラならhなど無くてもクリックできるし、
その時Refererを切ってくれるかどうかなんて信用できん。
475デフォルトの名無しさん:2010/12/22(水) 16:13:51
今時もクソもあるか、直リンを書くと2chのサーバ側で
ttp://fpcu.on.coocan.jp/dosvcmd/bbs/log/

ttp://ime.nu/fpcu.on.coocan.jp/dosvcmd/bbs/log/
に書き換える。

hを抜かない奴が、只の馬鹿なだけ。
476デフォルトの名無しさん:2010/12/22(水) 16:39:20
>専ブラなら
の文字が読めないバカ。

つーか、汎用ブラウザで2chにアクセスする方が
ずーっと迷惑だっての。
477デフォルトの名無しさん:2010/12/22(水) 16:40:40
あー、間違えた。
2chにアクセス、じゃなくて
read.cgiを呼び出す、だな。

そもそも、ime.nuの書き換えはread.cgiが行ってるんだから。
それすら知らないみたいだけど。
478デフォルトの名無しさん:2010/12/22(水) 17:00:08
ユーザー側がいちいち気にする問題じゃないし
2chの仕様が気に入らんなら運営に文句いっとけ
479デフォルトの名無しさん:2010/12/22(水) 17:09:36
>>475,477
アサッテ講釈乙
480デフォルトの名無しさん:2010/12/24(金) 12:18:25
>>447-448
新聞沙汰になる用途ならちゃんとテストもかけよとww


かくいう俺もですね
481デフォルトの名無しさん:2010/12/25(土) 04:28:09

set out = "temp"
echo %out%

これで表示されなくて小一時間悩んだわクソが
482デフォルトの名無しさん:2010/12/25(土) 14:06:10
echo %out %
483デフォルトの名無しさん:2010/12/25(土) 15:42:17
set out
484デフォルトの名無しさん:2010/12/25(土) 16:48:41
なんで = の前後に空白いれちゃいけねえんだ
485デフォルトの名無しさん:2010/12/25(土) 16:51:12
そういう仕様だから
486デフォルトの名無しさん:2010/12/25(土) 17:42:03
>なんで = の前後に空白いれちゃいけねえんだ
いれていいよ いれたらはいるわな それを入れないで展開する方がおかしいわな
487デフォルトの名無しさん:2010/12/29(水) 01:46:12
一応確認だけど
バッチ処理で起動したソフトのウィンドウに
ショートカットキーを送る事は出来ませんよね?
488デフォルトの名無しさん:2010/12/29(水) 02:16:21
やればいいのに
489デフォルトの名無しさん:2010/12/29(水) 11:06:36
vbsでやれ
490デフォルトの名無しさん:2010/12/29(水) 12:47:36
nircmdでやれ
491デフォルトの名無しさん:2010/12/29(水) 13:31:52
OS内蔵のexeだけ使ってバッチファイルの中に記述出来るかという話だとすると出来る
>>489 だめ
>>490 だめ
492デフォルトの名無しさん:2010/12/29(水) 14:32:30
コマンドラインのソフトで標準入力を受け付けるなら、リダイレクトで渡すとか。いやショートカットだからだめか。

ウインドウを持ったアプリにショートカット渡す話ならば、もはやbat関係ないな
部分的にAutoHotKeyとかAutoIt使うとか
sendkeyみたいなコマンドあればいんだろうが、タイミングはかって自動化するくらいになるとAHKが楽だな

493デフォルトの名無しさん:2010/12/29(水) 19:04:32
ショートカットってショートカットの仕方が変だろw
494487:2010/12/30(木) 02:31:03
>>491のは理解が追いつかないですが一応方法はあるんですね。
とりあえずautohotkey使ってみました。
ありがとうございました
495デフォルトの名無しさん:2010/12/30(木) 07:54:54
>>493
ショートカットキーの意味でショートカットって言ってるんだろう
496デフォルトの名無しさん:2010/12/30(木) 13:37:31
実験したら嫌なことが判明した
嫌な仕様だなあ
どうすりゃいいんだか

&を含むファイル名は引数の取得に失敗する
&を含んでも半角スペースを同時に含む場合は期待通りに動く(全角スペースは駄目)

実験bat
-----------
@echo off
echo "%~1"
echo "%~2"
echo "%~3"
echo "%~4"
echo "%~5"
echo "%~6"
echo "%~7"
echo "%~8"
echo "%~9"
pause
exit

実験ファイル名
-----------
D&D新規テキストドキュメント(2).txt
D&D新規テキストドキュメント (2).txt
D&D新規テキストドキュメント (2).txt
新規&テキストドキュメント(2).txt
新規& テキストドキュメント(2).txt
新規 &テキストドキュメント(2).txt
497デフォルトの名無しさん:2010/12/30(木) 14:39:07
実験bat "D&D新規テキストドキュメント(2).txt"
498デフォルトの名無しさん:2010/12/30(木) 16:00:02
499デフォルトの名無しさん:2011/01/05(水) 12:25:21
moveってディレクトリ移動できないんだっけ?
アクセスが拒否されましたと怒られる
500デフォルトの名無しさん:2011/01/05(水) 12:32:28
馬鹿には無理
501デフォルトの名無しさん:2011/01/05(水) 15:41:29
>>499
ドライブをまたぐ移動は無理
502デフォルトの名無しさん:2011/01/06(木) 16:14:18
robocopyつかえ
503デフォルトの名無しさん:2011/01/07(金) 14:48:12
>>497のレスの意味がわからんのだが解説してくれ
504デフォルトの名無しさん:2011/01/07(金) 19:48:18
ドロップハンドラ変えろってことじゃないの
505デフォルトの名無しさん:2011/01/07(金) 23:26:45
>>497にするようなドロップハンドラがあるのか?
506デフォルトの名無しさん:2011/01/08(土) 18:49:17
ないよ
507デフォルトの名無しさん:2011/01/11(火) 16:43:23
OS: Xp SP3
バッチファイル中(コマンドライン)からごみ箱に捨てるのはどうすればできますか?
508507:2011/01/11(火) 16:45:41
後出しですみません。
標準コマンドのみで実現したい。
509デフォルトの名無しさん:2011/01/11(火) 16:52:11
510デフォルトの名無しさん:2011/01/11(火) 16:56:52
VBSでShell.Application呼ぶしか無いんじゃないのかと
511デフォルトの名無しさん:2011/01/11(火) 17:12:20
>>509
ありがとうございます。
バッチやめてcscriptに日和れというお告げかな。
512デフォルトの名無しさん:2011/01/11(火) 17:13:09
うっ、レス番抜け。

>>509-510
ありがとうございます。
バッチやめてcscriptに日和れというお告げかな。
513デフォルトの名無しさん:2011/01/11(火) 17:35:15
514デフォルトの名無しさん:2011/01/11(火) 17:44:24
VBSもPowershellも標準コマンドじゃないからNG
…てなことを言う腐れ管理部門もあるから厄介だ。
515デフォルトの名無しさん:2011/01/11(火) 18:19:37
>513-514
一応Windows95でも使えるVBSは標準コマンドとして認めてもOKだろうが、
PowerShellは依然として時期尚早だと思う。
516デフォルトの名無しさん:2011/01/11(火) 18:36:30
set errorlevel=2

if errorlevel NEQ 0 (
echo [ ERROR ] なんで>> Log.txt
) else (
echo [SUCCESS] 両方出るんだよ>> Log.txt
)

すまん、助けてくださいまし
517507:2011/01/11(火) 18:38:05
scriptとバッチから
http://scripting.cocolog-nifty.com/blog/2007/04/post_57c8.html
に行き当たりました。

バッチファイルにcscriptを埋め込む技もパクリました。すごいことを考える人がいるもんだ。
518516:2011/01/11(火) 19:16:53
あー、分かりました。
errorlevelと%errorlevel%ってかなり別物ってことですよね?
少なくともerrorlevelは変数じゃないと。
519デフォルトの名無しさん:2011/01/11(火) 19:47:53
構文エラーでifの行が無かったものとされているので
括弧で分けたのが無意味。全部実行される。

set errorlevel=2

rem if errorlevel NEQ 0 (
echo [ ERROR ] なんで>> Log.txt
) else (
echo [SUCCESS] 両方出るんだよ>> Log.txt
)

こんなのと実質的に同じ。
if [not] errorlevel 〜 の構文と
if 文字列 比較 文字列 の構文ごっちゃにしたらダメ
520516:2011/01/11(火) 19:56:21
ありがとう。実行結果よく見れば良かったです。
慣れないと危険ですね。
521デフォルトの名無しさん:2011/01/11(火) 20:14:37
>>517
mshta使えばワンライナでできるワン
522デフォルトの名無しさん:2011/01/11(火) 20:18:22
>>520
&&や||使った方が楽だよ
ttp://technet.microsoft.com/ja-jp/library/cc737438(WS.10).aspx
523507:2011/01/12(水) 10:27:50
>>521
jscriptは文字列定数に\を含むパス名を埋め込めなかったので、
vbscriptのワンライナーに落ち着きました。
524デフォルトの名無しさん:2011/01/12(水) 19:16:54
mshtaはWScript.Sleep 100が問題だニャン
525デフォルトの名無しさん:2011/01/12(水) 21:03:59
tmp.txtとか一旦出力するのを使わずに
バッチにドロップした引数(%*)を文字順ソートして変数にセットしたい
いろいろ試してみたのですが
もうどう書けばいいのかわかりません。。

@echo on
setlocal enableextensions disabledelayedexpansion
set ARG=%*
set ARG=%ARG:!=?%
echo=%ARG%
pause

(for %%I in (%ARG%) do echo "%%~I")|sort
pause
exit /b

とりあえずこれでソートは出来てるようなのですが
これをARGにセットしなおそうと

for %%A in ('for %%I in (%ARG) do echo "%%~I")|sort') do call :SUB %%A
:SUB
set ARG=%ARG% "%~1"
goto :EOF

とかにするとin()部が展開出来ないようなのです
in ('(コマンド)')とか
/f usebackqオプションと``を使ってみたり
in ('call :SUB1')とか
思いつく限りでいろいろ試してみたのですがダメでした
教えて君で申し訳ないのですが、もう自分では限界です
わかる方教えてくださいお願いします
526525:2011/01/12(水) 21:18:52
訂正
for %%A in ('(for %%I in (%ARG%) do echo "%%~I")|sort') do call :SUB %%A
(と%が抜けていました

あと、もうひとつ質問です
後からやサブルーチンで
setlocal enabledelayedexpansion を使えるように

set ARG=%*
set ARG=%ARG:!=?%
と!を?に置換したのですが

for %%I in ()で展開されると?が本来のパスやファイル名の!に戻っているようなのです

set ARG=%ARG:!=?%
で!を?に置き換えるのは無意味なのでしょうか?
527デフォルトの名無しさん:2011/01/12(水) 23:47:23
setlocal enabledelayedexpansion を頭に書かねばならぬとでも思ってんじゃねーの?
528507:2011/01/13(木) 01:25:40
>>524
setTimeoutで逃げたけど、ウィンドウが一瞬開くのがダサいから
結局、>>517に戻りました。
529デフォルトの名無しさん:2011/01/13(木) 02:17:57
少し待たせるだけなら、よくこんなことやってるが全然ズレてるか。
ping localhost -n 10 > nul
530デフォルトの名無しさん:2011/01/13(木) 17:28:56
完全
531デフォルトの名無しさん:2011/01/14(金) 15:35:42
wscript.exe //e:vbs - を復活してほしいな
532デフォルトの名無しさん:2011/01/17(月) 17:42:39
最近64ビット環境に移ったんだが、
環境変数PATHの中にProgram Files (x86)みたいな
括弧つきのパスがあると今まで使ってたバッチが動かない……

思いつく回避方法は環境変数PATHを弄って
Program Files (x86)をPROGRA~2に変えるみたいに
DOSの8.3形式との互換性ある名前に変えちゃうぐらいしかないんだが、
他に良い回避方法ってないのかな?
533デフォルトの名無しさん:2011/01/17(月) 18:43:51
そもそもProgram Filesにパスが通ってる必要あるの?
534デフォルトの名無しさん:2011/01/17(月) 18:55:10
>>533
糞ワロタ
535デフォルトの名無しさん:2011/01/17(月) 19:33:48
括弧つきのパスがあると動作しなくなる原因は?
536デフォルトの名無しさん:2011/01/17(月) 19:34:33
そもそもProgram Filesのパスを指定する必要あるの?
537デフォルトの名無しさん:2011/01/17(月) 19:37:19
ふつう""で囲むから問題ない
538デフォルトの名無しさん:2011/01/17(月) 19:42:58
「みたいな」って書いてあるけど、>>536には見えないのかな?
539デフォルトの名無しさん:2011/01/17(月) 20:19:07
そもそもProgram Filesみたいなパスを指定する必要あるの?

540デフォルトの名無しさん:2011/01/17(月) 20:55:24
>>535
for %%V in (%PATH%) do (echo %%V)
みたいのが、そのままじゃ動かなくなる。
541デフォルトの名無しさん:2011/01/17(月) 21:29:44
>>538
別にx64環境の前からパスに括弧を入れる事は可能だったね。

つまるところx64環境になったのが問題なのではなく以前から使っていた
バッチにバグがあったのが表面化しただけとも言えるな。

x64環境になった事とpathに括弧が入ることの関連性は(x86)だけだな。
「みたいな」と言いつつ、その実「という」辺りが適当なんではないかな。
542デフォルトの名無しさん:2011/01/17(月) 21:41:15
そもそもアプリを後からインストールするのに
Program Files下に入れる時点でアホ
543デフォルトの名無しさん:2011/01/17(月) 21:45:30
本質はProgram FilesやPATHじゃない、という事がわからない奴はROMってろ。
544デフォルトの名無しさん:2011/01/17(月) 21:47:18
実質サポート終了してるツールだからな
動くだけでも幸せと思っとけ
545デフォルトの名無しさん:2011/01/17(月) 22:42:57
試行錯誤してみたが、例えばこんな感じか

set TEMP_PATH=%PATH:;=^";^"%
for %%V in ("%TEMP_PATH%") do (echo %%~V)
set TEMP_PATH=

括弧つくとダメな条件が良くわからん。
546デフォルトの名無しさん:2011/01/17(月) 23:03:35
splitと同じ処理ってバッチで実装できますか?
たとえば引数が、123¥456¥789だったら、
\をセパレータにして123 456 789 に分けて変数に格納する感じで。
547デフォルトの名無しさん:2011/01/17(月) 23:13:50
>>543
何を気取ってんだよ厨房がw
548デフォルトの名無しさん:2011/01/17(月) 23:23:19
列挙だけなら

setlocal enabledelayedexpansion
set TEMP=123\456\789
:loop
for /f "delims=\ tokens=1*" %%i in ("!TEMP!") do (
echo %%i
set TEMP=%%j
goto loop
)


みたいな感じでできるけど。
549デフォルトの名無しさん:2011/01/18(火) 00:07:25
>>548
ありがとうございます!
550デフォルトの名無しさん:2011/01/18(火) 00:27:17
>>547
引っ込んでろ。バカ。
551デフォルトの名無しさん:2011/01/18(火) 04:32:54
PATHに""付で入れればえーやん
552デフォルトの名無しさん:2011/01/18(火) 12:55:03
>>551
うちだと、それやると古いツールが""ついたままの名前で扱っちゃうんだな。
その手の古いツールがなければそれでもいいけど。

>>548
TEMP破壊すんなよ……
553デフォルトの名無しさん:2011/01/18(火) 13:05:28
>>552
それなら、その古いツールはカッコだけじゃなくて、空白も問題になるだろ。
554デフォルトの名無しさん:2011/01/18(火) 13:34:09
>>553
古いツールはバッチから呼び出されるだけでバッチじゃないので、
空白や括弧だけなら問題にならないんだわ。
555デフォルトの名無しさん:2011/01/18(火) 14:28:04
つまり、古いツールには↓このように""なしで渡す必要があり、
かつ、バッチ中では""でくくらないと駄目という事か?
> 古いツール.exe c:\Program files (x64)\hoge

それなら、古いツールの呼び出しはパス演算子で変換してやればいい。
for %%n in ("c:\Program Files (x86)") do 古いツール.exe %%~n

for %%n in ("c:\Program Files (x86)") do 古いツール.exe %%~sn
556デフォルトの名無しさん:2011/01/18(火) 15:02:42
>>532の問題の回避策として、
set PATH="C:\Program Files (x86)\hoge";C:\windows;C:\windows\system
みたいな回避法とると、バッチは手直しせずに通るが
古いツールの中には動かないのが出てくるって話。
557デフォルトの名無しさん:2011/01/18(火) 16:23:30
>TEMP破壊すんなよ……
「setlocal」って書いてあるけど、>>552には見えないのかな?

558デフォルトの名無しさん:2011/01/18(火) 16:28:32
>古いツールの中には動かないのが出てくるって話。
いい加減なことを言って、んなもんあるものか あったとすればお前が作った糞ツールだろ
559デフォルトの名無しさん:2011/01/18(火) 16:33:17
560デフォルトの名無しさん:2011/01/18(火) 16:38:57
>>558=>>557
田舎ヤクザが何を言っても説得力なし。
一生底辺をさまよってろ。
561デフォルトの名無しさん:2011/01/18(火) 17:20:27
x86はわかるがx64てなに?

65bitに32bitアプリを入れるときはフォルダ名に(x86)をつけなきゃーなんてね
562デフォルトの名無しさん:2011/01/18(火) 18:05:45
>>561
こまけぇこたあいいんだよ。

ところで、64bitならわかるが65bitってなに?
563デフォルトの名無しさん:2011/01/18(火) 18:28:17
65bitは64bitのtypoだろ
x64はx86のtypoだろ
564デフォルトの名無しさん:2011/01/18(火) 19:05:43
フォルダ名に(x86)みたいなのをつけるほうが悪いんじゃないか?
&()[]{}^=;!'+,`~はつけるな―ってーの
565デフォルトの名無しさん:2011/01/18(火) 19:09:57
566デフォルトの名無しさん:2011/01/18(火) 20:35:03
>548
引数が123¥4 6¥789だと4で処理が終わってしまうのですが、
引数で渡す段階で、ダブルクォートで囲む以外に対処は無理でしょうか?
567デフォルトの名無しさん:2011/01/18(火) 20:46:56
>>540
> for %%V in (%PATH%) do (echo %%V)
> みたいのが、そのままじゃ動かなくなる。
もともとまともに動かんだろ
568デフォルトの名無しさん:2011/01/18(火) 20:59:27
set TEMP=%*
569デフォルトの名無しさん:2011/01/18(火) 22:01:24
>>568
おぉ、うまくいきました。
ありがとうございます。
もう1点お聞きしたいのですが、このやり方だと、
引数が複数あると他の引数も渡ってしまいます。
1個目の引数だけをこの形で入れることは可能でしょうか?
570デフォルトの名無しさん:2011/01/18(火) 22:30:37
>>569
ダブルクオートで囲わないという前提に立つ限り
スペースの後が1個目の引数の続きなのか2個目の
引数なのかはあなた以外にはわからないのでは?
571デフォルトの名無しさん:2011/01/18(火) 22:43:47
>>570
引数はカンマ区切りで判断すると思ってましたが、スペースで区切るんですか。
無知で申し訳ない…
572デフォルトの名無しさん:2011/01/18(火) 23:57:00

勘印まちがったのかのう
573デフォルトの名無しさん:2011/01/19(水) 21:47:05
糞バッチを作る都会の紳士は%~$PATH:Iを知らんらしい
574デフォルトの名無しさん:2011/01/20(木) 15:19:10
%~$PATH:Iはしゃれとんしゃ
575デフォルトの名無しさん:2011/01/26(水) 09:49:06
VisualStudioで開発中のソースを自動ビルドするバッチファイルを作成したのですが、
このとき画面に表示されるログをファイルに保存したいと思います。
どのように記述を行えばよいでしょうか?
バッチファイル初心者です。
576デフォルトの名無しさん:2011/01/26(水) 15:28:28
バッチファイル > ログファイル 2>&1
577デフォルトの名無しさん:2011/01/26(水) 18:34:05
バッチ中に書きたいんです!
578デフォルトの名無しさん:2011/01/26(水) 19:02:01
@echo off
本物バッチファイル > ログファイル 2>&1

というバッチファイルを作ればいい。
579デフォルトの名無しさん:2011/01/26(水) 19:11:38
本物のバッチファイル中には書けないんですか?
580デフォルトの名無しさん:2011/01/26(水) 19:50:57
だったら引数の有無で分岐すりゃいい
581デフォルトの名無しさん:2011/01/27(木) 01:36:04
環境変数の置換で=を?に置換したいんだけどどう書けばいい?
set 変数名=%変数名:==?%
と書くと通らなくて
set 変数名=%変数名:^==?%

set 変数名=%変数名:^^==?%
set 変数名=%変数名:^^^^==?%
とかも試したんだけど置換されなかった
書き方間違えてるなら教えてください
582デフォルトの名無しさん:2011/01/27(木) 01:42:23
=はどうやっても置換できません
583デフォルトの名無しさん:2011/01/27(木) 02:09:24
>>582
ありがと
すでに何十時間も無駄にしたけど
さらに何日か無駄にするとこだったよ
584デフォルトの名無しさん:2011/01/27(木) 13:13:08
そのシンタクスじゃ無理だけど
%変数名:~2,1%
みたいに1文字ずつ取り出して、比較して、結合してやればいいよ
585デフォルトの名無しさん:2011/01/27(木) 14:31:47
forで=で分割して結合すりゃいいんじゃね?って思って書いてみたら…
forの括弧の中で=がスペースに置換されて出力できない…こんな仕様だったっけ?

set str=abc=def
for /f "delims=" %%i in ('echo %str%') do echo %%i

結果
abc def

??
586デフォルトの名無しさん:2011/01/27(木) 18:19:38
=だけじゃない ; , 全角空白も
587デフォルトの名無しさん:2011/01/27(木) 18:40:49
仮令そうでなくても、=と==と===、、、が区別できないからダメだろ
588デフォルトの名無しさん:2011/01/28(金) 17:02:57
for %%a in (*.jpg) do call :sub "%%a"
goto EXIT

:sub
echo %1
goto :EOF

これで処理をしていったら0001.jpg 0002.jpg 0003.jpgのあたりがどうしてもばらばらの順番で読み込まれてしまう時がある。
dir /onで調べると問題なく表示されるんだけど、何回やっても同じ結果になってしまう
(圧縮しておいてまた解答してやり直しても同じ結果となってしまった。ひどいものだと一度読み終えたものまで読み込んでいる。)
なんでだろう
589デフォルトの名無しさん:2011/01/28(金) 18:19:56
一人がxからyに物を移している最中にもう一人がyからxに物を移すとどうなる?
590デフォルトの名無しさん:2011/01/28(金) 19:12:39
自己改造.cmd

echo >>%0

みたいなもんだな
591デフォルトの名無しさん:2011/01/29(土) 16:59:03
>>580
再帰?
call使えばバッチ内に書けるよ
592デフォルトの名無しさん:2011/01/29(土) 18:50:35
>>588
for /f "delims=" %%a in ('dir /b /on *.jpg') do call :sub "%%a"
593デフォルトの名無しさん:2011/01/30(日) 14:23:26
ENCERRORは0か1のみ
FLAG_QUIETLEVELは2以上なら正常終了時に確認しない
3以上ならエラー時にも確認しない
■A
if "%ENCERROR%" == "1" (
if not %FLAG_QUIETLEVEL% geq 3 ( pause )
exit /b 1
)
if not %FLAG_QUIETLEVEL% geq 2 ( pause )
exit /b 0

■B
if "%ENCERROR%" == "1" (
if not %FLAG_QUIETLEVEL% geq 3 ( pause )
) else (
if not %FLAG_QUIETLEVEL% geq 2 ( pause )
)
exit /b %ENCERROR%

■C
if "%ENCERROR%" == "1" (
if not %FLAG_QUIETLEVEL% geq 3 ( pause )
exit /b 1
)
if "%ENCERROR%" == "0" (
if not %FLAG_QUIETLEVEL% geq 2 ( pause )
exit /b 0
)

A,B,C,でどれが一番美しいかな?もしくはわかりやすいのはどれ?
また他に俺ならこう書くってのがあれば教えて
594593:2011/01/30(日) 14:28:23
タブインデントが無くなってる><
()の中はインデントされてると思って読んで。
595デフォルトの名無しさん:2011/01/30(日) 15:55:31
A,B,C,すべて美しくない。見たくもない。考えたくもない。
596デフォルトの名無しさん:2011/01/30(日) 16:46:53
>>593
FLAG_QUIETLEVELが自然数であることを仮定して

goto f%FLAG_QUIETLEVEL%
goto f3
:f1
pause
goto f3
:f2
if "%ENCERROR%"=="1" pause
:f3
exit /b %ENCERROR%

うーんなんだか無理やり感があるなあw
597デフォルトの名無しさん:2011/01/30(日) 16:50:13
>>595
レスしたくない は含まれなかったの?
598デフォルトの名無しさん:2011/01/30(日) 17:09:52
さっきの全角文字が含まれてたorz

if %FLAG_QUIETLEVEL% gtr 2 (goto 3) else (goto %FLAG_QUIETLEVEL%)
:2
if "%ENCERROR%"=="0" goto 3
:1
pause
:3
exit /b %ENCERROR%

こんなんでもいけるな
599デフォルトの名無しさん:2011/01/30(日) 17:29:50
ちなみに俺もバッチでエンコするんで似たようなことしてるけど
フラグで分岐じゃなくてエラー出たときに
set encerror=%encerror% ファイルが無いよ
みたいな感じで追加していって最後で
if defined encerror call errorfunc %encerror%
みたいなことやってる。
600デフォルトの名無しさん:2011/01/30(日) 18:31:14
>>596 を手直ししてみた。
これだと何してるか分かりやすいけど
FLAG_QUIETLEVELの値の範囲次第ではラベルの量がw

goto :FQL_%FLAG_QUIETLEVEL%
:FQL_2
if "%ENCERROR%" == "0" ( goto :FQL_3 )
:FQL_1
:FQL_0
rem (マイナス値があればここにラベル)
pause
rem (6以上があるならここにラベル)
:FQL_5
:FQL_4
:FQL_3
exit /b %ENCERROR%

601デフォルトの名無しさん:2011/01/30(日) 19:23:35
for /f %%I in ('set /a encerror-flag_quietlevel') do cmd /c exit %%I & if errorlevel -1 pause
602デフォルトの名無しさん:2011/01/30(日) 19:54:56
面白いけど要求どおりの動作しなくね?
603デフォルトの名無しさん:2011/01/30(日) 20:32:57
>>601
よくそんなの思いつきますねーすごいですね。

>>602
ちゃんと動く
FLAG_QUIETLEVEL 0   1   2   3  4
ENCERROR         1 0 1 0 1 0
差               0 1 1 2 2 3
pauseの範囲        あり ←|→ なし
if errorlevel文は "以上" で真だから
ENCERROR - FLAG_QUIETLEVEL で符号を反転
cmd /c exit はif errorlevelでpauseかけるかどうかの判定に使ってるだけだから
この下にexit /b %ENCERROR%が要るけどちゃんと動作するよ

set /a encerror-flag_quietlevel
こんなの通らないと思ってたけど
for in ('')の中ではいいみたい
set /a %%I=encerror-flag_quietlevel
って意味になるみたいだよ

でもスクリプトみてわかりやすいかどうかと言えば問題あるけど
ただただ感心というか感動というか感嘆、ほんとによく思いつくなぁーと。
その発想力がうらやましいです。
604デフォルトの名無しさん:2011/01/30(日) 20:51:42
何でわざわざerrorlevelに入れるためcmd /c exitってやってるのかわからん。

単純に
do if %%I geq -1 pause
でいいんじゃね?
605デフォルトの名無しさん:2011/01/30(日) 20:56:49
>>603
> set /a encerror-flag_quietlevel
> こんなの通らないと思ってたけど
> for in ('')の中ではいいみたい
> set /a %%I=encerror-flag_quietlevel
> って意味になるみたいだよ

違う。
コマンドプロンプト上でset /a 1-2ってやってエンター押してみ。
606デフォルトの名無しさん:2011/01/30(日) 21:33:44
C言語でもなんでもいいから
プログラミングの基礎ぐらいやっておかないと恥かくよ
607デフォルトの名無しさん:2011/01/30(日) 22:02:01
set /a I=encerror-flag_quietlevel
if %I% geq -1 pause
608デフォルトの名無しさん:2011/01/30(日) 23:11:41
>>592
動いた!ありがとう!!
こんな方法があるのか・・・
609デフォルトの名無しさん:2011/01/31(月) 08:29:58
>>605
set /a 1-2
と同じになるのは
set /a %ENCERROR% - %FLAG_QUIETLEVEL%
と書かなきゃならないと思ってたけど
試してみたら set /a では%で展開しなくても
環境変数名で計算してくれるみたいですね
知らなかったです
610デフォルトの名無しさん:2011/01/31(月) 08:35:28
差が2以上なら確認しない
if not ( set /a FLAG_QUIETLEVEL-ENCERROR ) geq 2 ( pause )
とか思ったけどこんな()の使い方は出来ないみたいですね

>>607の例だと
■環境変数をもうひとつ用意して2行の場合
差が2以上なら確認しない
set /a FLQ_EE= FLAG_QUIETLEVEL - ENCERROR
if not %FLQ_EE% geq 2 ( pause )

差が2未満なら確認する
if %FLQ_EE% lss 2 ( pause )


>>604のを>>601に取り入れると
■1行でなるべく環境変数を作りたくない場合
for /f %%I in ('set /a FLAG_QUIETLEVEL - ENCERROR') do if not %%I geq 2 ( pause )


if errorlevel文を使わないならわざわざ符号を反転させなくてもいいですね
>>600の例だと FLAG_QUIETLEVEL が実数の場合、実質無理だけど
これなら問題なくなる

>>593の質問は if "%ENCERROR%" == で else でなく
0と1を明示したほうがわかりやすいか?ってことと
exit はなるべく一箇所にしたほうがいいかな?ってことだったんだけど
思わぬ流れになりました

にしても差で pause の範囲を区切れると気付いた >>601
やっぱりすごいですね
611デフォルトの名無しさん:2011/01/31(月) 13:36:07
他の言語だとエラーで中断したり、プロンプト出して継続したりできるけど、
バッチファイルでは1行ごとにチェックして分岐するしかないかね?
612デフォルトの名無しさん:2011/01/31(月) 14:03:08
>>611
> 他の言語だとエラーで中断したり、プロンプト出して継続したりできるけど、
「言語」そのものにそういう機能があるわけじゃないから。
613デフォルトの名無しさん:2011/01/31(月) 16:18:37
あたま悪そう
614デフォルトの名無しさん:2011/01/31(月) 16:34:15
ちょっとwait
615デフォルトの名無しさん:2011/01/31(月) 16:40:09
>>614
そこはpauseにすべきでは
616デフォルトの名無しさん:2011/01/31(月) 16:42:28
そう思ったけどあえてwaitにした
617デフォルトの名無しさん:2011/01/31(月) 16:58:09
>>611
そういうときはps1に
618デフォルトの名無しさん:2011/01/31(月) 19:38:57
バッチファイルを実行するcmd.ps1を作ればよい
619デフォルトの名無しさん:2011/01/31(月) 21:27:57
>>613
子供は来なくていいから
620デフォルトの名無しさん:2011/01/31(月) 23:06:26
>>619
年寄りは年金受給前にさっさとs
621デフォルトの名無しさん:2011/02/01(火) 02:08:17
for /f "backq delims=" %%I in ("%~0") do call %%I || goto eof
echo 1
echo 2
echo 3
622デフォルトの名無しさん:2011/02/01(火) 06:14:05
>>615
いや、むしろ  ping 0 > nul  を何行か続けるほうが良いのでは?
623デフォルトの名無しさん:2011/02/01(火) 13:47:09
いや、むしろ
:loop
goto loop
のほうが良いのでは?
624デフォルトの名無しさん:2011/02/02(水) 03:31:43
findstrがわからない

コンソールの桁数を日本語モードでも英語モードでも取得したくて
結論から言うと
for /f "tokens=1,* delims=: " %I in ('mode con ^| findstr /r "Columns 桁数"') do echo=%J
で目的の動作になるんだけど
findstrに /r をつけなければ何も表示されない

プロンプトで
mode con | findstr "Columns"
mode con | findstr "桁数"
はそれぞれちゃんと表示されるんだが

mode con | findstr "Columns 桁数"
とすると何も表示されない
ググったりしてみてもなんでダメなのかわからなかった

ヘルプには
たとえば、FINDSTR "hello there" x.y と指定した場合は、ファイル x.y で "hello"
または "there" が検索されます。
とあるから findstr "Columns 桁数" で動くはずだと思うんだけど

なんで /r つけて正規表現としなきゃならないか
わかる人が居るなら説明してほしい
625デフォルトの名無しさん:2011/02/02(水) 04:28:50
chcp 437
626デフォルトの名無しさん:2011/02/02(水) 06:39:13
>>625
仮にコードページの問題で
USモードの時に "桁数" が通らない
ってならわかる
けれどそれだとJPモードで
mode con | findstr "Columns 桁数"
が表示されないのは説明つかないんじゃないかな?
627デフォルトの名無しさん:2011/02/02(水) 06:48:49
>>626
いや、>>625は「桁数」の文字を見て脊髄反射で書いただけだと思うw
628デフォルトの名無しさん:2011/02/02(水) 12:15:25
mode con | findstr "桁数 コード"
mode con | findstr /r "桁数 コード"

この2つの結果が違うってのもよくわからんな
629デフォルトの名無しさん:2011/02/02(水) 13:51:35
findstr が ASCII にしか対応していないからでは?
http://technet.microsoft.com/ja-jp/library/cc755405(WS.10).aspx
>findstr を使うと、ASCII ファイルで検索文字列と正確に一致するテキストを検索できます。

今回の例では「桁」がダメ文字のようだが、「あ」とかも上手く検索できないっぽい
630デフォルトの名無しさん:2011/02/02(水) 16:49:50
>コンソールの桁数を日本語モードでも英語モードでも取得したくて
ヨーロッパでは?

そもそもchcp 437でやればどこでもおkだろwと脊髄反射で書いただけ

findstr "Columns 桁数" で非英数字は空白扱いで無視される /rは非英数字を扱う
631624:2011/02/02(水) 17:15:21
いわゆる Shift_JIS のダメ文字 (2バイト目が0x5cや0x7c)
でもないのにどうしてなんだと思ったけど
桁 8C 85
数 90 94
あ 82 A0
行 8D 73

○ findstr "桁"
○     "数"
×     "CON 桁" "桁 CON"
×     "CON 数" "数 CON"
○     "CON 行" "行 CON"

検索文字列がひとつの場合の時は大丈夫だけど
検索文字列が複数個になるとASCIIの範囲(0x7f)までしか
検索文字として認識しなくなってるのかもね
文字が1バイト目2バイト目共に7F以上のものばかりになるとダメってことかな

/rで正規表現としてみてる場合はそうではなくなると。
やっと納得いったよ>>629ヒントありがとう


>>630
>非英数字は空白扱いで無視される /rは非英数字を扱う
全てが無視されるわけではありません。ちゃんと確認してから発言しなさい。
632デフォルトの名無しさん:2011/02/02(水) 17:19:57
>全てが無視されるわけではありません。ちゃんと確認してから発言しなさい。
だから
>findstr "Columns 桁数" でと言ってるだろw 空白区切りのときってこと
ちゃんと確認してから発言しなさい。
633デフォルトの名無しさん:2011/02/02(水) 19:23:11
>文字が1バイト目2バイト目共に7F以上のものばかりになるとダメってことかな
× 幵 9B F2
ちゃんと確認してから発言しなさい。
634デフォルトの名無しさん:2011/02/02(水) 21:31:37
キリッ
635デフォルトの名無しさん:2011/02/02(水) 22:15:01
それより正規表現で空白含むパターンが書けねーよ!
findstr /r "Columns 桁数"
636デフォルトの名無しさん:2011/02/02(水) 22:21:06
:HINT
echo 速度|findstr "速 hoge"
echo 試験|findstr "試 hoge"
echo 試験|findstr "試験 hoge"
echo 試験|findstr "止*血*ア hoge"
637デフォルトの名無しさん:2011/02/02(水) 22:45:22
なるほど
638デフォルトの名無しさん:2011/02/02(水) 23:09:24
正しくは、
mode con | findstr /c:Columns /c:桁数
639デフォルトの名無しさん:2011/02/02(水) 23:12:47
cmd及びその周辺ツールを真面目に使いこなそうとすると精神に異常をきたすから
サクっと他のまともなスクリプトに投げてしまったほうがいい
640デフォルトの名無しさん:2011/02/02(水) 23:48:54
指定ディレクトリ以下の不規則な階層に存在する不規則なファイルを
指定ディレクトリにまとめたいです

setlocal enabledelayedexpansion
set N=0
for /f "delims=" %%R in ('dir /s /ad /b ^| sort /r') do (
set /a N=!N!+1
ren "%%R" !N!
)
for /f "delims=" %%M in ('dir /b /a-d /s') do move %%M .
endlocal

上記コマンドで、大体はうまくいくんですが
ディレクトリ名に ! を持つディレクトリでエラーが出てしまいます

renコマンドの対象ディレクトリ名の特殊文字を無効化する方法を教えてください
641デフォルトの名無しさん:2011/02/03(木) 00:06:32
set N=0
for /f "delims=" %%R in ('dir /s /ad /b ^| sort /r') do (
set /a N=N+1
CALL ren "%%R" %%N%%
)
for /f "delims=" %%M in ('dir /b /a-d /s') do move %%M .
642デフォルトの名無しさん:2011/02/03(木) 00:07:37
set /a N+=1
でもよい
643デフォルトの名無しさん:2011/02/03(木) 00:13:35
>>641
正常動作しました、callは使ったこと無かったので盲点だった…
勉強になりました、、ありがとうございます
644デフォルトの名無しさん:2011/02/03(木) 04:59:41
>>643
参考URL:
環境変数を遅延展開する第3の方法とは?
http://scripting.cocolog-nifty.com/blog/2010/01/post-d209.html
環境変数の遅延展開を遅延展開する。
http://scripting.cocolog-nifty.com/blog/2008/11/post-c111.html

この辺知っておくとやりたいことが出来なくて困るというのは減ると思うよ
645デフォルトの名無しさん:2011/02/04(金) 16:40:36
>>624-638
参考URL:
@IT - @IT:Windows TIPS -- Tips:findstrで正規表現を検索する
http://www.atmarkit.co.jp/fwin2k/win2ktips/511findstr/findstr.html
646デフォルトの名無しさん:2011/02/04(金) 18:33:08
>>645
全然参考にならないものをしたり顔で出されても…

そんなもん皆先刻承知。そんなのが参考になると思ってるのはお前だけ。
647デフォルトの名無しさん:2011/02/04(金) 18:41:22
意味不明
>そんなのが参考になると思ってるのはお前だけ。
だったら
>そんなもん皆先刻承知。
でない
おまえ論理的思考ができない所謂おばか?
648デフォルトの名無しさん:2011/02/04(金) 19:02:37
(お前以外は)そんなもん皆先刻承知。そんなのが参考になると思ってるのはお前だけ。

俺は論理的思考でこう読んだ
649デフォルトの名無しさん:2011/02/04(金) 19:39:44
つまり論理的記述ができないおばか?
650デフォルトの名無しさん:2011/02/04(金) 19:40:59
よく分からないからスクリプトで書いてください
651デフォルトの名無しさん:2011/02/04(金) 20:23:43
>>647
645含めて皆先刻承知だが、それが参考になると思ってるのは645だけ
652デフォルトの名無しさん:2011/02/04(金) 21:36:00
>>651
論理的思考で考えてからう一度書いてね
653デフォルトの名無しさん:2011/02/04(金) 22:03:14
どっちでもよいが、もし八百長をした力士が3人いたら、3人だけでほかは皆してないと考えるほうがおばかだろ?
654デフォルトの名無しさん:2011/02/04(金) 23:02:21
バッチファイルで経過を表示したいのですが、
文字列を引数にして画面にOSD表示するようなソフトってないですかね。
655デフォルトの名無しさん:2011/02/04(金) 23:09:00
まあ自作すりゃいいんですが、
文字列の形をしたリージョンのウィンドウで作るのが普通なんですかね。
Win7とかで使えるのかな。
656デフォルトの名無しさん:2011/02/05(土) 02:14:48
>>652
いいから涙を拭けよ
657デフォルトの名無しさん:2011/02/05(土) 13:13:03
>>656
どうした、顔が真っ赤だぞ
658デフォルトの名無しさん:2011/02/05(土) 16:19:49
>>657
color c0
659デフォルトの名無しさん:2011/02/05(土) 17:24:47
>>658
で?
660デフォルトの名無しさん:2011/02/05(土) 17:33:51
>>659
>>658は、お前より百倍面白いことは確かだ。
>>658とは友達になりたいが、お前とは百万もらってもなりたくない。
661デフォルトの名無しさん:2011/02/05(土) 17:38:22
>>659
気の利いたツッコミもできないのなら黙ってろ禿脂
662デフォルトの名無しさん:2011/02/05(土) 17:51:43
colorもtitleも現在値がとれないんだよな>MS
663デフォルトの名無しさん:2011/02/05(土) 18:00:57
空気読めない645が墓穴を掘りまくってるようです
664デフォルトの名無しさん:2011/02/05(土) 18:30:26
墓穴を掘ってるのは646なのでは?
665デフォルトの名無しさん:2011/02/05(土) 18:54:38
墓穴に入らずんば疣痔を得ずと云うではないか
666デフォルトの名無しさん:2011/02/05(土) 19:13:47
>>661-662
>645からの流れのどこに面白い要素があったの?どこに気の利いたボケがあったの?
667デフォルトの名無しさん:2011/02/05(土) 19:20:55
ボケは知らんが粘着はあったな
668デフォルトの名無しさん:2011/02/05(土) 19:26:08
>>660は、自分は面白くて100万払っても友達にする価値がある人間とでも思ってるわけ?
669デフォルトの名無しさん:2011/02/05(土) 19:28:52
>>666=>>659
お前にはあと10年理解できんだろう。諦めろ。
670デフォルトの名無しさん:2011/02/05(土) 19:29:19
お前らいいかげん論理的思考で参考URLを論理的記述しろよ
671デフォルトの名無しさん:2011/02/05(土) 19:32:38
>>669
これが面白い要素たっぷりの気の利いたボケか
672デフォルトの名無しさん:2011/02/05(土) 19:34:10
春休み+週末ともなると大変ですなw
673デフォルトの名無しさん:2011/02/05(土) 19:34:56
大雪で外に出れないだけ
674デフォルトの名無しさん:2011/02/05(土) 19:40:17
>>666
findstr /r "面白い要素 気の利いたボケ" 645からの流れ
675デフォルトの名無しさん:2011/02/05(土) 19:46:40
流れを無視して質問。

taskkillで複数立ち上がってるうちの特定のjavaw.exeのプロセスを殺したいんだけど
起動元のコマンドを特定する方法はある?
676デフォルトの名無しさん:2011/02/05(土) 19:56:56
>>669
なんで10年すれば理解できるん?
あ、答えなくていいです。諦めてますから
677デフォルトの名無しさん:2011/02/05(土) 19:58:34
できるかどうか知らんけど、http://www.vector.co.jp/soft/winnt/util/se420729.html
で親プロセスID チェックするとか。
678デフォルトの名無しさん:2011/02/05(土) 20:03:23
>>676
その頃には大人になってるだろうから。
大人=成人?とか言うなよ。お前なら言いかねんが。
そんじゃお休み。
679デフォルトの名無しさん:2011/02/05(土) 20:05:54
>>678
ちょっとなに言ってるかわからないんですけど
680デフォルトの名無しさん:2011/02/05(土) 20:11:53
>>677
それでは出来ないですね。
親プロセスIDが知りたいんじゃないので…

例えば、javaw.exe -jar hoge.jar とかで起動してるプロセスを
外部から特定して殺したいって事です。

ウィンドウタイトルで区別できるかと思ったら軒並み
TrayMessageWindow
になってて判別不能。全部常駐アプリだからか。
681デフォルトの名無しさん:2011/02/05(土) 20:12:44
>>675
tasklist.exeはだめだけどtlist.exeなら親pidが分かるから
トリー表示もできたと思う
682デフォルトの名無しさん:2011/02/05(土) 20:15:02
おまえが
>起動元のコマンドを特定する方法はある?
と言ったんだろ
683デフォルトの名無しさん:2011/02/05(土) 20:15:05
すごいですね>>647さんって。
>>647さん、もう一度>>646>>647の文章を読んで
よく考えてみたほうがいいですよ。

もしかして>>647さんって日本に来てまだ日が浅い外人さんなのでしょうか?
半島の人?それとも学会の人間なのかな?
もし日本の方なのだとしたら、あなたの国語力は小学生低学年にも満たないと思われます。
小学生低学年では文章を解体し説明するなんてことは出来ませんが
そんな間違った解釈をしたりはしていませんよ。
使っている文章や漢字などから推測すると小学生というわけでは無さそうですので
活字がメインの本などを読んでもっと国語力を養ったほうがいいです。
そんな程度の文章で間違った解釈をし、恥ずかしげも無くその間違った解釈を堂々と発表し
論理的な解釈が出来ていないのはあなたのほうなのに相手が間違っているなどと罵るようでは
あなたは、あなたの周囲の人間にかなりの迷惑をかけているはずです。
あなたがこの先社会に出て、無用な誤解などから周囲に迷惑をかけないためにも
そしてあなた自身の為にも、日本語をもっと勉強してください。

とりあえず>>647さんに>>646を論理的に読み解く為のヒントを与えてあげましょう。
「人称」を調べて、この場合の「皆」が何を指すのかをよく考えることです。
684デフォルトの名無しさん:2011/02/05(土) 20:18:05
>>654誰かしりませんかね
SetWindowRgnの使い方覚えるか
685デフォルトの名無しさん:2011/02/05(土) 20:24:07
>>682
言葉がちょっとすれ違ったようですね。

(自分自身の)起動元、と思われたようですけど
起動(した)元、と書いたつもりでした。
686デフォルトの名無しさん:2011/02/05(土) 20:24:38
やっぱいいです。
自分でできそうです。
687675:2011/02/05(土) 20:30:27
誤解を招いたようなので再質問。

プロセスからそのプロセスを起動したコマンド全てを取得したい。

javaw.exe から javaw.exe -jar hoge.jar という元コマンド全体が欲しいということです。
688デフォルトの名無しさん:2011/02/05(土) 20:31:34
>起動(した)元、と書いたつもりでした。
同じだろ
元を使うな
コマンドラインと言え
689デフォルトの名無しさん:2011/02/05(土) 20:34:24
wmic.exeでできる。具体的には調べないと分からんのでパス
690デフォルトの名無しさん:2011/02/05(土) 20:36:59
基点が違うんですがね…
自分自身の起動元とは書いてないんですけど。

自分ではない目的プロセスの親コマンドライン(親自体は終了してる)でも
問題は解決します。
691デフォルトの名無しさん:2011/02/05(土) 20:39:18
>>685
ドキュメントも読めないのか...
javaw.exe プロセス ID 与えたらその親プロセス ID 得られるだろ。
そもそもソース見れば、どうやって取得してるかもわかるだろうに...。

と書いてたら、コマンドラインがほしいのか...。
Win32_Process の CommandLine でできるんじゃね?
態度が気に入らんから、詳しくは教えないけど。
692デフォルトの名無しさん:2011/02/05(土) 20:42:21
>>689
どうも。解決しました。
693デフォルトの名無しさん:2011/02/05(土) 20:50:03
>>691
あっけなく解決したので自分が情けないですが、
あなたの助けは要らなかったようです。
694デフォルトの名無しさん:2011/02/05(土) 21:38:03
>自分ではない目的プロセスの親コマンドライン(親自体は終了してる)でも
元を親に変えるな
親も使うな
ただのコマンドラインでええ
695デフォルトの名無しさん:2011/02/05(土) 21:40:57
茶々を入れるだけの能無しも不要です。
696デフォルトの名無しさん:2011/02/05(土) 21:56:32
こういう場合、派遣元に人員交代を要求して、切っちゃいます。
697デフォルトの名無しさん:2011/02/05(土) 21:57:23
能無し・・・だと…?
698デフォルトの名無しさん:2011/02/05(土) 21:59:38
バッチで累乗計算ってどうすればいいのでしょうか?
"^"は残念ながらバッチではxorの演算子みたいですね
一応検索したりヘルプを読んだりしてみたのですがわかりませんでした
今は for /l 文を使って代用しています。
簡単に一発ポンでできる方法があるなら教えて欲しいです。
それともうひとつ。

Aという数の右からN番目のビット値Bを取得する

で、今はAとNを入力して関数電卓で結果が正しいかどうかを
確認しているのですが、0か1が出力されるはずなのに
32桁目が-1になってしまいます
こうすればもっと簡単にN番目のビット値を取得できるっていうのがありましたら
教えてください。
699698:2011/02/05(土) 22:00:40
test.bat
@echo off
setlocal
:seta
set /p A="A=? "
rem set /a A=%A%
if not defined A goto :seta
:setn
set /p N="N=[1-32]? "
if not defined N goto :setn
if "%N%" == "end" exit /b
if %N% lss 1 goto :setn
if %N% gtr 32 goto :setn
rem ここから

if %N%==1 set /a B= "A&1" &goto :next
set X=1
for /l %%i in (2,1,%N%) do set /a X*=2
for /f %%i in ('set /a "(A&X)>>N-1"') do set B=%%i

rem ここまで
:next
echo A=%A%
echo N=%N%番目
echo B=%B%
goto :seta

700デフォルトの名無しさん:2011/02/05(土) 22:23:33
そこまで
701デフォルトの名無しさん:2011/02/05(土) 22:35:20
>>699
つ 32bit
702698:2011/02/06(日) 06:39:25
先にシフトして1で&すれば累乗計算は不要でした
Aという数の右からN桁目のビット値Bが欲しい場合は
set /a B= "A>>N-1&1"
これだけでよかったみたいですね
なんでこんな単純なこと気付かなかったんだろうか。。
おはずかしい限りです
今はこんな感じでビット値全て表示して確認しています

test.bat
@echo off
setlocal enabledelayedexpansion
:loop
set /p A="A=[32bitINT|end]? "
if not defined A goto :loop
if "%A%" == "end" exit /b
set B=
for /l %%N in (0,1,31) do for /f %%C in ('set /a "A>>%%N&1"') do set B=%%C!B!
echo=%A%
echo=%B:~0,8% %B:~8,8% %B:~16,8% %B:~24,8%
goto :loop
rem -- ここまで --

32桁目って正なら0で負なら1ってことなのでしょうか?
それと今回は必要なかったのですがバッチでは累乗計算は for /l で乗算を繰り返すしかないですか?

703デフォルトの名無しさん:2011/02/06(日) 15:03:10
ゴミ箱空にするだけなのにアクセス拒否られる
704デフォルトの名無しさん:2011/02/06(日) 16:16:16
runas
705デフォルトの名無しさん:2011/02/06(日) 17:34:50
バッチの中からDVDドライブをイジェクトするコマンドラインは?
706デフォルトの名無しさん:2011/02/06(日) 18:01:30
>>703-704
管理者として実行だろーけどGUIでやるしかねーよ 
707デフォルトの名無しさん:2011/02/06(日) 18:02:20
>>705
ねーよ
708デフォルトの名無しさん:2011/02/06(日) 18:04:55
powershell使え
709デフォルトの名無しさん:2011/02/06(日) 18:17:07
GUI使え
710デフォルトの名無しさん:2011/02/06(日) 18:32:19
Shell.Application
711デフォルトの名無しさん:2011/02/06(日) 18:33:34
nircmd.exe cdrom open x:
712デフォルトの名無しさん:2011/02/06(日) 19:34:35
'Shell.Application' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

'nircmd.exe' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
713デフォルトの名無しさん:2011/02/06(日) 21:30:59
wavファイルを鳴らす起動元の親コマンドを教えてください。
714デフォルトの名無しさん:2011/02/06(日) 22:16:27
start tada.wav
715デフォルトの名無しさん:2011/02/06(日) 22:30:36
それだとウィンドウが閉じません。
716デフォルトの名無しさん:2011/02/06(日) 22:36:22
条件後出しすな
717デフォルトの名無しさん:2011/02/06(日) 22:49:36
rundll32.exe c:\windows\system32\Msdxm.ocx,RunDll /play /close c:\windows\Media\tada.wav
718デフォルトの名無しさん:2011/02/06(日) 23:03:57
>>717
横からだけどWin7だからか、試してみたけど動かんなぁ…

RunDllってエントリが無いって言われる。
719デフォルトの名無しさん:2011/02/06(日) 23:24:29
powershell使え
720デフォルトの名無しさん:2011/02/07(月) 01:20:58
なんもできねー バッチフェイルだ
721デフォルトの名無しさん:2011/02/07(月) 14:59:39
【.cmd】 バッチフェイルスクリプト %6 【.bat】
722デフォルトの名無しさん:2011/02/07(月) 16:16:45
WMPlayer.OCX使え
723デフォルトの名無しさん:2011/02/07(月) 22:50:35
>>718
↓こっちの方法はどうかな?ウチのWinXP(SP3)では>>717の代わりに使う事が多いんだが…
"C:\Program Files\Windows Media Player\mplayer2.exe" /play /close c:\windows\Media\tada.wav
724デフォルトの名無しさん:2011/02/08(火) 00:25:51
うちじゃ閉じません
725デフォルトの名無しさん:2011/02/08(火) 01:17:59
んじゃamovie.ocx
726デフォルトの名無しさん:2011/02/08(火) 05:38:33
>717,723ともWMPが連続再生設定だと閉じないんだよね。
727デフォルトの名無しさん:2011/02/08(火) 09:58:53
>>723
Win7にはmplayer2自体無いからな…
728デフォルトの名無しさん:2011/02/08(火) 15:21:37
どっかからsndrec32.exeを引っこ抜いて来ればよい
729デフォルトの名無しさん:2011/02/08(火) 15:50:37
OS付属にこだわらないなら別のスクリプトでも普通に音は鳴らせるしね。
730デフォルトの名無しさん:2011/02/08(火) 16:22:40
文字列の置換について質問です。
[あいうえお-Category-かきくけこ]"のうち、Category部分をバッチに読み込んだ値に置換したいと思います。

○○.bat "あいうえお-Category-かきくけこ" "テスト2"
==
@echo off
set FileName=%~1
set Categ=%~2
set FileName=%FileName:Category=%Categ%%
echo ファイル名 %FileName%

%Categ%ではなく直接テスト2だと動くのですが、
置換先を読み込んだ値にしたい場合はどのようにすればよいのでしょうか?
731デフォルトの名無しさん:2011/02/08(火) 16:31:06
call set FileName=%%FileName:Category=%Categ%%%
732デフォルトの名無しさん:2011/02/08(火) 16:36:56
call様々やね なんでドキュメントに書いてないんだぼけ>ms
733デフォルトの名無しさん:2011/02/08(火) 17:45:48
>>731>>732
ありがとう。できました。
Callについていくつかググったところ、どこもバッチファイルを呼び出すと書いてありました。
バッチファイル内ではバッチファイルのみならず、バッチ的な動作である文字置換も
Callで呼び出さなければならないってことなんでしょうか?
734デフォルトの名無しさん:2011/02/08(火) 18:03:28
call 遅延展開でぐぐれ
735デフォルトの名無しさん:2011/02/08(火) 18:18:10
>>734
了解した。ありがとう。
736デフォルトの名無しさん:2011/02/08(火) 22:00:47
737デフォルトの名無しさん:2011/02/08(火) 22:30:49
wmicでcpu負荷何%以下のイベント監視ってできないのかな?
自分で監視ループ作るの?
738デフォルトの名無しさん:2011/02/09(水) 01:36:31
目指してる 未来が違うwwwwwwwww byシャープ
http://twitter.com/udony/statuses/7396610887655426 
739デフォルトの名無しさん:2011/02/09(水) 23:57:33
質問です。
「英語圏以外の人たちのために、コマンドラインを英語モードで立ち上げるバッチファイル」というのを実行し、そのゲームをプレイしてから(おそらく)
バッチファイルが英語で実行されるようになってしまいました。
(なお、そのバッチ内容は↓)
@echo off
CHCP 437
mode con lines=25
cmd

検索してみて、CHCPというのが問題なのかと思い、
CHCP 932
というバッチファイルを実行しても、新しく作ったバッチファイルが英語で実行されます。
バッチファイルの実行画面の右クリックから「規定値」を見ると、コードページは日本語になっているのですが、
バッチファイルのプロパティは英語で実行されてしまいます。
スタートメニューからのコマンドラインは日本語になっています。

管理者として実行しても同じでした。
どうすれば以前のようにデフォルトが日本語でバッチを実行できるようになるでしょうか?
OS はwin7 です。
740デフォルトの名無しさん:2011/02/10(木) 09:13:46
>>739
7にも該当するものがあるかどうかは分かりませんがこれはどう?
ttp://www.ne.jp/asahi/hishidama/home/tech/windows/cmd/cmd.html#AutoRun
741デフォルトの名無しさん:2011/02/10(木) 16:14:23
mode con cp select=932
742デフォルトの名無しさん:2011/02/10(木) 17:16:27
>>741
それって
jp
とやるのと何か違いはあるの?
743デフォルトの名無しさん:2011/02/10(木) 21:56:53
HKEY_CURRENT_USER\Console
744デフォルトの名無しさん:2011/02/10(木) 23:29:34
jp.batが無い
745デフォルトの名無しさん:2011/02/11(金) 00:02:23
>>743
HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe
のCodePageの値を437から932変更することで、
rem あいうえお
pause
というようなバッチファイルを作成・実行しても問題なく日本語で表示されるようになりました。
どうもありがとうございます。
746デフォルトの名無しさん:2011/02/11(金) 00:18:02
jpはchcp
chcpはその場限り
modeは設定(レジストリ)変更
747デフォルトの名無しさん:2011/02/12(土) 19:07:06
バッチで環境変数abc123から環境変数aに切り出した文字が数字かそれ以外かの判定って

set abc123=abc123
set a=%abc123:~0,1%
if "%a%" == "0" (goto :数字でした)
if "%a%" == "1" (goto :数字でした)
     ・
     ・
     ・
if "%a%" == "9" (goto :数字でした) else (goto :数字じゃなかった)

こんな風に、if文を羅列しなきゃ出来ませんか?
こうすりゃもっとスマートに書けるってのがあるなら教えてください。
正規表現使えたら楽なのに。
748デフォルトの名無しさん:2011/02/12(土) 19:21:05
findstr
749デフォルトの名無しさん:2011/02/12(土) 19:45:29
>>748
ああなるほど。
findstrって見つからなかったらerrorlevel返すのかな?
試してみます。ありがとう。
750デフォルトの名無しさん:2011/02/12(土) 20:14:04
>>747
set /a n=%a%
if "%n%" = "%a%" (echo 数値) else (echo 数値でない)

rem 複数桁でも動作するけど、0123 のように先行 0 があると数値でないと
rem 判定されるので、注意。
751デフォルトの名無しさん:2011/02/12(土) 20:20:57
複数のyyyymmdd のディレクトリにあるファイル(例として*.xls)を、
まとめて二階層上に移動させるのってどうすればいい?
(重複ファイルはなしの前提で可)

dir *.xls /s | move ...\

とかじゃ駄目なの?
オブジェクト指向とかじゃないから、moveの引数にパスとかまで渡せない?
まぁWindowsの検索使ったり、vbsで再帰処理するスクリプト書いてもいいんだけど…
752デフォルトの名無しさん:2011/02/12(土) 20:30:53
>>750
set /a だと%要らんよ。

set /a n=a
でいい
753デフォルトの名無しさん:2011/02/12(土) 20:40:33
>>751
move *.xls ..\..
754デフォルトの名無しさん:2011/02/12(土) 20:41:54
set n1=1234567890
call set n2=%%n1:%a%=%%
if %n1%==%n2% echo 数字でない
755デフォルトの名無しさん:2011/02/12(土) 20:45:43
>>753
それだと *.xlsm *.xlsb *.xlsx も移動されるんだけど
756デフォルトの名無しさん:2011/02/12(土) 20:56:07
マジかよ・・・
DOSの8+3形式のトラップ?
757デフォルトの名無しさん:2011/02/12(土) 20:59:42
MSもすっかり忘れててxlsmとか作っちゃたのよぉらららんらん
758デフォルトの名無しさん:2011/02/12(土) 21:08:45
>>755
> それだと *.xlsm *.xlsb *.xlsx も移動されるんだけど

だったら、dir *.xls /s | move ...\ なんて書かないでほしいなぁ。

とりあえず、ぱっと思いつくのは、

for /f %f in ('dir /b ^| findstr "\.xls$"') do move %f ..\..

あたりかな。
759デフォルトの名無しさん:2011/02/12(土) 21:09:56
for %%I in (*.xls) do if /i %%~xI==.xls move %%I ..\..\
760デフォルトの名無しさん:2011/02/12(土) 21:14:55
761デフォルトの名無しさん:2011/02/12(土) 21:18:25
>>750
>>752
>>754
ちょっと頭使えば方法はいろいろあるんですね
参考になりました。ありがとうございます
762751:2011/02/12(土) 21:55:47
やっぱループ回すしかないですか
バッチでなくコマンドでサクッとやりたかったんですが
dirの/sオプションは表示専用みたいなものか…

あと>>755は自分じゃないです
763デフォルトの名無しさん:2011/02/12(土) 22:11:15
別にバッチでなくコマンドでやってるだろ?
764デフォルトの名無しさん:2011/02/12(土) 22:14:42
>>756
8+3形式の名前が無い状態だといけるな。
765デフォルトの名無しさん:2011/02/12(土) 22:16:48
>>758
>for /f %f in ('dir /b ^| findstr "\.xls$"') do move %f ..\..

^←これってどういう意味?
766デフォルトの名無しさん:2011/02/12(土) 22:23:42
エスケープ
767デフォルトの名無しさん:2011/02/12(土) 22:24:57
コマンドで
for /f "delims=" %I in ('dir /s /b *.xls') do if /i %~xI==.xls move "%~I" "%~I\..\..\..\"
768デフォルトの名無しさん:2011/02/12(土) 22:32:42
>>766
ありがとうございます。
769デフォルトの名無しさん:2011/02/13(日) 04:42:49
なんのこれしき
770デフォルトの名無しさん:2011/02/13(日) 14:03:38
お前が言うな
771デフォルトの名無しさん:2011/02/13(日) 16:30:24
もめるな
772デフォルトの名無しさん:2011/02/13(日) 16:36:40
>>758
"delims="が足りないな
>>758-759
"%~f"
773デフォルトの名無しさん:2011/02/13(日) 18:28:09
LFNはめんどうだにゃ
774デフォルトの名無しさん:2011/02/13(日) 20:02:23
なんのそれしき
775デフォルトの名無しさん:2011/02/13(日) 20:09:45
お前が言うな
776デフォルトの名無しさん:2011/02/13(日) 22:19:58
たまにはforfiles使えよ せっかくあるんだから
777デフォルトの名無しさん:2011/02/13(日) 23:44:12
ねーよ
778デフォルトの名無しさん:2011/02/14(月) 00:04:35
MSがサポート中のOSにはあるだろ?
779デフォルトの名無しさん:2011/02/14(月) 00:15:06
780デフォルトの名無しさん:2011/02/14(月) 04:12:12
C:\Windows\System32\forfiles.exe
781デフォルトの名無しさん:2011/02/14(月) 17:27:31
XP Sp3には無いな。
782デフォルトの名無しさん:2011/02/14(月) 19:26:48
Windows2003 や WindowsXP x64 にはある。
2003以降は何気に choice.exe,、timeout.exe とかがあるから地味に便利。
783デフォルトの名無しさん:2011/02/14(月) 20:30:25
Editionによっても違ってくるし、Windows Embeddedだと
意図的に入れてかないと入らないから、マイナーなツールが
標準で入ってるかどうかはあんま意味がない
MSサイトなり他から持ってくるなりでターゲットで動けばOK
784デフォルトの名無しさん:2011/02/14(月) 22:06:57
後から追加インストール有りなら、バッチなんて不自由なもん使わねーよ。
適当なLL入れれば、それだけで作業の大部分は完了。
785デフォルトの名無しさん:2011/02/14(月) 23:51:27
同じ環境変数に書き込むバッチを複数立ち上げたときに、
環境変数に対する排他制御ってバッチだけで実装できますか?
786デフォルトの名無しさん:2011/02/15(火) 00:10:15
環境変数はプロセス内だろ?
787デフォルトの名無しさん:2011/02/15(火) 00:18:05
>>786
それなら、vcvars32.batが親シェルの環境変数を設定できることを説明してくれ。
788デフォルトの名無しさん:2011/02/15(火) 00:24:55
>>786
>>787
setlocalつかって、立ち上げたプロセスにしか反映しないようにしてみました。
この場合、同じ変数名つかってても影響ないんでしょうか?
SET TEMP=%TEMP% "abc"
みたいな感じで、複数のバッチでTEMPを書き換えても、別プロセスだと問題なしですか?
789デフォルトの名無しさん:2011/02/15(火) 00:50:44
setlocalは関係ねーだろ
790デフォルトの名無しさん:2011/02/15(火) 05:00:17
各バッチファイルで好き勝手に書き換えてもそれぞれ独立して保持するだけだから問題なし。
例外はa.batでcall b.batした時、b.batの変更がa.batにも影響するくらいかな。

逆に根っこから恒久的に全部変えたかったらレジストリのEnvironmentを書き換える。
791デフォルトの名無しさん:2011/02/15(火) 06:50:24
>>789
具体的にどう関係ないんでしょうか?
バッチファイル内の環境変数のローカライズを開始ってなってるので、
やらないと全体に反映されませんか?

>>790
独立して保持ですか。メモリ上に展開されてるだけなイメージでOKでしょうか?
レジストリにさえ書き込まなければOKってことですね。

792デフォルトの名無しさん:2011/02/15(火) 13:49:11
>>787
> それなら、vcvars32.batが親シェルの環境変数を設定できることを説明してくれ。
16bit osの話でもしてんのか?ぼけ

>>788
> setlocalつかって、立ち上げたプロセスにしか反映しないようにしてみました。
あほか?
793デフォルトの名無しさん:2011/02/15(火) 13:58:51
>>792
ぼけとかあほとか…
底辺IT土方には他に語彙がないんか?
794デフォルトの名無しさん:2011/02/15(火) 14:00:28
例えば?
795デフォルトの名無しさん:2011/02/15(火) 14:10:25
かすとか?
796デフォルトの名無しさん:2011/02/15(火) 14:18:11
ふたつコマンドプロンプトをたちあげて、一方で
set boke=aho
とやって、他方で、
echo %boke%
とやっても展開されないのですが?
797デフォルトの名無しさん:2011/02/15(火) 14:50:20
cmd.exe /c start 〜すると一瞬だけウィンドウが見えちゃうんだけど
cmd以外で関連付けを使って開く方法ってないですか?
798デフォルトの名無しさん:2011/02/15(火) 14:59:58
shellexec_rundll
urlprotocolhandler
799デフォルトの名無しさん:2011/02/15(火) 15:20:19
.lnk最小化
800デフォルトの名無しさん:2011/02/15(火) 18:03:36
>>792
vcvars32.batの「32」が読めないか? カス。
801デフォルトの名無しさん:2011/02/15(火) 18:32:49
それがどうした?ボケ
802デフォルトの名無しさん:2011/02/15(火) 18:38:18
>>796
アホとボケは相容れないため展開されません
803デフォルトの名無しさん:2011/02/15(火) 18:47:38
>>787
親シェルの?
804デフォルトの名無しさん:2011/02/15(火) 18:49:50
起動元の親コマンドの類だろ
805デフォルトの名無しさん:2011/02/15(火) 18:59:58
現シェルの
806デフォルトの名無しさん:2011/02/15(火) 19:02:01
基点が違うんですがね…
807デフォルトの名無しさん:2011/02/15(火) 19:12:21
>>803-806
>>792のカスは16bitOSと言っているので、それは関係ない。
808デフォルトの名無しさん:2011/02/15(火) 19:12:58
なになにバッチファイル名に32って付けると親シェルの環境変数が設定できるって?すごっ
809デフォルトの名無しさん:2011/02/15(火) 19:18:33
ファイル名に32が付くとwinsetが使えると聞いてやってきました
810デフォルトの名無しさん:2011/02/15(火) 19:18:38
名前忘れたが、16bitOSの頃、親プロセスの環境に設定するコマンドがあったな
811デフォルトの名無しさん:2011/02/15(火) 19:38:19
cmd /c set boke=aho
echo %boke%
とやっても展開されないのですが?
812デフォルトの名無しさん:2011/02/15(火) 19:47:08
cmd /c set32.bat boke=aho
echo %boke%
だろ
813デフォルトの名無しさん:2011/02/15(火) 20:42:57
reg add HKCU\Environment /v boke /t REG_SZ /d aho
814デフォルトの名無しさん:2011/02/15(火) 21:07:41
set STR="1番目, 2, abc, いろいろ..., 最後"
と、","で区切られた区切りの数は不定の文字列があって、
1番目と最後のトークンだけを取り出したいんだけどどう書けばいいですか?

for /f "tokens=1,* delims=," %T (%STR%) do echo "%T" &echo "%U"
で "1番目" と残りは取り出せるんだけど。。
最後を取り出すのに何かいい方法があれば教えてください
815デフォルトの名無しさん:2011/02/15(火) 21:09:47
それをループさせればよい
816デフォルトの名無しさん:2011/02/15(火) 21:16:18
for %T in (%STR:~1,-1%) do if not defined first set first=%T& set last=%T
echo %first%
echo %last%
817デフォルトの名無しさん:2011/02/15(火) 22:41:26
>>815
>>816
レスありがとうございます。

>>816
do () &とすることで、いい感じなのですが区切り文字は ","カンマのみとしたいんです。
スペースとかの他の区切り文字と判断される文字があると分割されてしまいます。

>>815の言うようにやっぱりループさせるしかないのかなー?
818デフォルトの名無しさん:2011/02/15(火) 22:50:36
for %T in (%STR:,=","%) do set last=%T&if not defined first set first=%T
echo %first%
echo %last%

819デフォルトの名無しさん:2011/02/15(火) 23:11:06
>>818
いやもうなんだか、、、ほんと頭が下がります。。
>>816みてそのやり方に気付けなかった自分が情けないのと
要件満たしてあっさり書けてしまう>>818さんに感心とで複雑な気分です。。

もう私の頭なんて固くなっちゃってるんでしょうねー。^^;

>>818さん、ほんとにありがとうございました。
820デフォルトの名無しさん:2011/02/16(水) 13:07:26
なんのそれしき
821デフォルトの名無しさん:2011/02/16(水) 18:13:47
ttp://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/20040805/1/start.shtml
使用例  
新たにウインドウを開くことなく,「test.bat」というバッチ・ファイルを起動する
start /b test.bat

これ書いたのあほぼけかす?
822デフォルトの名無しさん:2011/02/16(水) 18:46:38
>>821
何が問題なの?
823デフォルトの名無しさん:2011/02/16(水) 19:04:20
おまいさんは
>新たにウインドウを開くことなく,「test.bat」というバッチ・ファイルを起動する
のに
start /b test.bat
てやるかい?
824デフォルトの名無しさん:2011/02/16(水) 19:22:48
出来ることを、やっちゃいけないのか?
825デフォルトの名無しさん:2011/02/16(水) 19:59:09
好きなだけやれば?
826デフォルトの名無しさん:2011/02/16(水) 21:48:15
>>822 >>824
>新たにウインドウを開くことなく,「test.bat」というバッチ・ファイルを起動する
のに
start /b test.bat
てやるそうです
827デフォルトの名無しさん:2011/02/16(水) 21:55:55
何が問題なの?
828デフォルトの名無しさん:2011/02/17(木) 01:08:14
どうでもいいことにこだわる馬鹿が一匹いるだけ
829デフォルトの名無しさん:2011/02/17(木) 01:17:41
start notepad と start /b notepad はどう違う?
830デフォルトの名無しさん:2011/02/17(木) 02:53:34
違いはあるがnotepadじゃ違いは見えんよ
831デフォルトの名無しさん:2011/02/17(木) 22:49:53
あったよ start /b の使い道
ttp://support.microsoft.com/kb/105851/ja
832デフォルトの名無しさん:2011/02/19(土) 01:18:15
^(キャレット)でエスケープした文字列をテキストファイルからtypeで
読み出した時に、abc^&だとabc&になって読み出されます。
^でエスケープしたままの状態の状態で読み出すことってできますでしょうか?
833デフォルトの名無しさん:2011/02/19(土) 01:28:12
はぁ?
834デフォルトの名無しさん:2011/02/19(土) 02:25:51
>>832
コマンドプロンプトからでもバッチからでもtest.txtの中身がabc^&でtype test.txtとしてもXPSP3ではabc^&と表示されたよ
typeの結果を構文解析されるような使い方してるんじゃないの?
835デフォルトの名無しさん:2011/02/19(土) 02:29:45
>>834
エックス、プレイステーションポータブル3…orz
836デフォルトの名無しさん:2011/02/19(土) 02:39:04
for /f %%I in (a.txt) do set x=%%I
echo %x%
みたいな話だろ
837デフォルトの名無しさん:2011/02/19(土) 02:43:49
遅延展開つかえばええんでね?
838834:2011/02/19(土) 02:57:09
どういう使い方してるのかわかんないから外してるかもしれんけど
文字列を""で囲んで取り出すとかは?
""を外したくなったら環境変数にセットして%VER:~1,-1%で外せるし
構文解析される前に%VER:^=~~%と^を^^と置換しておくことも出来るよ
839デフォルトの名無しさん:2011/02/19(土) 03:10:17
>>838
txtの中身がcsvとかで各フィールド毎に「"」があったり無かったりして回避できない罠
840デフォルトの名無しさん:2011/02/19(土) 03:50:59
遅延展開つかえばええんでね?
841デフォルトの名無しさん:2011/02/19(土) 09:19:21
バッチファイルで変数をecho表示(a!b!c)したいのですが
なぜ ! の頭に ^ を14個も付ける必要があるのか誰か教えてください

setlocal enabledelayedexpansion
set b=
set x=a^^^^^^^^^^^^^^!b^^^^^^^^^^^^^^!c
echo %x%
842デフォルトの名無しさん:2011/02/19(土) 16:06:17
そんなに必要ないけど?
843デフォルトの名無しさん:2011/02/19(土) 16:11:25
>>644の後者に書いてあるやん
844デフォルトの名無しさん:2011/02/19(土) 16:40:07
>>841
setlocal enableextensions disabledelayedexpansion
845デフォルトの名無しさん:2011/02/19(土) 17:26:36
>>842
>>841のやり方では14個必要ですよ?
846デフォルトの名無しさん:2011/02/19(土) 17:39:19
10個で十分ですよ
847デフォルトの名無しさん:2011/02/19(土) 17:52:36
ほんとだ。ごめん。
848デフォルトの名無しさん:2011/02/19(土) 18:14:06
>>844
拡張ONがデフォの環境じゃenableextensionsは要らないけどね。
849デフォルトの名無しさん:2011/02/19(土) 19:14:07
! --> ^^!
^ --> ^^^^

^^! --> ^^^^^^^^^^!
850844:2011/02/19(土) 20:07:24.63
set x=a^^^^^^^^^^!b^^^^^^^^^^!c
構文解析時に%と^が評価されて ^2個がひとつになり
x=a^^^^^!b^^^^^!c
^が半分の5個となり

遅延展開が有効だと遅延展開の評価時に ^2個がひとつに ^!が !となって
x=a^^!b^^!c
xに代入されるのは a^^!b^^!c

echo %x%
%と^評価時に%x%に a^^!b^^!cが展開され ^^が^となり
echo a^!b^!c
遅延展開の評価時に ^!が !となって
echo a!b!c
a!b!c

echo on にして、コンソールでは遅延展開の展開は見れないことを考慮しながら
setlocal enabledelayedexpansion
set b=
set x=a^^^^^^^^^^!b^^^^^^^^^^!c
setlocal disabledelayedexpansion
echo %x%
としたり最初から遅延展開を無効にしてみたりすると動作が理解しやすくなると思います。

といった意味で844書いたんだけど、言葉足らずすぎだったかなと。^^;
851デフォルトの名無しさん:2011/02/19(土) 20:28:19.60
見苦しいのお
852832:2011/02/19(土) 21:24:38.57
typeの結果をforで取り出して環境変数にセットして、
コマンドに引き渡す使い方してます。
838さん教えてくださったやりかたで、今回は回避できました。
みなさん色々ありがとうございました。
853デフォルトの名無しさん:2011/02/19(土) 21:25:09.75
> ^2個がひとつになり
という表現はまぎらわしいか。

構文解析時や遅延展開時に ^が直後の文字をエスケープして消える

に訂正します。
854デフォルトの名無しさん:2011/02/19(土) 23:39:29.45
環境変数つきでコマンドを実行させたいのですが、
(a) set HOGE=HOGE && (環境変数HOGEを使うコマンド)
と実行させたところ、コマンドが環境変数HOGEを読み取ってくれません。

以下のよう二行に分けて実行したところ、環境変数を読み取ってくれます
(b) set HOGE=HOGE
  (環境変数HOGEを使うコマンド)

外部コマンドとしてRubyから(a)のように
  `set HOGE=HOGE && (環境変数HOGEを使うコマンド)`
というように実行したいのですが、なんで(a)では処理できないんでしょうか?
やりかたを教えてください。よろしくお願いします。
855デフォルトの名無しさん:2011/02/19(土) 23:57:22.29
またかい
set HOGE=HOGE && call (環境変数HOGEを使うコマンド)
856デフォルトの名無しさん:2011/02/20(日) 00:00:11.86
ねんのため
set HOGE=HOGE && call (環境変数%%HOGE%%を使うコマンド)
857854:2011/02/20(日) 00:12:12.66
ありがとうございます。
>>855-856
試したのですが、(a)だと失敗して(b)だとうまく行きます
identify.exeプログラムに、一時的に環境変数を渡したいのですが。。

(a)set MAGICK_CODER_MODULE_PATH=c:\imagemagick\modules\coders && call identify.exe -list format
(b)set MAGICK_CODER_MODULE_PATH=c:\imagemagick\modules\coders
  call identify.exe -list format
858デフォルトの名無しさん:2011/02/20(日) 00:25:47.99
渡ってるよ
渡らないという根拠はなんだ?

ところで(a)と(b)で渡しているものに微妙な違いがあるが、わかっているのか?
echo "%MAGICK_CODER_MODULE_PATH%"
してみ
859デフォルトの名無しさん:2011/02/20(日) 00:44:36.52
>渡らないという根拠はなんだ?
identifyの挙動の違いでしか判断してませんでした。すみません。
echoさせると、callをつけたときに、
MAGICK_CODER_MODULE_PATHが表示されるのを確認しました。

>ところで(a)と(b)で渡しているものに微妙な違いがあるが、わかっているのか?
call identifyの代わりに、call echo "%MAGICK_CODER_MODULE_PATH%"
としても、(a)と(b)の表示結果が同じに見えるのですが。
なんでidentifyの挙動が違うか分かってないないです。。
教えてください。お願いします。
860デフォルトの名無しさん:2011/02/20(日) 00:47:49.66
"c:\imagemagick\modules\coders"
"c:\imagemagick\modules\coders "
の違い
861854:2011/02/20(日) 00:53:53.08
>>860
うわあああ としか言いようが。。これで何時間悩んだのだろう
とても助かりました。ありがとうございます
862デフォルトの名無しさん:2011/02/20(日) 13:20:48.23
バッチファイルもいつのまにか進化してんのな
遅延展開とかsh並にきもいw
863デフォルトの名無しさん:2011/02/20(日) 13:49:47.24
なんちゃって言語だからな
VBとあんま変わらんような気もする
864デフォルトの名無しさん:2011/02/20(日) 14:08:45.93
バッチでlispとか組めるんかな?
865デフォルトの名無しさん:2011/02/20(日) 17:50:39.82
>>864
動的な配列と文字列処理がもう少し充実すればなんとか
866デフォルトの名無しさん:2011/02/20(日) 18:04:06.79
デフォルト以外の関連付けで起動ってどうやる?
867デフォルトの名無しさん:2011/02/20(日) 18:38:30.96
start /v:print a.txt
868デフォルトの名無しさん:2011/02/21(月) 08:07:28.03
質問です。
会社のPCなのですが、お昼休みから戻ると起動していたソフトの動作が
ものすごく重いのです。
ウインドウをアクティブにし、ソフトを使うと徐々に軽くなり、元の軽さに戻ります。
業務上常にソフトは起動していなければならないのですが、お昼休み後は
この症状のために10分ほどまともに業務ができません。
そこでスクリプト?で常にWindows?かソフト?を動かして、アイドル状態にならないように
したいのですが、どのようにすれば良いか教えていただけないでしょうか。

※まだ試していませんが、ttp://kenknown.blog42.fc2.com/blog-entry-62.html
を実行すれば良いのだと思うのですが、エコではないので違う方法を教えてください...
869デフォルトの名無しさん:2011/02/21(月) 08:45:21.67
>>868
昼休み中にウイルススキャンが走ってるパターンだと思われるので、
アイドルを回避しても、あまり状況は変わらないと思われる
870デフォルトの名無しさん:2011/02/21(月) 09:28:49.19
後出しで申し訳ないです。
たしかに昼休みにウイルスバスターが走っていましたが、
管理者に確認し部署ごと深夜に変更していただきました。
アイドル?により重いのは以前からの認識があるようなのですが
Windowsの仕様らしいとのことで2年間放置されているとのことです。
871デフォルトの名無しさん:2011/02/21(月) 11:35:53.00
ケチってセロリン&メモリ極小仕様&低速安物HDDなんじゃね → 会社PC
872デフォルトの名無しさん:2011/02/21(月) 11:40:51.46
XPは長時間放置するとちびちびとpagefile.sysにスワップアウトしていくから
そのあとマシン触るとガリガリ言って重くなるって話かも。
873デフォルトの名無しさん:2011/02/21(月) 14:35:27.84
>>870
十分にメモリが大きければ、仮想メモリのサイズを最小にする
メモリが少ない場合は、アプリ側の修正が必要だから無理
HDDのアクセスの早い部分に仮想メモリが来るようにデフラグするくらいしかない。
874デフォルトの名無しさん:2011/02/21(月) 15:21:21.02
>>873
設定変更が必要ですか・・・。ほかに方法はないのであれば、
こっそり>>868のスクリプトのお世話になります。
ありがとうございました
875デフォルトの名無しさん:2011/02/21(月) 15:41:34.21
何か物凄く勘違いしてそうだけど、CPU稼働率が上がってても
多分状況は変わらんぞ。
876デフォルトの名無しさん:2011/02/21(月) 16:02:29.10
>>875
俺も、それを突っ込もうかと思ったが
スワップのスレッド優先度がどの程度になってるのか知らんので
CPU使用率が100%になれば、意外とスワップすら出来なくなり
>>874の思惑通りになる可能性も否定できないので止めた
877デフォルトの名無しさん:2011/02/21(月) 22:43:30.83
アフターランチ症候群
なんか懐かしい
878874:2011/02/22(火) 22:06:22.60
本日試してきました。
一つだけだと100%にならなかったので2つ実行しました。
お昼休み後、プロセスを停止すると即サクサク動作でした。
879デフォルトの名無しさん:2011/02/23(水) 15:15:27.35
バッチファイルスクリプト と関係ないだろ いね
880デフォルトの名無しさん:2011/02/23(水) 18:49:54.69
ドラッグ&ドロップでファイルを受け取って
そのファイル名を現在時刻に直して
スクリプトの場所に0223のような日付の名前のフォルダを作って
そこにファイルを移動するやつ
誰か作ってください。お願いします。
881デフォルトの名無しさん:2011/02/23(水) 19:15:33.88
断る。
882デフォルトの名無しさん:2011/02/23(水) 20:46:57.01
@echo off
set t=%time::=%
set d=%date:/=%
md "%~dp0%d:~-4%" 2>nul
copy /y "%~1" "%~dp0%d:~-4%\%t:~0,4%%~x1" >nul 2>&1
del /f /q "%~1" >nul 2>&1
883デフォルトの名無しさん:2011/02/23(水) 21:30:07.38
なんと危険な!
884デフォルトの名無しさん:2011/02/23(水) 21:50:17.60
885デフォルトの名無しさん:2011/02/24(木) 05:40:33.52
エロ画像の整理にいいね!
886デフォルトの名無しさん:2011/02/24(木) 17:29:15.93
エロ画像整理.cmd
887デフォルトの名無しさん:2011/02/24(木) 21:34:57.76
for /f "delims=" %%A in ('dir /b /a-d /s') do move %%A .
for /f "delims=" %%B in ('dir /b /ad /s ^| sort /r') do rmdir %%B 2> nul
888デフォルトの名無しさん:2011/02/24(木) 22:13:17.47
エロ画像整理.bat
889デフォルトの名無しさん:2011/02/24(木) 22:37:23.43
しつこいんだよ
おまえも面白くないってわかってんだろ?
890デフォルトの名無しさん:2011/02/24(木) 23:03:58.25
特定の文字が一番最初にでたのが何文字目かって、
簡単に調べる方法ありますか?

abc-deだったら4文字目とか
891デフォルトの名無しさん:2011/02/24(木) 23:13:08.53
InStr("abc-de","-")
892デフォルトの名無しさん:2011/02/24(木) 23:27:10.59
すみません。前提条件抜けてました。
WSH使わないでお願いします。
893デフォルトの名無しさん:2011/02/25(金) 00:32:17.60
InStr.cmd "abc-de" "-"

894デフォルトの名無しさん:2011/02/25(金) 00:48:41.91
set /p x=%1>x
set /p y=%x:*%1=%>y
for %%x in (x) do set x=%%~zx
for %%y in (y) do set y=%%~zy
set /a x-y
895デフォルトの名無しさん:2011/02/25(金) 00:49:33.62
set /p y=%x:*%2=%>y
896デフォルトの名無しさん:2011/02/25(金) 01:02:35.00
@echo off
call :match abc-de -
echo %errorlevel%
exit /b

:match
setlocal enableextensions disabledelayedexpansion
set src=%1> nul 2>&1
set char=%2> nul 2>&1
set /a cnt=0
date /t>nul 2>&1
setlocal enableextensions enabledelayedexpansion
if defined src if defined char call :match_loop
endlocal
endlocal
exit /b %errorlevel%

:match_loop
set idx=!src:~%cnt%,1!> nul 2>&1
if not defined idx exit /b 0
set /a cnt=cnt+1
if "%char:~0,1%%char:~0,1%" neq "%idx%%idx%" goto match_loop
exit /b %cnt%
897デフォルトの名無しさん:2011/02/25(金) 01:07:47.07
そんなの出されてもわけがわからないので、コメント付きでお願いします。
1行づつの説明やフローチャートでも結構です。
898デフォルトの名無しさん:2011/02/25(金) 01:18:24.65
アホかwww
@echo off 外して実行して、理解できない動作だけ聞け
899デフォルトの名無しさん:2011/02/25(金) 01:18:55.93
すみません。前提条件抜けてました。
簡単に調べる方法ありますか?
900デフォルトの名無しさん:2011/02/25(金) 01:20:11.66
ありません
901デフォルトの名無しさん:2011/02/25(金) 01:24:26.19
十分簡単だと思うけど?
昔、日付の計算(現在日時+n日後とか、次の金曜日は何月何日とか…)させた時は、
何の修行かと思うほど大変だった…orz
902デフォルトの名無しさん:2011/02/25(金) 01:30:24.61
簡単だと言うのなら簡単でいいですから解説をお願いします。
903デフォルトの名無しさん:2011/02/25(金) 01:32:13.94
904デフォルトの名無しさん:2011/02/25(金) 01:48:02.20
echoをoffにする
:matchをcallする
%errorlevel%をechoする
exitする
...
...
905デフォルトの名無しさん:2011/02/25(金) 02:12:10.11
外注に保守できるようソースコードにコメント付けさせるとこんな役立たずなコメントになったな
906デフォルトの名無しさん:2011/02/25(金) 03:17:59.26
>>902
(abc-de) - (-de) = abc
abc = 3
3 + 1 = 4
4文字目
907デフォルトの名無しさん:2011/02/25(金) 07:42:02.60
>>904
すばらしい解説だ。
これならきっと、>>902にも理解できることだろう。
908デフォルトの名無しさん:2011/02/25(金) 13:46:30.66
ping localhost -n 60 > nul
これで約1分のウェイトを入れてみた(はずな)のですが
ウェイトの処理中にキー入力があったときにこのウェイトを飛ばそうと思っています
入力待ちにすると入力待ちの状態から処理が進まずpingが呼び出せず困っています・・・

909デフォルトの名無しさん:2011/02/25(金) 14:56:23.27
sleep.exeでも探した方が早いんじゃ
910デフォルトの名無しさん:2011/02/25(金) 15:08:36.55
Vista以降ならtimeout /t 60
911デフォルトの名無しさん:2011/02/25(金) 15:43:09.37
>>910
それを言うなら、Vistaじゃなくて 2003 以降。
912デフォルトの名無しさん:2011/02/25(金) 17:48:19.55
>>896
set の度にnulにリダイレクトしてたり、無意味なdateや
文字比較で2連続にしてる意味がわからんのだが…
913デフォルトの名無しさん:2011/02/25(金) 18:11:23.78
>>912
setは%1と%2に何が渡されるか分からんから
dateはerrorlevelを0にするため
914デフォルトの名無しさん:2011/02/25(金) 18:13:26.21
>>910
XPじゃだめかorz
915デフォルトの名無しさん:2011/02/25(金) 18:13:49.49
>>912
文字の比較で2回重ねるのは、その文字自体が「"」だった場合の対策
916デフォルトの名無しさん:2011/02/25(金) 18:55:56.54
なるほど
917デフォルトの名無しさん:2011/02/25(金) 19:44:39.89
底までしてバッチ使うかね
918デフォルトの名無しさん:2011/02/25(金) 22:49:42.75
>>917
Windows標準機能以外のツールを使うことは罷り成らん
とほざく底辺管理部門がいる限りは、仕方ないわな。
919デフォルトの名無しさん:2011/02/25(金) 23:09:07.77
そんな奴はいねえ
920デフォルトの名無しさん:2011/02/25(金) 23:43:52.72
>>891はWindows標準機能だけど?
921デフォルトの名無しさん:2011/02/26(土) 00:38:51.24
自分が使えない、あるいは、他の人が理解出来ないって理由は良くある
バッチはDOS時代から使われてて理解しやすいからOKって
コマンド類とか昔と結構変わってるし、絶対バッチの方が
複雑になって大変だと思うんだけど、それを指摘すると
使用されるコマンドも制限される恐れがあるので、大人しくバッチを使う
922デフォルトの名無しさん:2011/02/26(土) 00:40:24.20
いや、他人に非標準のツールをインストールさせるのが面倒なんだよ。
923デフォルトの名無しさん:2011/02/26(土) 01:26:23.27
batだろうとcomだろうとexeだろうと使う側は理解できないよ
924デフォルトの名無しさん:2011/02/26(土) 02:11:13.90
・自分が使えない物=>使えないとツールのせいにする
・仕様書は読まない
・他の人がで切れば身内ができないはずがない→やれ
インストールさせてそのツールが進めた人にあわなかった時 俺の運命は・・・
925デフォルトの名無しさん:2011/02/26(土) 10:38:42.57
>>920
> >>891はWindows標準機能だけど?

どこの Windows ?
うちの WindowsXP SP3 には入ってない。

>>922
> いや、他人に非標準のツールをインストールさせるのが面倒なんだよ。

だね、だけどだったらバッチから vbscript とか呼べばいいじゃんと思うが。
926デフォルトの名無しさん:2011/02/26(土) 11:07:44.60
e.bat

explorer.exe
927デフォルトの名無しさん:2011/02/26(土) 14:25:00.98
e.bat

EXIT
928デフォルトの名無しさん:2011/02/26(土) 14:30:28.96
コマンドプロンプトのDELって怖いよね・・・
929デフォルトの名無しさん:2011/02/26(土) 17:44:10.13
ダイドコロのKNIFEって怖いよね・・・
930デフォルトの名無しさん:2011/02/26(土) 19:31:41.92
>>908
XP標準機能だけでできませんか?
931デフォルトの名無しさん:2011/02/26(土) 19:58:08.13
>>930
vbsのpopupの呼び出しじゃだめか?
932デフォルトの名無しさん:2011/02/26(土) 21:52:47.41
batファイル初心者なのですが
プロセスにa.exeが起動されたらb.exeを終了してc.exeを起動するにはどうしたらいいですか?
933デフォルトの名無しさん:2011/02/26(土) 22:21:21.71
>プロセスに
の部分が分からない
934デフォルトの名無しさん:2011/02/26(土) 22:24:41.36
OSバージョンによって違うが
935デフォルトの名無しさん:2011/02/26(土) 22:26:22.82
プロセスの監視にbatを使うのは嫌だな
936デフォルトの名無しさん:2011/02/26(土) 22:35:44.00
こんなか?
俺なら、絶対に動かしたくないな…

@echo off
set task1=a.exe
set task2=b.exe
set task3=c.exe
set flag=1
:taskkill
for /f "usebackq tokens=*" %%A in ( `tasklist /fi "imagename eq %task1%" 2^>nul ^| find /i "%task1%"` ) do (set flag=2) & taskkill /fi "imagename eq %task2%" >nul 2>&1
if %flag%. neq 2. ping 127.0.0.1 > nul 2>&1 & goto taskkill
start "%task3%"
937デフォルトの名無しさん:2011/02/26(土) 22:40:27.87
start "%task3%"

ぷっ
938デフォルトの名無しさん:2011/02/26(土) 22:43:07.22
アチャー
939デフォルトの名無しさん:2011/02/26(土) 22:44:07.21
俺も、そんなどんくさいの絶対に動かしたくないな…
940デフォルトの名無しさん:2011/02/26(土) 22:45:19.80
>>937
何か?
プロセスの管理だから、task3がコマンドの場合も考慮して
必ず別プロセスで立ち上げようと思うのが悪いことなのか?
941デフォルトの名無しさん:2011/02/26(土) 22:48:05.55
そんな初歩中の初歩も知らないなんて
942デフォルトの名無しさん:2011/02/26(土) 22:48:15.09
startの仕様を知らんとは
943デフォルトの名無しさん:2011/02/26(土) 22:48:29.37
別プロセスじゃね
別ウインドウだった
944デフォルトの名無しさん:2011/02/26(土) 22:48:36.30
start/?
945デフォルトの名無しさん:2011/02/26(土) 22:49:48.15
flagなんかいらんだろ?
946デフォルトの名無しさん:2011/02/26(土) 22:52:51.54
すみません最後のc.exeを起動するのはいりませんでした
それと1度だけじゃなく常時にしたいです
947デフォルトの名無しさん:2011/02/26(土) 22:54:17.12
心配せんでも起動されんよ
948デフォルトの名無しさん:2011/02/26(土) 22:55:08.80
>>945
2回gotoするよりは、フラグの方が好きなだけ
949デフォルトの名無しさん:2011/02/26(土) 22:55:22.88
すみません最後のstart消してgotoいれたらできました

ありがとうございました
950デフォルトの名無しさん:2011/02/26(土) 22:57:55.48
>>949
フラグもいらない

set task1=a.exe
set task2=b.exe
set task3=c.exe
:taskkill
for /f "usebackq tokens=*" %%A in ( `tasklist /fi "imagename eq %task1%" 2^>nul ^| find /i "%task1%"` ) do taskkill /fi "imagename eq %task2%" >nul 2>&1
ping 127.0.0.1 > nul 2>&1
goto taskkill
951デフォルトの名無しさん:2011/02/26(土) 22:58:45.58
ということはtask3の定義もいりませんね
952デフォルトの名無しさん:2011/02/26(土) 22:59:39.83
:tasklist
for /f "usebackq tokens=*" %%A in ( `tasklist /fi "imagename eq %task1%" 2^>nul` ) do goto taskkill
ping 127.0.0.1 > nul 2>&1
goto tasklist
:taskkill
taskkill /fi "imagename eq %task2%" >nul 2>&1
start "boke" "%task3%"
953デフォルトの名無しさん:2011/02/26(土) 23:07:07.62
あータイトルになるのね
954デフォルトの名無しさん:2011/02/26(土) 23:41:26.91
あれ
さっきまでできてたのにできなくなった
excelとwordで試してみました


@echo off
set task1=EXCEL.EXE
set task2=WINWORD.EXE

set flag=1
:taskkill
for /f "usebackq tokens=*" %%A in ( `tasklist /fi "imagename eq %task1%" 2^>nul ^| find /i "%task1%"` ) do (set flag=2) & taskkill /fi "imagename eq %task2%" >nul 2>&1
if %flag%. neq 2. ping 127.0.0.1 > nul 2>&1 & goto taskkill

goto taskkill
955デフォルトの名無しさん:2011/02/26(土) 23:44:19.51
OSはXPproです
956デフォルトの名無しさん:2011/02/27(日) 00:00:10.96
バッチファイル名がtaskkillでした
957デフォルトの名無しさん:2011/02/27(日) 00:12:11.96
あるある
958デフォルトの名無しさん:2011/02/27(日) 00:22:10.16
ねえよ
959デフォルトの名無しさん:2011/02/27(日) 00:23:25.53
ちょっと便乗して質問してスレチな気がするのですが
.vbs

Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run cmd.exe /c C:\Documents and Settings\*\デスクトップ\test.bat

デスクトップにあるバッチファイルを実行したいのですがうまくいきません
どうしたらいいでしょうか
960デフォルトの名無しさん:2011/02/27(日) 00:27:46.46
文字として囲んだり適切な場所を指してやったりいろいろありそうだね
961デフォルトの名無しさん:2011/02/27(日) 00:29:22.53
>>959
WSHShell.Run "cmd.exe /c ""C:\Documents and Settings\*\デスクトップ\test.bat"""
962デフォルトの名無しさん:2011/02/27(日) 00:33:19.84
ありがとうございます
呼び出しの時のパスの囲み方あまりわからないんです
963デフォルトの名無しさん:2011/02/27(日) 00:37:17.30
>>962
runへはオプションまで含めて全て一つの文字列として渡してやる必要がある
で、文字列の中に「"」を入れる場合は「""」のように二つ重ねる
その結果、>>961がrunへ渡る文字列は下記の通り
cmd.exe /c "C:\Documents and Settings\*\デスクトップ\test.bat"
964デフォルトの名無しさん:2011/02/27(日) 00:40:47.82
なるほど二つ重ねるのですね
ありがとうございました
もっと勉強してきます
965デフォルトの名無しさん:2011/02/27(日) 01:02:12.48
SpecialFoldersというのがあってだな
966デフォルトの名無しさん:2011/02/27(日) 01:05:53.71
cmd.exe /c はいらねーよ
967デフォルトの名無しさん:2011/02/27(日) 01:09:33.07
洗練された書き方を教えてくれと言ってる訳じゃないんだから良いじゃん
968デフォルトの名無しさん:2011/02/27(日) 02:02:44.44
精神的に向上心の無いやつは馬鹿だ
969デフォルトの名無しさん:2011/02/27(日) 08:13:18.24
馬鹿はお前
970デフォルトの名無しさん:2011/02/27(日) 13:49:41.76
複数ファイルをD&Dした時の挙動なんですけど、各ファイルは""で囲まれると
思っていたんですが違うのでしょうか。

今まで特に気にすることなく使えていたバッチが最近はパスに入っているスペースで
バラバラにされて複数D&Dが全く使い物にならなくなるという事態になり困っています。

OSはwin7の64bitです。
971デフォルトの名無しさん:2011/02/27(日) 14:06:18.90
@echo off
echo %*
set /a c=0
:loop
if "%~1"=="" goto :end
set /a c+=1
echo %c% %~1
shift
goto :loop
:end
pause

こんなバッチにa b.txtとc d.txtを複数選択でD&Dした結果
E:\test\c d.txt E:\test\a b.txt
1 E:\test\c
2 d.txt
3 E:\test\a
4 b.txt
972デフォルトの名無しさん:2011/02/27(日) 14:14:40.39
すみません>>970-971は忘れて下さい。

どうも使ってるファイラーが悪さをしているみたいですorz
エクスプローラでは問題無しでした
973デフォルトの名無しさん:2011/02/27(日) 14:17:05.40
>>970
パスに空白を含むと "" で囲む、そうでないと "" は付加されない。

call /? で引数についての説明を読むことを推奨する。

# ちょっとテストしてて気づいたが、パスに & を含むと & を
# 含んでそれ以降がバッチに渡されないな。
# 回避方法あるのかな?
974デフォルトの名無しさん:2011/02/27(日) 14:21:42.14
>>973
既出
975デフォルトの名無しさん:2011/02/27(日) 14:55:16.49
>>973
パスに半角スペースを含んでいるのに""で囲まれないからおかしいって事だったんですが…

ファイラが影響しているというのは思いも寄りませんでした
976デフォルトの名無しさん:2011/02/27(日) 15:39:04.11
ドロップハンドラを変更してんじゃね?
977デフォルトの名無しさん:2011/02/28(月) 00:36:08.84
以下のバッチで 11 12 13 ・・・100 の文字列がlog.txtに出力されるのですが
011 012 013 ・・・ 100 というように3桁ゼロフィル出力にする方法ってありませんか?

set ns=11
set ne=101
:LOOP
echo %ns%>>log.txt
set /a ns=ns+1
if %ns%==%ne% goto finish
goto LOOP
:finish
978デフォルトの名無しさん:2011/02/28(月) 00:43:38.84
>>977
定番

3桁より大きな数をインクリメントして
下3桁ちょんぱして出力
979デフォルトの名無しさん:2011/02/28(月) 01:16:06.56
>>977
ns=1011
ne=1101
echo %ns:~1%
980デフォルトの名無しさん:2011/02/28(月) 02:19:11.55
>978
定石
981デフォルトの名無しさん:2011/02/28(月) 06:04:14.75
次スレよろ
982デフォルトの名無しさん:2011/02/28(月) 15:11:14.41
立ててくる
983デフォルトの名無しさん:2011/02/28(月) 15:13:01.66
立てた
【.cmd】 バッチファイルスクリプト %7 【.bat】
http://hibari.2ch.net/test/read.cgi/tech/1298873550/
984デフォルトの名無しさん:2011/02/28(月) 18:23:51.95
んで
set /a ns=1000 + 011
とかしちゃって悩むんですね。
985デフォルトの名無しさん:2011/02/28(月) 18:51:11.50
べつになやまんが?
986デフォルトの名無しさん:2011/02/28(月) 18:55:40.66
set/?を読まない>>984があほうなだけw
987デフォルトの名無しさん:2011/02/28(月) 18:56:02.90
MS-DOS: for文で「01」が「1」になってしまいます
http://questionbox.jp.msn.com/qa2418711.html
988デフォルトの名無しさん:2011/02/28(月) 21:12:07.14
>>984
スベったな…
まあアンタにとっては新鮮な驚きだったんだろうけどね。
989デフォルトの名無しさん:2011/02/28(月) 21:24:38.28
>>984
挽回のチャンスをやろうか?
011みたいなケースを含め数字文字列を十進数にするバッチを書け
990デフォルトの名無しさん:2011/02/28(月) 23:08:35.69
set ver=%1
call :DEL_LEFTZERO ver
echo=%ver%
pause
exit /b

:DEL_LEFTZERO
setlocal
call set str=%%%1%%
:DLZ
if "%str:~0,1%" == "0" (
set str=%str:~1%
goto :DLZ
)
endlocal &set %1=%str%
exit /b
991デフォルトの名無しさん:2011/02/28(月) 23:32:08.87
>>990
:DLZ
if "%str%" == "0" (endlocal &set %1=%str%&exit /b)
if "%str:~0,1%" == "0" (
992デフォルトの名無しさん:2011/03/01(火) 00:49:41.79
将来的にはどうなるか分からんが現状はこれで十分

call :DEL_LEFTZERO 010
echo %errorlevel%
exit /b

:DEL_LEFTZERO
exit /b %1
993デフォルトの名無しさん:2011/03/01(火) 01:14:50.47
>>983
994デフォルトの名無しさん:2011/03/01(火) 01:34:43.51
サブルーチンの終わりは goto :eof のほうが好きだな。
995デフォルトの名無しさん:2011/03/01(火) 02:47:27.79
1行でできるものに何行かけてんだろw
996デフォルトの名無しさん:2011/03/01(火) 07:47:51.82
うめ
997デフォルトの名無しさん:2011/03/01(火) 17:44:32.40
さくら
998デフォルトの名無しさん:2011/03/01(火) 18:28:42.29
たけ
999デフォルトの名無しさん:2011/03/01(火) 18:34:09.87
おまん
1000デフォルトの名無しさん:2011/03/01(火) 18:35:13.74
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。