【.cmd】 バッチファイルスクリプト %9 【.bat】
1 :
デフォルトの名無しさん :
2012/04/21(土) 22:37:58.49
>すれ立て間違えたw ほらみろ
バッチファイル処理を強化する ライブラリを作ろう。
これ以上駄作ふやすなよ
>dir 2012/04/22 12:01:47 21 1乙
for /d %%i in (c:\*) do if XXX (exec1 "%%~i") else (exec2 "%%~2") でXXXの条件が%%iがsで終わっていたらというのにしたいんですがどうすればいいですか? c:\windows, c:\usersなどはexec1 それ以外ならexec2に分岐したいのです
一度何かの変数に入れるしかないな
findstrをかませるんだな
for /d %%i in (c:\*) do ( set s="%%~i" call :sub "%%~i" ) exit :sub if "%s:~-2%=="s" (exec1 "%~1") else (exec2 "%~1") exit /b
for /d %%i in (c:\*) do (echo %%i)|findstr /e "s" && (exec1 "%%~i") || (exec2 "%%~2")
俺様の力作バッチを皆に恵んであげよう pushd X:\エロ画像 || goto :eof rem カレントディレクトリのファイルをMD5ハッシュ値にリネーム 要md5sum for %%i in (*) do for /f "usebackq delims= " %%j in (`md5sum "%%~i"`) do ren "%%~i" "@%%j%%~xi" rem 16個のサブフォルダに振り分け for %%i in (0 1 2 3 4 5 6 7 8 9 A B C D E F) do (mkdir @%%i&move @%%i*.* @%%i\) mkdir 重複&move *.* 重複\ rem 画像をランダムに開く 要ruby ruby -x "%~f0" popd goto :eof #!ruby `dir /s /b /a:-d`.split("\n").shuffle.each{|i| `start "" "#{i}"`; gets}
おー凄い、馬力作バッチ
ばか 作 ぱっち
@がキモい
コマンドプロンプトでバッチの引数に「^^"&time /t」を指定したとして、 これを変数に格納する事ってできますか? C:\>a.bat ^^"&time /t 『a.bat』 ================================ @echo on set AAA=%1 set AAA=%~1 set "AAA=%1" set "AAA=%~1" ================================ 結果 ================================ C:\>set AAA=" & time /t 23:08 C:\>set AAA=" & time /t 23:08 C:\>set "AAA=^" & time /t" 23:08 C:\>set "AAA=^" & time /t" 23:08 ================================
パス
for /r %i (*) do @echo.%i とやると途中からecho %i.%iとやったのと同じになるんですが 誰か理由わかりますか?
echo %i.%i じゃなくて echo %i.[表示がおかしくなる直前のファイル名] みたいな感じになってました
コンソールのゴミじゃなくて? ファイルにリダイレクトしても?
ファイルに書いても一緒です。 十数行までは普通に出るんですが、途中からおかしくなる。
バッファのゴミだろね %~fi はどう?
同様です。 わからないのは echo %i では問題ないのに echo.%i 他スペース以外だと二重になってしまうことです。 この辺の理屈が知りたい。
必要ないのに.なんかつけるから反感買って嫌がらせじゃないか
おれっちじゃ再現しないな osのよるんじゃね?
>>26 %iが空白だったときに echo は ONです っての見たくないから
ピリオド打つの癖になってるもんで。
for %i in (*) do @echo\a とかでもおかしい表示になってたのにデバッガ開いたら正常になった 原因はfor臭い
>>22 XPでよくコマンドプロンプト表示がバグることがあるけど、
あれのMS公式見解ってないのかね?
エンドユーザにPCの情報採取してもらうのに
dir/a|findstr ほにゃらら
とかやらせて、DOS窓のスクショを送ってもらうんだけど
前にコンソール表示のバグらしき事象に騙されたことがあったんだけど、
リダイレクトで万が一既存ファイルを上書いてしまうリスクを考えると、
エンドユーザにリダイレクトはさせたくないんですよね
| clip ならよかんべ
>>28 ピリオドはやめとけ
echo > echo.txt
for %i in (txt) do @echo.%i
>>28 \もやめとけ
md echo
echo >echo\aaa.txt
for %i in (aaa.txt) do @echo\%i
echoで改行だけを出力する時困り申す
CMDCMDLINE
無理無駄無用
%*
プログラムを実行したときにプログラム内の処理でキー入力させられるものがありますが それらをbatファイルから入力させることは可能でしょうか?
setって変数を宣言するものですよね? コマンドプロンプトで動作するプログラム(mysqlとかsqlite3)を実行中に標準入力を受け付けてるところに指定した文字列を入力したいだけなんですが set pass=1234 mysql -u root -p REM パスワード入力 REM ここでパスワード入力待ちになる REM ここで変数passを入力したい
ああ、そっちか 標準入力のリダイレクトでダメなら、バッチファイルだけでは辛いかも
お前には無理
>>42 set pass=1234
echo pass|mysql -u root -p
ではどうですか?
>>46 バッチファイルにパスワードを晒すぐらいなら、普通に
mysql -u root --password=1234
でやれよw
パスワードだけでなくその後にsqlも実行したいのです・・・
それならこれでいいだろ mysql -u root -pパスワード データベース名 < hoge.sql
そうなると標準入力へはできないってことですか?
そこまで意欲的に質問する暇があったらググれ
どうもググってもbatファイルできるような記事が見当たらず・・・ 別の所で聞いてきます
翻訳:ググるよ面倒なので他人を利用するぞ
54 :
45 :2012/05/27(日) 16:10:13.24
>>46 ごめん環境変数は参照時は%で括るんだったorz
set pass=1234
echo %pass%|mysql -u root -p
autohotkeyとか使っとけよ セキュリティgdgdになるけど
おまえらど素人をあんまり甚振るなよ
>>41 が答えだろ
set /p pass=enter password
mysql -u root --password=%pass%
>>41-43 の流れだと対話的に入力させたいわけではなく、対話型プログラムを自動化したいって意味だと思うが?
まあ
>>40 が不明瞭だしその後のレスも結局何がしたいのか説明できていないが
>>54 set /?
を,見ればすぐ分かることを仕込んでどんな相手なのか判断してたのかと
思って読んでたよw
どうみても釣だろ
ある時刻になったら stop ってコマンドを自動で入力させることってできる?
質問になってませんね
at
そして、
>>42 ですが、
set pass=1234
mysql -u root -p
mysqlが パスワード入力 ルーチンロード
mysqlがユーザからのパスワード入力を待機
ここでmysqlに%pass%のデータを送信させる。(ようするにパイプ)
じゃないかなって思います。
>>63 for/?
set/?
if/?
echo/?
>>65 Split.CMD
というバッチファイルをダウンロードしてきて
やってみたのですが、指定された文字を含む行が表示されるだけで
開始文字列から終了文字列まで、などの指定で一部分を切り出す事ができませんでした。。
そのやる気のなさと知識レベルだと、教えてもらってもだめだろうから、 素直にあきらめるがよろし。
それよくあるバグだな @ECHO OFF REM 使用法: 切り出し.CMD 開始文字列 終了文字列 ファイル SETLOCAL ENABLEDELAYEDEXPANSION (FOR /F "delims=[] tokens=1*" %%0 IN ('FIND /N /V ""') DO ( IF "!FLAG!"=="1" SET FLAG=2 IF "!FLAG!"=="3" SET FLAG=4 SET "LINE=%%1" if defined line SET "LINE=!LINE:%1=!" if defined line IF NOT "!LINE!"=="%%1" SET FLAG=1 SET "LINE=%%1" if defined line SET "LINE=!LINE:%2=!" if defined line IF NOT "!LINE!"=="%%1" SET FLAG=3 IF "!FLAG!"=="1" ECHO=%%1 IF "!FLAG!"=="3" ECHO=%%1 IF "!FLAG!"=="3" GOTO :EOF IF "!FLAG!"=="2" ECHO=%%1 ) )<%3
レスありがとうございます。 C:\TEST>切り出し-2chTEST.CMD 234 789 test.txt 1234567890 C:\TEST> testファイルの中身です。 -----test.txt----- HelloWorld サンプルです 1234567890 Sample [EOF] --------------------------- どうも23456789と切り出ししてくれなくて困ってます。
用途が違うな
for find set echo で作れ
>>69 どっちにしろ、! を含むファイルでおかしくなるとかあるから、素直にあきらめて
vbs とかでやれよ。
console2が結構まともに動くと思ったけどヒストリなしか。 なかなかこれといったcmd, powershellがまともに動くマルチタブのターミナルが出てこないな。
>>72 はい。そうしてみます。
ありがとうございました。
指定したディレクトリ以下にあるファイル名にスペースがあったらすべてアンダーバーに置き換える バッチお願いします
> 拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる > 質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。 丸投げするスレじゃないぞ。 あと、個人的には... > ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。 の方がいいと思う、バッチで文字列操作は結構トラップ多いから。
pushd %1 && for %%I in ("* *") do ( set xxx="%%~I" call ren "%%~I" %%xxx: =_%% )
>>77 ありがとうございます
これをサブフォルダ内まで効果を及ばせるのって可能でしょうか
pushd %1 && for /r %%I in ("* *") do ( set xxx="%%~nxI" call ren "%%~I" %%xxx: =_%% )
/rを追加でできるんですね、覚えておきます ありがとうございました
質問なんですがちょっと長いです、申し訳ないです C:\a\とD:\a\内のfile.datの更新日時を比較して、C:\a\file.datのほうが新しい場合、それをD:\a\にコピーするバッチを作りました 00 for %%c in (C:\a\file.dat) do set cdate=%%~tc 01 set cdate=%cdate:~2,2%%cdate:~5,2%%cdate:~8,2%%cdate:~11,2%%cdate:~14,2% 02 for %%d in (D:\a\file.dat) do set ddate=%%~td 03 set ddate=%ddate:~2,2%%ddate:~5,2%%ddate:~8,2%%ddate:~11,2%%ddate:~14,2% 04 if %cdate% GTR %ddate% xcopy "C:\a\file.dat" "D:\a\" /e /y 00で更新日時を取得して、01で「2012/07/05 02:36」を「1207050236」に変換します 02と03も同じようなことをして、04で比較とコピーを行います それで今回、フォルダbやcなどが増えそうなので、folders.txtに名前を書かれたフォルダ全てを扱うためのバッチを作り直したのですが、 これがよく分からんのですが思ったように動きません 作り直したと言ってもFOR文をネストしただけなのですが 00 for /f %%f in (C:\folders.txt) ( 01 for %%c in (C:\%%f\file.dat) do set cdate=%%~tc 02 set cdate=%cdate:~2,2%%cdate:~5,2%%cdate:~8,2%%cdate:~11,2%%cdate:~14,2% 03 for %%d in (D:\%%f\file.dat) do set ddate=%%~td 04 set ddate=%ddate:~2,2%%ddate:~5,2%%ddate:~8,2%%ddate:~11,2%%ddate:~14,2% 05 if %cdate% GTR %ddate% xcopy "C:\%%f\file.dat" "D:\%%f\" /e /y 06 ) 05を伏せる代わりにpauseを入れて観察したところ、01と03に問題があるようで、file.datを見つけられていないようでした 少し粘ったのですが無理そうなので、「他の方法」を使いたいのですが、私の知識は浅すぎて皆目検討がつきません そこで皆さんに「他の方法」を教えていただきたいのです。どうかよろしくお願いしますm(_ _)m
robocopy
xcopy /d setlocal
>>82 >>83 robocopyなんて便利なものがあったとは・・・目から鱗です
本当にありがとうございましたm(_ _)m
85 :
初心者さん :2012/07/05(木) 18:27:23.50
@echo off :loop set /a p = p + 1 ping localhost -n 1 > nul cls echo %p%%% if /i "%p%"=="100" goto:f goto :loop :f echo finish
86 :
デフォルトの名無しさん :2012/07/10(火) 20:04:55.55
調べ方がわからないのでここにたどり着きました フォルダ内にあるファイルをアクロバットリーダーを使って印刷するバッチです 印刷は出来るのですがpdf以外のファイルがあるとエラーが出て それが大量なのでいまいち使いづらいです pdfのみに絞るもしくは、他のファイルは無視をする方法教えてくれませんか 〜〜〜〜〜〜〜〜〜〜〜〜 for %%i in (*) do ( START ACRORD32.EXE /n /t %%i ) 〜〜〜〜〜〜〜〜〜〜〜〜
for %%i in (*.pdf) do ( START ACRORD32.EXE /n /t %%i )
88 :
デフォルトの名無しさん :2012/07/10(火) 22:05:30.31
自分自身がUACの管理者承認モードで 動いてることを検出できるバッチファイルの作り方おしえれ
title /?
バッチファイルで、「管理者として実行」されているか?「整合性レベル:低」か?を判定する。(その2)
titleに付けないようにできるからな
異なる拡張子のファイルを複数バッチに投げたときに 拡張子ごとのファイルパスをsetする方法を教えてください
for %%I in (%*) do echo %%~xI あとは自分で考えろバカ
96 :
デフォルトの名無しさん :2012/07/20(金) 08:19:03.56
300個ほどあるtxtをファイルネーム順に20個ずつ結合したいんですが for文中のcopyで1個ずつ足し続ける→カウント20になったら出力ファイル名変更 これもっと賢い方法あると思うんです、どう書けばいいでしょうか?
ない
98 :
デフォルトの名無しさん :2012/07/21(土) 04:18:40.67
for文中のrenで1個ずつファイル名末尾に識別子を足し続ける→カウント20になったら識別子変更 copy *識別子.txt group識別子.txt これで入出力が1回ですんで時間短縮になりました
はあ?あほか なわけない
いったいどこのioが減ったと思ってるの?おばかさん
ファイル名を変更するioが増えるわな
ファイル1+ファイル2=ファイルA ファイルA+ファイル3=ファイルB ファイルB+ファイル4= …x20 みたいな事を考えてたんじゃないかと想像してみる。
ioが分かってないだけだと思う
質問です。 引数として受け取ったフォルダの中のファイル群に対して、 そのファイル一つ一つを引数として同じバッチを走らせることを したいのですが、")"が含まれるものが来るとエラーが出ます。 -------------------- echo "%1" のファイルorフォルダチェック echo %~a1|find "d" if %ERRORLEVEL% EQU 0 ( echo "%~1" はフォルダです。 echo "%~1" の1階層下にあるファイルを対象にした処理に移ります。 for %%f in (%~1\*) do start /wait %~0 %%f ) else ( echo "%~1" はファイルです。 ) -------------------- >\* の使い方が誤っています。 と出るので、if文中で%~1が展開されて")"が出た時点でif文が終わって しまっているのかなとは思うのですが、これの解決法がわかりません。 どうすれば回避できるでしょうか?
""で囲めばか
すいません、""は試したけど、場所を間違ってました…
関係があるのかないのかわからないのですが この間「cmd /c rd /q /s c:\」みたいな(不正確ですが)コマンドを 実行するとパソコンが軽くなる・・・とかいう書き込みがあって、 それに「嘘乙」という返信を見たのですが、 これってどういう意味ですか?
そりゃ軽くなるさ。OSも無くなってきれいさっぱりと軽くなるさ。 HDD内部全部消せってコマンドだから。
嘘乙
重さが変わるわけないだろ
111 :
デフォルトの名無しさん :2012/07/24(火) 01:39:26.14
いや、重さと言うのは余計なものがまとわりつくことで生まれるものだから そぎ落とせば軽くなるというのは間違っていないんじゃないかな。 ただ、本体まで消してしまうと空間しか残らないが。
コマンドを実行すると、ウインドウが閉じてしまいます 詳細を見たいんですけど、どうすればいいですか?
バッチの最後にpauseを
バッチの最後にcmdを
taskkill のバッチをスタートアップに登録して、マウスの不要なプロセスだけを 停止したいのですが、スタートアップ直後に開始されると プロセスが開始される前のようで、何もする事無く終了してしまいます。 繰り返しを行いたいのですが、どうすればいいのでしょうか・・・?
116 :
デフォルトの名無しさん :2012/07/26(木) 06:16:06.15
taskkillの戻り値が0以外の間ループ
ファイル名のスペースと半角記号をリネームしたいのですが、上手くいきません。 どう修正したらいいのでしょうか? @echo off :loop call :suba %1 shift if exist %1 goto loop :suba set pname=%* if not defined pname echo ファイル名を指定してください&pause&&goto :eof set pname="%pname:"=%" call :sub %pname% echo 置換:^<%r%^> %pname% ===^> %fname% rem if %r% equ ON if exist %dir%%fname% echo 既存ファイルがあって置換できない ren %pname% %fname% goto :eof
:sub set dir="%~dp1" set f="%~nx1" set fname=%f: =_% set fname=%fname: =_% set fname=%fname:(=(% set fname=%fname:)=)% set fname=%fname:!=!% set fname=%fname:#=#% set fname=%fname:;=;% set fname=%fname:$=$% set fname=%fname:%=%% set fname=%fname:&=&% set fname=%fname:'=’% set fname=%fname:===% set fname=%fname:[=(% set fname=%fname:]=)% set fname=%fname:{=(% set fname=%fname:}=)% set fname=%fname:~=^% set fname=%fname:~=ー% set fname=%fname:+=+% set fname=%fname:,=、% if %f% neq %fname% (set r=ON) else (set r=OFF) goto :eof
あれ?「*」ってうまく置換できないな
>>117 バッチファイルに拘らず Flexible Renamer を使う
121 :
117 :2012/07/27(金) 15:14:18.83
>>120 ありがとうございます。
バッチファイルから使えるかわからない、上にちょっと難しそうですね。
:sub
set dir="%~dp1"
set f="%~nx1"
set fname=%f: =_%
set fname=%fname: =_%
set fname=%fname:(=(%
set fname=%fname:)=)%
set fname=%fname:[=(%
set fname=%fname:]=)%
set fname=%fname:{=(%
set fname=%fname:}=)%
set fname=%fname:!=!%
set fname=%fname:+=+%
set fname=%fname:$=$%
set fname=%fname:;=;%
set fname=%fname:'=’%
set fname=%fname:#=#%
set fname=%fname:,=、%
if %f% neq %fname% (set r=ON) else (set r=OFF)
goto :eof
まではいけましたが、=%&^~がうまくできないっぽいですね。
そういうのはRegular Renamerというコマンドラインなソフト呼んでやってるな。 RR.exe /tr tr/=%&^~/=%&^〜/ のようにtr演算子で変換するだけで済むし。 まあ、なに使ってもいいが、面倒なリネームにはリネームソフトの方が楽ってこと。
バッチを実行するとそのディレクトリにクリップボードにある文字列を元に フォルダを作成させるバッチできますか?
>ディレクトリにクリップボードに
mshta.exeを使えばできるよ
mshta clipboarddata 検索
powershell使ってもできるな
JclipOutというバッチソフトを使ってできました ありがとう
あ、それソフト自体の名前じゃなかった @MSHTA.EXE "javascript:var s=clipboardData.getData('text');if(s)new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(s);close();" | MORE これをバッチに書いてあるだけのソフトでそれを呼び出して以下のようにして使ってます for /f %%a in ('JclipOut') do md %%a
131 :
デフォルトの名無しさん :2012/08/17(金) 20:06:25.13
forfiles の /C で指定したコマンドのエラーは、どのようにしたら検知できますか? forfiles直後のERRORLEVELは最後に実行したコマンドでエラーになった時しか検知できないように見えます。 ループ中にコマンドを実行する度にエラーを検知したいです。
call使うかsetlocal enabledelayedexpansion使えば?
forfiles の /C で指定したコマンドの中で検知したら?
自演乙
韓国経済が急激に失速している。一番の原因は、これまで韓国経済を引っ張ってきた原動力である輸出に陰りが見え始めたためだ。
輸出に次いで内需の鈍化も懸念されている。住宅価格の下落とそれに伴う消費や投資の抑制がみられ、バブル崩壊以降日本が苦しんだ
「日本型長期デフレ」の兆候が現れている、との指摘も少なくない。
■好調に見えたのはヒュンダイやサムスンだけ
韓国の輸出は、2012年7月の通関ベースで前年同月に比べて8.8%減と大きく減った。マイナス幅は3年ぶりの高い数値だという。
これまで韓国の輸出をけん引してきた自動車の輸出が頭打ちになったのをはじめ、船舶や石油化学製品、携帯電話など主力製品の輸出が急速に落ち込んだ。
韓国の輸出額は国内総生産(GDP)対比で50%を超える。「輸出国」といわれる日本でもGDP対比では10%半ばだから、輸出依存度の高さは圧倒的だ。
そのため、輸出の不振は即韓国経済の失速に直結する。
なかでも韓国経済を支えてきたのが欧州連合(EU)向けの輸出。EUとは自由貿易協定(FTA)を結んでいる。そのEU向けが12年1〜6月期には前年同期に
比べて16.0%も減った。EU諸国の債務危機から発した景気低迷が影響した。
さらには中国向けも1.2%減った。第一生命経済研究所経済調査部の主任エコノミスト、西?徹氏は、「中国向け輸出の減少はボディブローのように効いています」と話す
。韓国の素材や部品メーカーは中国を介して、間接的にEU向け輸出を増やしてきたからだ。
http://headlines.yahoo.co.jp/hl?a=20120817-00000006-jct-bus_all
ここは東亜+じゃねえよ!
for /D %%f IN (%*) DO @echo %%f で goto loop はバッチ パラメーターで %2 から指定出来ますが、 for でそれは可能ですか? %%f が %1 の役目?だとわかっているのですが、どうすれば %2 以降の変数を入れることが可能でしょうか?
%%f %%g %%h %%i … 最初をfにするのが意味不明だけど。 aから始めてabc…の方がわかりやすいし。
いみふ
ファイル読み込みで複数行を一つの変数に保存する方法がわかりません。エロイ人教えてください
むりどえす
set a=a %%i
(set a=!a!^ %%i )
call set a=%%a%% %%i
codec=`ffmpeg -i "${input}" 2>&1\ |sed -n "s/^.*Audio: \([^,]*\),.*/\1/p"\ |head -n 1` ffmpegで動画内の音声コーデックを判別するシェルスクリプトなんだけど これバッチに置き換えられないかな
for find if /?
すみません、質問です >dir *.txt abc.txt ab.txt a.txt >dir a?.txt ab.txt a.txt なんで a.txt が表示されるのですか? WinXPです
151 :
デフォルトの名無しさん :2012/09/13(木) 22:52:38.40
ありがとうございます。 エクスプローラの検索だと a.txt は表示されないですね。 まぎらわしいなぁ…
ワイルドな仕様だなぁ…
骨のおれる仕事ですから。
155 :
デフォルトの名無しさん :2012/09/19(水) 17:43:59.23
質問よろしいでしょうか batに放り込んだファイルをそのフォルダから指定のフォルダに移動させる という事をやりたいのですが、ファイル名で記入するのではなく、その放り込んだ ファイルを対象にするにはどのように表現したら宜しいでしょうか。
>>155 move %1 指定のフォルダ
の1行だけのバッチファイルにして、
そのファイルをドラッグアンドドロップでおk?
バッチでリネームしてるわけじゃねーからそれ。 バッチでWSH起動してるだけ。
マルチポストだったのかよw
161 :
デフォルトの名無しさん :2012/09/27(木) 21:04:42.53
F:\aaa\bbb\test.batを実行して F:\ccc\ddd\あああ.txtの内容を F:\aaa\bbb\の直下にコピーしたい場合 バッチの内容を xcopy /Y ../../ccc/ddd/あああ.txt にしたのですが、無効なパラメータと言われます やり方をご教授ください ちなみにFドライブであるかどうかは変更が可能性あるので フルパス指定は避けたいです
パスの区切りは/でなく\
コピー先も記述しろよw
cdなんだろ
165 :
デフォルトの名無しさん :2012/09/28(金) 23:22:24.41
C:\>tree を実行して 出力されたツリーのファイル名の右側にサイズ、更新日を表示することは可能でしょうか?
tree/?
散々既出かもしれないけど []や半角スペースを含むフォルダを%nに代入して使いたいのであるが 勝手に不具合起こしてうまく行かねーよカスみたいな状況になる どうやったら解消できるかご教授頂きたい
万能かはわからないけど、 "%n" とか "%~n" とかを使うようにする
バッチファイルにCScript埋め込む手法覚えてからそっちに逃げるようになっちまった。堕落。
バッチ程度のモノなんか動けばいいだろ。 メンドクセーのはCで書いてる
バッチファイルはコンパイラとか入れられない環境(例えば鯖とか)で使いたいこともあるからな そういう考えで行けばCScript.exe呼ぶのは割と常套手段だと思う
誰かライブラリ作ってよ
あるだろ
@必須機能@ ・配列的なもの。当然shift、unshift、pop、pushはあるよね。 ・replaceは正規表現対応。先読み後読み後方参照完備。 ・数値演算は正負・小数に対応。ついでによくある「Math」の関数を片っ端から実装。 ・日時演算も余裕。UNIX Timeとの相互変換も簡単。 ・「"」「^」「%」「)」のエスケープも気にしなくて大丈夫。 ・都度if errorlevel Nなんてしなくてもtry〜catchで拾えばいいか。 ここまで書いて虚しくなったんで終わる
perl「呼んだ?」
176 :
174 :2012/10/16(火) 01:39:54.52
PowerShellかPerlを使わせてくれ とまでは言わない バッチ(.bat)とVBScriptだけは勘弁してくれの方向で交渉中…orz
質問なのですが bat内で複数のbatを処理する際に bat1 ←このbatの処理でファイル名が変化 bat2 bat3 このような状態だとbat2に処理が渡せないのですが bat1の段階で変化したファイル名をbat2に渡すには bat1の末尾になんと記述すれば良いのでしょうか
ない
変化したファイル名を変数に取っておけばよし。 一つのコマンドプロンプトでやっている限り変数は全部持ち越しだから。 バッチ終了で初期化されたりしない。
>>179 ご返答ありがとうございます。
すみません、よく意味が解らないのですが、具体的に何をすればいいのでしょうか
何というファイルが何という名前に変化したかっていうのが全然わからないなら絶望的だけど それがわかるようなら例えば :----bat1---- set filename1=hoge.txt set filename2=fuga.txt rename %filename1% %filename2% :----ここでbat1終わり---- :----bat2----- echo %filename2%
すみません、リネームですが、毎回頭にその日の日付が付くので 変化後が一定の名前ではないです ちょっと難しそうですね。 質問を変えさせて頂きたいのですが 特定フォルダ内のファイルを全て指定したbatに放り込むのと同じ処理を batでは出来ないでしょうか これが出来れば、間にこのbatを挟むことでファイル名の変化も クリアできると思うのですが、如何でしょうか
その日の日付ってわかってるならその日の日付入れるだけだろ。 何も難しいことでもない。 それでも難しいっていうならアドバイスできるレベルじゃないかも…
それだと毎日batを書き換えないといけないので手動と変わらなくなってしまいます。 一つのbatで全部処理ができる、というのを模索中です。
もしかして、バッチファイルで引数を受け取れることを知らないとかそういう話?
%DATE%なんかも全く知らない、という話かも知れん
勉強不足ですみません、一度調べてきます
実行すると指定したフォルダで一番容量が多いファイル以外を削除、もしくは 指定した容量以下のファイルを削除する、といったbatはできますでしょうか もし可能であれば記述を教えて頂けませんか、お願い致します。
可能だけど教えてやらんよ
>>188 if "%~1" == "" goto :eof
pushd "%~1" && for /f "skip=1 delims=" %%a in ('dir /a-d /o:-s /b') do del "%%a"
popd
でどう?
>>190 ありがとうございます。
すみません、batで実行してみたのですが、何も起きませんでした。
こちら何か代入しないと行けないのでしょうか、宜しければ例をお願い致します。
190のフォルダの指定は引数かD&Dだからな? 実行ファイルでもバッチでもそうだけど貰ったものを何も考えずに 単に実行してみるってのは危険だぞ。 rd /s/q位になれば見ただけで警戒するのかもしれんが…
ごめんなさい、フォルダではなくファイルを直接ドラッグしていました フォルダを丸ごとD&Dしたら無事動作しました。ありがとうございます。 こちらの記述ですが、もし対象フォルダが固定の時はどのように 書き換えればいいのでしょうか、C:\testとかの場合の例を教えて 頂けませんか
すみません、調べたら解りました if "C:\test" == "" goto :eof pushd "C:\test" && for /f "skip=1 delims=" %%a in ('dir /a-d /o:-s /b') do del "%%a" popd 多分こうですね
よく調べたねw よく解ったねw
196 :
デフォルトの名無しさん :2012/10/19(金) 07:33:25.39
pushdしてフォルダ移動した後に、&&で移動できたかのチェックしてるんだろうけど、 pushdもpopdもフォルダ移動に失敗(移動先フォルダがない)時でも errorlevelは0だから、想定外のファイルをdelする危険があるよ
>>196 > pushdもpopdもフォルダ移動に失敗(移動先フォルダがない)時でも
> errorlevelは0だから、
デタラメ言わない。
ちょっと試せばすぐばれる嘘は言わないように。
1 if not %cd%\ == %~dp0% echo ok 2 if not %~dp0% == %cd%\ echo ok 1は通るけど2は > echo の使い方が誤っています。 と文句言われる。何で?
>>198 %~dp0%じゃなくて%~dp0じゃね
なるほど。逆に1がエラーにならないのが不思議だけど。動けばいいや。
不思議だと思うほうが不思議だけど。どうでもいいや。
昇順もしくは降順で 最初の空きドライブのドライブレターを取得したいのですが, やり方がよくわかりません. できるのであれば,ご教示よろしくお願いします.
そもそも「空きドライブ」の定義は? Windowsで使っている限り、全く何も書かれていない ドライブなんて存在しないと思うけど。 空き容量はdirの最後の行とかfsutil volume diskfreeとかで取れる。
204 :
デフォルトの名無しさん :2012/10/22(月) 20:12:33.72
バッチファイル中、startコマンドで別のバッチファイルを呼び出そうとしています start hoge.bat huga..mp4 と、引き数を呼び出しているのですが、huga.mp4の関連付けが実行されてしまいます hoge.batに引数を与え実行させるにはどのようにすべきなのでしょうか?
>>203 説明不足で済みません.
空きドライブの意味は,
HDDやDVD等で使われていないドライブという意味です.
よろしくお願いします.
使ってないドライブレターか…バッチで取れたっけか WSHではドライブの一覧が取れるから逆算出来るとは思うが
207 :
デフォルトの名無しさん :2012/10/22(月) 20:59:16.83
diskpartのスクリプト使えばええんでないの
209 :
204 :2012/10/22(月) 21:06:51.70
すんまんせん 確かに嘘書きましたw 引き数のファイルの拡張子はtsです では引き続きよろしくお願いします
嘘こくでね "引用符"
211 :
204 :2012/10/22(月) 21:24:27.34
ありがとうございます なるほど、引用符ですか・・・ 正直、コマンドへのパスも、ファイル名にも半角空白が入ることがあるので 引用符を使えないとなると色々変えなきゃならないことがあって大変ですね、、、
>>207 diskpartだと,list volumeで一覧は表示できますが,
自動で空きドライブのドライブ文字を取得する方法がわかりません.
例えば,現在,CからHまでとY,Zにドライブが割り当てられているPCで,
IもしくはXを取得したいわけです.
引き続きよろしくお願いします.
リストが取得できたら後は何という事もないだろ。 一つのコマンドで一発で取得できるなんて思ってるのだとしたら、 そんな甘い事は忘れろ。
>>212 それはネットワークドライブをマウントするために必要ってこと?
ならpushdじゃだめか?(環境によっちゃ認証で詰まるけど)
215 :
デフォルトの名無しさん :2012/10/23(火) 00:42:01.05
いや単に丸投げしたいだけでしょ
わざわざ名前に「デフォルトの名無しさん」なんて入れる辺り、釣り入ってるしな。
>>212 そんな段階ならバッチ単体でやるのやめとけ
素直にWSH併用しなよ
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do ( subst %%i: . && subst /d %%i: && set a=%%i && goto :a ) :a echo %a%
219 :
202 :2012/10/23(火) 13:39:06.88
>>218 ありがとうございます.できました.
&&で分岐するんですね.なるほどと思いました.
皆さんのご指摘の通り,よくわからないので,丸投げしてしまいました.
申し訳ありませんでした.
220 :
デフォルトの名無しさん :2012/10/23(火) 19:43:17.49
set timeinfo=%DATE:/=% xcopy /i /Y %cSource_dir%\aaa.txt D:\log\aaa_%timeinfo%.txt というバッチを実行すると D:\log\\aaa_20121023.txt は受け側のファイル名ですか、 またはディレクトリ名ですか (F= ファイル、D= ディレクトリ)? とでます。Fを押下するとaaa_20121023.txtが出力されますが これを強制的にaaa_20121023.txtを出力させたいのですが 教えてください
echo F|xcopy〜
xcopyの前にファイル作っておけばいいじゃん。
>>219 技術論文を書いてるんじゃないんだから、
「,.」を日常的に使うのは止めた方がいい。
無教養な専門馬鹿にしか見えないから。
224 :
デフォルトの名無しさん :2012/10/24(水) 07:44:53.96
>>223 こ れ は ひ ど いwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
226 :
デフォルトの名無しさん :2012/10/24(水) 17:56:33.04
>>225 句読点はつけたほうがいい、馬鹿にしか見えないからwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwこうですか?wwwwwwwwwwwwwwwwwwwわかりませんwwwwwwwwwwwwwwwwwwwwww
227 :
デフォルトの名無しさん :2012/10/24(水) 17:57:22.59
ここは句読点のスレッドですwwwwwwwwwwwwwwwwwwwwwwwww
228 :
デフォルトの名無しさん :2012/10/24(水) 18:03:09.42
あたし小学3年生なんだけど、句読点で言いがかりつける人はニューロンが 足りてないんだってママがいってたwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
229 :
デフォルトの名無しさん :2012/10/24(水) 18:11:56.50
230 :
デフォルトの名無しさん :2012/10/24(水) 18:13:44.06
え、なに?それで句読点はどうなの?それではっきりするからさwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
特殊「,.」 一般「、。」
芝はそんなに悔しかったのか 哀れ
233 :
デフォルトの名無しさん :2012/10/25(木) 06:09:06.99
>>232 句読点をつけろ、ここをどこだと思ってるんだ!
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwぶひゃひゃひゃwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
>>232 そりゃ、今まで自分はエリートだと信じてたのが
あっさりどん底に突き落とされたんだからな。
草生やすしか切り札が無いところが、低脳度を物語ってるわな(笑
235 :
デフォルトの名無しさん :2012/10/25(木) 08:58:16.59
>>234 そうだな、
>>223 の発言によってエリートはどん底に突き落とされるよなwwwwwwwwwww
なぜならば句読点に対する指摘だからだwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwww句読点武装wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
236 :
デフォルトの名無しさん :2012/10/25(木) 08:59:34.79
句読点について言いがかりつけることができれば無敵だ 君も今日から無敵になれる、どんなエリートよりも賢くなれるwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
237 :
デフォルトの名無しさん :2012/10/25(木) 09:03:08.37
え、あいつたいしたことないよ、だってあいつ句読点があれだぜ、俺の句読点力の前では敵じゃないよwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
238 :
デフォルトの名無しさん :2012/10/25(木) 09:05:02.45
技術論文を書いてるんじゃないんだから、 「,.」を日常的に使うのは止めた方がいい。 無教養な専門馬鹿にしか見えないから。 もういいよ、これが流行語大賞でwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
239 :
デフォルトの名無しさん :2012/10/25(木) 09:06:01.38
句読点に言いがかりをつけたらエリートがどん底に突き落とされますwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
240 :
デフォルトの名無しさん :2012/10/25(木) 09:32:40.41
心配するな、俺にはとっておきの武器がある、句読点だwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
241 :
デフォルトの名無しさん :2012/10/25(木) 09:36:04.63
男「 自慢ではありませんが、私の句読点は「、。」です。 女「 抱いて!いますぐ!この場で!
242 :
デフォルトの名無しさん :2012/10/25(木) 09:37:19.04
まて、ここから先は句読点同士の戦いだ、お前は帰れwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
243 :
デフォルトの名無しさん :2012/10/25(木) 09:41:35.07
句読点、句読点、句読点点ててん点、Let's Go!
244 :
デフォルトの名無しさん :2012/10/25(木) 10:00:43.71
俺にはエリートをどん底に突き落とす秘策がある
2chで句読点は場違いだろw
最近のガキはすぐグズるんだな 授業もこんな感じなのか?
248 :
デフォルトの名無しさん :2012/10/26(金) 02:15:43.43
>>247 おいおいちゃんと句読点つけろよ、正しくはこうだろ。
最近のガキはすぐグズるんだな。
授業もこんな感じなのか?。
句読点によってお前はどん底に突き落とされたwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
249 :
デフォルトの名無しさん :2012/10/26(金) 02:16:32.40
そろそろ別のネタにしようよ・・・
251 :
デフォルトの名無しさん :2012/10/26(金) 02:17:53.65
>>249 知りたいか?教えてやる、それは句読点だ
252 :
デフォルトの名無しさん :2012/10/26(金) 02:19:39.73
>>250 ネタであればどれだけよかっただろうか、だが
>>223 は本気だ。
>>223 は本気で書きやがったんだ。
> 技術論文を書いてるんじゃないんだから、
> 「,.」を日常的に使うのは止めた方がいい。
> 無教養な専門馬鹿にしか見えないから。
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
なんでファビョってんだ
ここ東亜だっけ?
255 :
デフォルトの名無しさん :2012/10/26(金) 03:12:24.14
>>253 あれあれ?句読点が見当たらないぞ〜そんなんじゃこのスレじゃ通用しないぞ〜wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
256 :
デフォルトの名無しさん :2012/10/26(金) 03:13:13.05
257 :
デフォルトの名無しさん :2012/10/26(金) 03:14:03.17
今日もコテンパンにやっつけてやったは、俺の句読点の前では敵ではなかったはwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
>>253 「無教養な専門馬鹿」が余程悔しかったんだろ。
だが、
>>223 の指摘は間違っていたのかも知れない。
正しくは「専門馬鹿」ではなく「正真正銘の馬鹿」だな。
多分
>>219 は「専門馬鹿」という言葉の意味すら知らないと思う
260 :
デフォルトの名無しさん :2012/10/26(金) 08:28:45.93
>>258 句読点理論には誤りがあった!wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
261 :
デフォルトの名無しさん :2012/10/26(金) 08:31:53.00
>>259 句読点つけてないわけだからお前のほうが馬鹿だということになるな、なぜならばお前は句読点をつけていないから。詳しくは
>>258 の理論を勉強しろ。
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
262 :
デフォルトの名無しさん :2012/10/26(金) 08:33:08.61
句読点でわかるからね、ぜーんぶわかるからね
,.の話を勝手に句読点の有無にすり替えるあたり、 悔しさが滲み出てますなぁ。
264 :
デフォルトの名無しさん :2012/10/26(金) 09:33:41.75
>>263 「,.」は句読点じゃないとでもいうつもりか!
句読点じゃないというのならなんだというんだ!
まぎれもなく句読点だ!
「、。」が句読点であることは明白だ!
だったら「,.」も句読点だ!
266 :
デフォルトの名無しさん :2012/10/26(金) 10:38:43.17
267 :
デフォルトの名無しさん :2012/10/26(金) 10:41:13.66
頭の回転数は句読点から計算できるwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
268 :
デフォルトの名無しさん :2012/10/26(金) 13:21:18.05
>>268 中身を見たが、今の流れとは全然テーマが違う。
残念ながら却下。
実行中のバッチを途中から書き換えて保存すると通常はエラーで止まりますが これを止まらないようにする方法あったような気がするんですが自分の気のせいですかね?
気の迷いだね
書き換え前後で既存のコマンドのファイル先頭からの文字位置が同じだったらいいんだっけ?
call とかの ラベル は8文字までと思っていたら、もっと長くてもちゃんと呼べた。 ラベル名を短くする努力はなんのために…… orz
MSのヘルプやusageを信じてはいけない
9文字以上のラベル名は8文字目までで判断されるとか個人ブログかなんかで見たことあるけど、 MS公式のヘルプやドキュメントってどこにあるの?
276 :
デフォルトの名無しさん :2012/10/27(土) 09:52:09.60
277 :
273 :2012/10/27(土) 11:32:31.61
ラベルで9文字以上行けた件、恥を忍んで尋ねたい、 ひょっとして、FAQ だったりした?
278 :
デフォルトの名無しさん :2012/10/27(土) 11:37:02.24
うぜ
>>277 俺も知らなかった、というか気にしたことがない。
ちょっと気になったので、実機で確認したら 127文字までちゃんと判断してくれる。
ただ、ラベル名を 128文字以上にすると、cmd.exe がアプリケーションエラーで落ちる (w
環境:
OS: Microsoft Windows XP [Version 5.1.2600]
cmd.exe: 5.1.2600.5512
cmdを虐めんなよwそんな大したもんじゃないんだからw
でもなんか妙に機能拡張してるよね。cmdのくせに。
284 :
273 :2012/10/27(土) 18:33:06.00
れすあり FAQですよね、やっぱし 20文字試して通常使用に困ることはないと思ってたけど、127文字までか。 確認どうもです。
>>284 FAQは「日本語ドキュメントを信用するな」の方な。
皆様こんばんは どうかお力をお貸し下さい。 音楽ファイルのタグ情報を元に、 音楽ファイルをbatファイルにドラッグしたら 格納しているフォルダ名を変更するbatファイルを作りたいのですが どのように記述すれば良いのでしょうか? タグ情報 アーティスト 俺 アルバムタイトル 俺の作品 発売年 2012 拡張子 mp3 wave など色々 の音楽ファイルタグを参照しフォルダ名を 俺 - 2012 俺の作品 [mp3] に変更したいなと思っています。 どうか、教えてください、よろしくお願いします。
※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
バッチだけでできんのかそんなことw
wmic /?
うそばっか
すみませんが、お知恵を貸していただけないでしょうか。 ■やりたいこと windows7で次のコマンドの実行結果の文字列を変数RESULTに設定する。 "rplsinfo.exe" "TOKYO MX__番組 (1).ts" -d コマンドの実行結果 YYYY/MM/DD ■現在のスクリプト for /f "usebackq tokens=*" %%a in (`%2 %1 -d`) do set RESULT=%%a echo [%RESULT%] ■引数 %1は"C:\Users\山田太郎\Videos\TOKYO MX__番組 (1).ts" %2は"rplsinfo.exe" ■実行結果 'rplsinfo.exe" "TOKYO' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 [] お手数をおかけしてすみませんが、よろしくお願いいたします。
293 :
デフォルトの名無しさん :2012/10/30(火) 08:10:39.69
バッチファイル 全角スペースでググれば何が問題になってるか解るよ
>>292 > %1は"C:\Users\山田太郎\Videos\TOKYO MX__番組 (1).ts"
> %2は"rplsinfo.exe"
実際は%1にはダブルクオーテーション無しで
C:\Users\山田太郎\Videos\TOKYO MX__番組 (1).ts
が入ってると思うけどね。
forの前に
echo %2 %1 -d
とかやって実際にはどんなコマンドになってるのか見ればいいよ。
>>293 ありがとうございました。
お蔭様でなんとか対策を検討できそうです。
>>294 ありがとうございました。
echo %2 %1 -d とやってみると、次のようにダブルクオーテーション付きで表示されました。
"rplsinfo.exe" "C:\Users\山田太郎\Videos\TOKYO MX__番組 (1).ts" -d
こちらの件はおそらく大丈夫だと思いますが、気になる点があればご指摘ください。
知ったかしてみる for /f "usebackq" in (``) の``の中で コマンド本体となるrplsinfo.exeを""でくくるとマズイ 引数は""でくくっても大丈夫
>>296 ありがとうございます、早速試してみました。
なんと!上手く行きました。
これでなんとか目的の物が作れそうです。
本当にありがとうございました。
For文で変数の遅延展開を有効にする魔法のSetコマンド文ってなんでしたっけ!?
300 :
デフォルトの名無しさん :2012/10/31(水) 10:29:31.06
>>298 SETLOCAL ENABLEDELAYEDEXPANSION
301 :
デフォルトの名無しさん :2012/11/03(土) 15:46:52.18
オプション無しのdirコマンドでは隠し属性やシステム属性は出力されませんがディレクトリも出力されてしまいます そこで、ファイルのみを出力しようと、dir /a-dとしたら、今度はファイルのみではあるのの隠し属性やシステム属性まで出力されてしまいます オプション無しのdirコマンドと同じフィルタレベルで出力するには、dirコマンドのオプションをどのように指定すれば良いのでしょうか? また、
dir /a-d-h-s
303 :
301 :2012/11/03(土) 15:52:06.04
304 :
デフォルトの名無しさん :2012/11/03(土) 16:15:04.06
305 :
301 :2012/11/03(土) 16:16:36.41
>>302 一つの/aオプション中に、-h-sやのように必要な数分の-を使えるとは知りませんでした
どうもありがとうございます。
306 :
301 :2012/11/03(土) 16:17:56.58
>>304 "dirコマンドのヘルプも見てもそうは書かれていない" equ "なに"
307 :
デフォルトの名無しさん :2012/11/03(土) 16:20:33.27
>>306 お前あれだな、気持ち悪いな、ゲロ吐きそうなほど気持ち悪い、ゲロキモだな。
いかがですかってなに?参りましたといってほしいの?何を聞いてんの?いかがでしょうか?
308 :
デフォルトの名無しさん :2012/11/03(土) 16:23:23.50
今日はいい天気なので部屋の窓を全開にしようと思うのですがいかがでしょうか?
309 :
デフォルトの名無しさん :2012/11/03(土) 16:25:51.00
さっき買い物に出かけたときふんずけたウンチは犬のものだと思うのですがいかがでしょうか?
310 :
デフォルトの名無しさん :2012/11/03(土) 16:27:25.97
いかがでしょうかフェスティバルが開催されていると聞いてやってきたのですがいかがでしょうか?
dir /aは限定なしなんだからすべてだろ dirはデフォルトでdir /a-h-sと同じだろ
MSのドキュメントは話にならんだろ 2chのほうがましだろ
robocopy "G:\\" "Z:\\G\\" /mir /mon:1 /tee /eta /log+:"R:\\ETC\\backup.log" GドライブとZドライブにあるGフォルダを同期させたいのですが、一部のファイルで同期完了したのに「より新しい」と表示され何度もコピーされます 一度コピーしたら変更があるまでコピーしないにはどうすればいいんですか?あとGフォルダが隠しフォルダになってしまうのは何か関係ありますか?
その robocopy とやらの作者に聞けよ。
そのZドライブがFATだったり古いNASだったりするとタイムスタンプ精度が悪くて同期がうまくいってない可能性がある
/FFTオプションを付けてみたら?
>>316 robocopy はMS純正でVista以降の標準コマンドなんだが
>>315 backup.logファイルにヒントがあるかもしれないから、コピペするか
ログファイル自体をどこかにうpしてもらえませんか?
320 :
デフォルトの名無しさん :2012/11/04(日) 13:06:45.53
321 :
デフォルトの名無しさん :2012/11/04(日) 13:19:53.32
>>317 /FFTオプションをつけたところ更新されないようになりました
>>318 何回もコピーしたためか、ログが300MB近く吐かれててメモリ足りずに開くこともできませんでした・・・
>>316 robocopyを知らないシロート発見。
rsync 使ってるから、robocopy なんて知りませんでしたが、それが何か?
MS様に聞けない小心者ちゃんをいじめちゃダメぇ〜
バッチ中で何かのコマンドを実行した時に今までの画面出力が 全角文字の部分だけ重複して 1 個個ののフファァイイルルををココピピーーししままししたた。。 みたいな感じになってしまうことがあるんだけど これはいったいどういう理由でなってるの?
echo だったかな
ごめん適当ぶっこいたわからん
ならん
>>324 全然用途が異なるツールあげられても。w
どうせボケるなら、↓これくらいボケないと。
> OpenOfficeつかっているから、robocopy なんて知りませんでしたが、それが何か?
WIN8 をつかているんですが、管理者権限を無効にするコマンド誰か知りませんか? XPでもいいです。
そんなツッコミはいらんよ (w
ひょっとして
>>330 って、マジでツッこんでたの?
まさかね (w
336 :
326 :2012/11/06(火) 02:13:17.13
どうもmediainfoの古い版を起動したときに
一瞬コードページが変わるような表示になり元に戻った時に
>>326 のようになってしまうようだ。
最新の版では起きないみたい。
.batに限らないが、Win上で動くスクリプト関連のエディタは、Sakuraが無難? Ctrl+Bで実行とか、Ctrl+F5のコマンドエミュレートとか便利っぽいんだが、 他にいいのあったらおせーて。
さあ? 実行はtest_hoge.bat $(Path)でもあれば十分だし何でも良いんじゃないの
findstr や find だと検索に一致した文字列のある行を表示しますが、 検索に一致した部分だけを表示してくれるOS標準のコマンドってありませんか?
>>339 意味が解らん
具体例か目的を書いた方がいい
findstr pattern file >nul 2>nul && echo pattern
>>342 バッチにCScript埋め込まばいいじゃん。
色々ありがとうございます。 バッチと合体?させる方が簡単なのか、難しくなるのかすら見当ついてませんが、 作成依頼をする事でもないので、とりあえず vbs のいろはから始めてみます。
yagrepでいいんじゃないのかw
お題読めないメクラはレス禁止。 > OS標準のコマンド
OS標準のコマンド ってPOSIX 1003.1か?
このスレでそういう低能な質問するか?
バッチファイルごときで低脳とか有能とか関係あるのかw
無能がバッチやると、バッチじゃ不適切なことまでバッチでやろうとするよ
「それでもバッチでやってみようず!」ってスレだと思ってみているけど、違うの?
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる 質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。 ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
OS付属のコマンドだな 標準なんて使うなよな
355 :
デフォルトの名無しさん :2012/11/10(土) 19:04:29.45
バッチ内のforコマンドでusebackqを使い、実行ファイルへのパスに空白を含むコマンドを実行させたいのですが for /F "usebackq" %%A in (`c:\path to\command.exe`) do echo %%A のようにしてもうまく行きません 引数も食わせたいのですが、どう記述すべきでしょうか?
for /F "usebackq" %%A in (`"c:\path to\command.exe"`) do echo %%A
>>354 その程度のあいまいさを処理できない人工無脳はお引き取りください。
358 :
デフォルトの名無しさん :2012/11/10(土) 19:18:34.59
for /F "usebackq" %%A in (`call "c:\path to\command.exe"`) do echo %%A
359 :
デフォルトの名無しさん :2012/11/10(土) 19:21:43.50
>>356 速攻の回答ありがとうございます
これで引数なしでコマンドの実行が出来ることは確認できたのですが
引数の与えることがどうもうまくできません
引数をダブルクォーテーションで括ったり、くくらなかったり、バッククォートの外に出してみたり
色々とやってみたのですが、、
お手数かけますが、引数を与える方法を教えてください
よろしくお願いします
ダメだったのを書けよ。
>色々とやってみたのですが、、 for /F "usebackq" %%A in (`call "c:\path to\command.exe" 引数`) do echo %%A これはやってないんかい?
362 :
デフォルトの名無しさん :2012/11/10(土) 21:11:13.63
お世話になりました
for /F "usebackq" %%A in (`"c:\path to\command.exe" pattern a.txt`) do echo %%A
上記でうまくいきましたが、当初うまく行かなかったのは
利用する(外部)コマンドによって挙動が異なるからのようです
使いたかったコマンドはgrepで、下記の物を試しました
うまく行かないコマンド
http://www.steve.org.uk/Software/grep/ うまく行ったコマンド
http://geoffair.net/unix/grep.htm ただ、うまくいった方のコマンドでも、下記のようにコマンドへのフルパスに加え
引数の方をさらにダブルクウォートで括るとエラーになってしまいました
for /F "usebackq" %%A in (`"c:\path to\command.exe" "a.txt" `) do echo %%A
ありがとうございました
363 :
デフォルトの名無しさん :2012/11/10(土) 21:14:46.12
訂正 × for /F "usebackq" %%A in (`"c:\path to\command.exe" "a.txt" `) do echo %%A ○ for /F "usebackq" %%A in (`"c:\path to\command.exe" "pattern" "a.txt"`) do echo %%A 等
for /F "usebackq" %%A in (`""c:\path to\command.exe" "pattern" "a.txt""`) do echo %%A 等
for /F "usebackq" %%A in (`call "c:\path to\command.exe" "pattern" "a.txt"`) do echo %%A 等
>>356 >>357 OSのバージョンやEditionによってはコマンドの有無が違うから、
標準ではないというのは正しい。けど特別拘った表現は不要だけどw
homeエディションにopenfilesが無くて話が頓挫とか稀にある。稀にね。そう、homeならね。
>>352 確かにWindows板に比べればその気は強いが
実用の場合はそこの見極めは最低限いるからな
Q.環境変数に4桁の数字を代入したいのですが、 set /a keisan=0185 echo %keisan% こうするとうまくいきません。 どうにかして0185を185として代入させることはできませんか。 ご教示ください。
一桁ずつとりだして ゼロだったら削除の上で結合することにしました ほんとうにすみませんでした %[環境変数]:~[オフセット(位置)],[文字数]%
set /a で最初の数字が0の時は8進数、xなら16進数として認識される。 最初が0の10進数として認識させたいなら、最初の0を削る以外にも 桁数が分かってることを前提として set hoge=0185 set fuga=1%hoge% set /a keisan=fuga - 10000 等とやったりする。
テキストファイルがいくつか有るとして、 そのすべてのファイル名の先頭に(abc)とつけるとしたらどうやればいいですかね? ren *.txt (abc)*じゃできないみたいなのでどなたかご教授お願いします。
for %i in (*.txt) do ren %i abc%i
recursion起こすぞ
for /f "delims=" %i in ('dir /b *.txt') do ren %i abc%i
ファイル名に空白あったら?
for /f "delims=" %i in ('dir /b *.txt') do ren "%i" "abc%i"
ファイル名にハングルとか非JIS文字あったら?
wsh使え
set hoge=0185 set fuga=10000%hoge% set /a keisan=fuga %% 10000
>>377 ありがとうございます。こんなのがスラっと欠けるなんて凄いですね。
/fオプションの使い方がよくわからないので、もし良かったらこのコマンドの解説を軽くしてもらえませんか?
for/?
forを完璧に使いこなせたらバッチの何割を会得したと言えるんだろうと思うくらい多機能だよなあ
set keisan=0185 set /a keisan=2*1%keisan%-2%keisan%
>>385 完璧に使いこなせたらって、そもそもforの何割を会得したんだ?
完璧が100%以外の意味を持つとは知らなんだ
日本語も何割を会得したんだ?
for /F はトークン切り出しとかでCSVの簡易解析とかに使ったかな?
昔for /F の括弧中に全角文字があると引数が尻切れになるバグがあったな WinXP以降は直ったみたいだが
代わりに他のバグがあります
@Echo Off & SetLocal EnableDelayedExpansion Echo ■Params: 0 " " 6 Call :FuncHoge 0 " " 6 Echo ■Length: 12345678901234567890 Echo ■Return: %Return% GoTo EOF :-------------------------------- :FuncHoge Set X=1 & Set Z= For /L %%I In ( 1, 1, %3 ) Do ( Echo ■ Check: !X! If /I !X! GEQ 10 ( If /I %1 LSS !X! ( Set Z=%~2!Z! ) ) Set /A X=!X!*10 ) Set Return=!Z!%1 GoTo END :-------------------------------- :EOF Pause>Nul :END 数値の桁合わせに書いたんだが最初から文字列にすればよかったと後悔記念 ご指摘plz
えーと何がしたいのかよくわからんのだが @echo off setlocal enabledelayedexpansion call :FuncHoge 0 " " 6 Echo ■Length: 12345678901234567890 Echo ■Return: %Return% pause goto :eof :FuncHoge for /L %%i in (1,1,%~3) do set spacer=%~2!spacer! set Return=%spacer%%~1 set Return=!Return:~-%~3! goto :eof こういうことでいいんかな・・・?
PC起動時にコマンドプロンプトをスタートアップより起動してPINGを自動で送るようにしたいです。 コマンドの内容はこれです「ping *.*.*.* -t -l 2000」*はipが入ります CMDのショートカットのプロパティをいじるだけでは無理でしょうか? バッチファイル作成が必要なのでしょうか? どなたかご教授願います。
バッチファイル作ってスタートアップに突っ込んどけばいいんじゃないの それかschtasks使うとか
ショートカットのリンク先を %windir%\system32\cmd.exe /c ping 127.0.0.1 -t -l 2000 たぶん作業フォルダをsystem32とかじゃなく適当な場所に指定する必要あり
ショートカットのリンク先を ping 127.0.0.1 -t -l 2000
みなさん短時間の間にレスしていただきありがとうございます。
>>399 さんの方法で上手くいきました。
本当にありがとうございました。
cmdよぶなら%ComSpec%
よばんでいい
んなこたわかってる
/cって要らないんじゃないの
んなこたわかってる
よばんでいい
おばんです
>>396 そうです!まさにそれです!!!
今回 set /? を何度も読んだのに気づきませんでした。
恥ずかしい。感謝。また醜態さらしに来ます。恩に着ます。
410 :
デフォルトの名無しさん :2012/11/22(木) 15:19:27.80
外部からファイルリストを読み込んで、リストのファイルにアクセスしたいんですが。 半角の「!」が含まれていると、アクセスできなくなります。 読み込み時にエスケープさせることはできないですか? for /f delims^=^ eol^= %%A in (filelist) do ( echo "%%~A" )
411 :
410 :2012/11/22(木) 15:21:21.05
追記 サブルーチン、他コマンドの引数にしたいのですが失敗するんです。
できません
遅延展開してんじゃねーの?
じゃあこれでいいんじゃね for /f delims^=^ eol^= %%A in (filelist) do ( setlocal disabledelayedexpansion echo "%%~A" endlocal )
415 :
410 :2012/11/26(月) 11:07:44.29
サンクス setlocal disabledelayedexpansionで読み込めました
Win 8 Pro x64 を使用しています。 バッチ操作で netsh wlan show interfaces コマンドを起動し、 取得される SSID を変数に取りこむには、どのようにすれば良いのでしょうか。
昔なら ssid.bat を作っておいて出力をダイナミックに実行とかアブナイことしてるやつもいたけど 今はforがある。いい時代だ。
418 :
416 :2012/11/29(木) 23:45:25.64
>>417 これでできました。ありがとうございました。
for /f "delims=: tokens=2" %%i in ('netsh wlan show interfaces ^|find /i " SSID"') do set p=%%i
ちなみに次の行で set p=%p:~1% をしてスペースを削除させてるのですけど、
これを set p=%%i の時点で行うことは可能なのでしょうか。
教えてください。 ミュージックプレイヤー(foobar)起動時に自動でバッチファイルを実行させようと四苦八苦しています。 どうすれば良いでしょうか? アドレスお願いいたします。
420 :
デフォルトの名無しさん :2012/12/02(日) 00:36:55.55
バッチファイルでfoobar起動
>>420 レスありがとうございます
なるほど!
元々このような事を考えたのは、
立ち上げ時にfoobarフォルダにある
プレイリストファイルを自動で削除出来ないか?と思ったからです。
foobar起動のバッチファイルにプレイリスト削除も記述してしまえば良いのですね。
早速挑戦してみます。
ありがとうございました!
msecぞろ目率が高いのは板の特性なのか?
くっそwwww
%name%を8:3の名前に変更したいです。 どうすればいいですか?
for %I in ("%name%") do ren "%~I" %~snxI
setlocal enabledelayedexpansion set FOLDER=%USERPROFILE%\My Documents\My Music\Ripping for /F "delims=\ tokens=1-5,6*" %%a In ( 'dir /S /B "%FOLDER%"' ) do ( set FULLPATH=%%A\%%B\%%C\%%D\%%E\%%F\%%G echo !FULLPATH! ) tokens=1-5,6* の「1-5」と「6*」をそれぞれひとつの変数で表せないでしょうか。 %%A\〜%%F\まで、ひとつひとつ書かないと駄目ですかね? tokens=1*,6* という書き方は駄目でした。。
%%~pA みたいに展開するとか。
できないよw
move.exeのありかを教えてください。 起動できるのに存在がわかりません。 隠しファイルも探しました。
copyと同じところw
move.txt /?
where move
$> which move fuck you. $>
www.google.co.jp/search?q=>436 もしかして "まぬけ"
この流れは・・・・・負ける・・・・っっ!!!
おとりこみちゅうすみません コマンドプロンプトから管理者として実行するにはどうすればよいすか?
>>440 ”コマンドプロンプトから管理者として実行”でググればいいじゃんない?
ぐぐってもなさそうだが? 3番目に外部ソフト利用があったけどわざわざ使うか
>>442 runas
ろくにググれもしないお前は死んで詫びろ。
スレが汚れる
runasじゃねーだろバカ
バカはスルーで
ルナス!
こいつはバカだな
ばかわだまってろ
runasなんてコマンドねーよ 443はバカだね
みんなにバカ呼ばわりされて443涙目wwww
runasはあるけどelevationとはちがうわなwバカにはわからんだろうがw
で、elevationを外部ソフトなしでやれんのか?
>>431 where /r \ move.exe では
Could not find move.exe
になります。copy.exe copy.com でも同様です。
徹底的に検索しても、見つかりません。
皆さんは、本当に存在場所を具体的に示すことができているのでしょうか?
かなり生意気な物言いになってしまいますが、具体例を示していただけると助かります。
〜〜になります。 だけでいいんだがどうして愚者はこうも挑発が好きなのか
move.exeならオレの隣で寝てるよ
>>453 xcopy, findstr, replaceあたりはexeがあるけど、copy, move, renameあたりは検索してもexeが無いね。
ちなみに巨大ファイルをmoveコマンドで移動中にタスクマネージャを確認するとmove.exeなんて出てこない。(xcopyコマンドだとxcopy.exeが出てくる)
その代わりにcmd.exeのCPU使用率が上がるから、moveコマンドはcmd.exeに内包されてるんだと思うよ。
start move.exe そんなもの無いのがすぐ分かるだろw
今の人間に内部コマンドと外部コマンドと言っても通じんのだろうな…
逆に古いユーザはDOSのMOVE.EXEを記憶してるから勘違いする
冬休み初日としてはまずまずの流れ。
move.exeなんて無いのに move.exe /? ってやるとヘルプが表示されるね。訳わからん・・・
>>433 も書いてるけど、move.gif とか move.xxx でも表示されるよ。
内部コマンドかどうかは
>>433 で分かるってことよ
dir.exe *
内部コマンドかどうかは "move" /? だな
set PATHEXT=; move /? だろ
>>465 xcopyやfindstrでも同じように出るぞ
だな
でたらめのコマンド名でも同じエラーだし
Win7では move. /? と xcopy. /? は違うのか?
Win7では "move" /? 外部だけ検索 move. /? 内部だけ検索
初心者〜管理者まで必読!コマンドラインが消えた
cmd.exe や PowerShell ですが System32 と SysWOW64 にあるんだけど どっちを使えばいいの?
64bitをつかいたければ32 32bitをつかいたければ64
右折したければ左にハンドルを回す 左折したければ右にハンドルを回す みたいな
サンクス System32 に 64 ビットのバイナリがあるのか
それは64bitからの場合だよ 32bitからだとまたちがうんよ
32bit から 64bit なんて、呼べたっけ?
呼べるにゃ
32bitから64bit呼ぶ場合はSysnative
>>475 スレ立ってからレス数が伸び悩んでいたのでDAT落ちしたのか。
お互い9スレ目まで来ていたのにな。
「コマンド」「DOS」ぐらいでしか引っかからないスレタイが一番の問題だったな。
こっちは「スクリプト」「バッチ」「bat」「cmd」とかで引っかかるから断然有利。
485 :
デフォルトの名無しさん :2013/01/02(水) 12:54:52.91
>>483 64bit版のcmd.exeを管理者としてコマンドラインから実行したいのだけど、
%windir%\sysnative\cmd.exeを管理者特権でコマンドライン実行するにはどうしたらいいの?
そのコマンドラインは32/64どっちなんだよお
>>486 わかりません
64ビットOSで「ファイル名を指定して実行」した場合を想定してはいます
UTF8で保存されたテキストファイルがあるんですが、BOM有なのかBOM無なのかを判断する方法はありますか? コマンドでなくてもいいんですが、Windowsの標準機能だけで判断したいのです。
「バッチファイルだけで、UnicodeLE や UTF-8 の BOM を除去する。」 これを使えば前後のファイルを比較して違ってれば有と分かるな
490 :
488 :2013/01/02(水) 18:25:55.57
自己レスです。
DEBUGコマンドでテキストファイルをバイナリ表示し、
先頭2バイトが「FF FE」(ビッグエンディアンの場合は「FE FF」)であるか否かで
BOMの有無が確認できました。
>>489 ありがとうございます。
でもその方法はチトめんどいです (^_^;)
>>490 UTF-8のbomのバイト列は「EF BB BF」なんだけど、
UTF-8で保存されたテキストファイルを調べたいんじゃなかったの?
先頭文字を調べればいいだろ
先頭4文字が����か調べればいい
for文中にカウントアップして進捗状況がわりにechoさせてるんだけどカウントが多いと今までの表示が凄い勢いで上にぶっ飛んでいくんだよ 何とか1行の中でカウントアップしたいんだけどバッチだけじゃ無理かな
LFだすからだろ CRにしとけ
>>494 遅延展開で、変数に入れて、clsして、echoとか
set /p hoge=hogehoge <nul
<nulは知らなかった。ありがとう。(横からだケド) SetLocal EnableDelayedExpansion for /L %%a In (1,1,9) do ( :cls set /A b=!b!+1 set /P b=!b!<nul pause>nul )
ありがとう 正直お前らが何言ってるのかさっぱりだからちょっと勉強してくる
500 :
デフォルトの名無しさん :2013/01/04(金) 08:55:30.30
やっと分かったすげー、バッチだけでプログレスバーできるとは
>>498 aが既にあるのにbをインクリメントする必要なくね?
引用 コマンドプロンプトやバッチファイルで、環境変数に改行文字(CR)を入れて使う。 環境変数に改行文字(CR)を入れる。 名 の unicode が 540D、これをシフトJISで読むと、0D 54 つまり、CR+T であることを利用して、CR を抜き出します。 setlocal enabledelayedexpansion for /f "delims=" %%1 in ('cmd /u /c echo;名') do ( set CR=%%1 set CR=!CR:~0,1! ) 改行文字(CR)を使うときは、環境変数を遅延展開します。 echo aaa!CR!bbb
>>493 set /p x= < 対象ファイル
if "%x:~0,4%"=="����" (echo BOM有) else echo BOM無
for /f %%i in ('"cmd /k prompt $h <nul"') do set bs=%%i for /l %%i in (0,10,100) do @(ping -n 2 0 >nul set /p=%bs%%bs%%bs%%%i%%<nul)
<nul に、へー、と思ってググったら for /L %%i in (1,1,80) do ( ping -n 1 127.0.0.1 >nul set /P <nul =# ) でプログレスバーっぽくできることに増々、へー、となった。
win764bitで、bluetoothアダプタの無効→有効をバッチファイルでできますか? スリープ復帰したときbluetoothマウス見失うことが頻発してて いつも手動で画面右下のアイコンから、bluetoothアダプタの無効→有効してます。
devcon.exe
デブゴン?
254 : デフォルトの名無しさん[sage] : 投稿日:2011/10/31 06:25:29 hogehogeという名前のフォルダを右クリックの「送る」に登録したバッチファイルに送ると、 WinRARで圧縮すると同時に圧縮したファイル名の先頭にその時の日付と時刻を 「(yy-mm-dd_hh-nn) hogehoge.rar」 このように追加したいのですがどういう書き方をすれば良いでしょうか? 255 : デフォルトの名無しさん[sage] : 投稿日:2011/10/31 07:16:57 cd /d "%~dp1" set "ymdhm=%date:~2,2%-%date:~5,2%-%date:~8,2%_%time:~0,2%-%time:~3,2%" set "path=%path%;C:\Program Files\WinRAR" winrar a "(%ymdhm%) %~nx1.rar" "%~nx1" 前スレでこのようなバッチファイルを作って頂いたのですが、 XPではうまく動作していたんですがWin7 64bitに移行してから、 複数のファイルをバッチファイルに送ると、ひとつのファイルしか圧縮されません。 すみません、教えて下さい。
shift /?
自分なりに作ってみたんですがどうでしょうか? 一応動いてはいるんですが、2個目以降のファイルは1個目に作られたアーカイブに追加していってる感じになっちゃってますね・・・。 C#を趣味で少しかじっただけなので、こうやってバッチ組むのは初めてなんです。。 @ECHO OFF SETLOCAL SET RARPATH="C:\Program Files\WinRAR\winrar.exe" cd /d "%~dp1" for %%1 in (%*) do %RARPATH% a -ag+(YY-MM-DD_HH-MM) " %~n1" "%%~nx1"
>>514 君がしたい動作になるようにWinRARのヘルプのコマンドラインの項をよく読め
setlocal 【オプションなど】 :LOOP if "%~1"=="" goto END 【forコマンド処理など】 shift goto LOOP :END exit ファイルが存在する間はshiftでループして、 存在しなくなったらエンドみたいのが基本形かな。 アーカイバのオプションなんかはよく理解した上で設定しないと、 意図した通りにはならないだろうから要熟読ね。 てか、rar.exeではなくwinrar.exeなのか。
>>516 ありがとうございます。参考にします。
rar.exeを使うほうが自然ですね、すみません。
力を貸してください。 下記コマンドを使用した際、 findのエラー出力で"ファイルが見つかりません"と標準で出るのを非表示にしたいです。 findのみでしたら 2>nulで消えたのですがこの使用だと抑止できないのでしょうか? for /F "tokens=3" %i in ('dir /S K:\HOGE\ ^| find "のファイル"')do set a=%i
findのエラー出力ではなくdirのエラー出力だから
>>519 なるほど・・・ありがとうございました。
初歩的なことでした、すみません。
写真屋のエレメンツでTIF画像を開くために、画像をペイントで1回上書き保存をしなきゃいけないんだけど その画像が膨大な量あるので、バッチで一括処理したいんですが何かヒントをいただけないでしょうか
TIFFを他の形式に一括変換するだけじゃないの? バッチファイルじゃなくそういうソフト使えばいいだけじゃない?
copy *.tif *.jpg
ren *.tif *.jpg
画像変換ならImageMagickのバイナリ拾ってこいよ
Windows7 x64で利用したいのですが、管理者権限のあるプロンプトから 管理者権限を継承せずに別のバッチファイルを呼び出し 管理者権限を持っているプロンプトに戻る方法 :: 逆(権限なしから権限ありを呼ぶ)でも化 もしくは 管理者権限を継承しないアプリケーションの呼び出し をするにはどうしたら良いでしょうか?
どうしようもねえよ
528 :
デフォルトの名無しさん :2013/01/16(水) 21:34:27.29
カレントディレクトリにdir 1, dir 2, dir 3ディレクトリがあり copy "dir 1/a.txt" "dir */a.txt" でコピーしようとしたらディレクトリが存在しないと言われました どうすれば空白文字の入った兄弟ディレクトリにコピーできますか?
530 :
529 :2013/01/17(木) 15:57:04.17
追記。実際にはディレクトリは10個もあるので一つ一つパスを記述するのは無しです。
1つのファイルを複数フォルダへなんていう都合のいいコマンドは無い。 諦めて全部書くか、法則性をもとにループで回せ。 for /l %i in (1,1,10) do copy hoge.txt "hage%i\hoge.txt" みたいにな。 ていうかパスに/使うなんてどこから出てきた? 余所の流儀を安易に突っ込むなよ。
532 :
526 :2013/01/17(木) 17:35:01.89
533 :
529 :2013/01/17(木) 18:40:10.74
>>531 うまくいきました ありがとうです
サブルーチン、if、for、setとかを覚えました
区切り文字気をつけます
534 :
デフォルトの名無しさん :2013/01/18(金) 00:58:00.05
for 文で数値を変えながらsqlを実行してますが ある変数での処理時間がかかりすぎる場合にタイムアウトして 次の変数になり処理するようにすることはできませんか?
>>534 localhostにpingでも打ってカウントしれ
>>534 コマンド側で割り込みするの気持ち悪いだろ
SQL側でやれ
cleanmgr /sageset:10 cleanmgr /sagerun:10 としたとき全ドライブでクリーンアップされますが、DVDドライブなども含まれてしまいますか?
>>533 区切り気を付けるって…
なんか勘違いしてる気がするな。
バッチファイルにドラッグ&ドロップされたものがファイルかフォルダかを判別する方法はありますか? ファイルは拡張子が無い場合もあるので「if %~x1%==""」とかでは判別できませんでした。
>>541 以下の内容をバッチファイルにしてSendToフォルダに入れてから、好きなファイルまたはフォルダを右クリック→「送る」→バッチファイル の順に操作してみてくれないか?
(普通に引数指定で実行してもいいけど)
@ECHO OFF
ECHO 【情報】引数は"%~f1"です。
IF "%~f1"=="" ECHO 【情報】引数が未指定です。
DIR/A "%~f1\." > NUL
IF ERRORLEVEL 1 GOTO STEP2
GOTO STEP3
:STEP2
ECHO 【情報】引数にファイルが指定されています。
GOTO STEP4
:STEP3
ECHO 【情報】引数にフォルダが指定されています。
:STEP4
ECHO 【情報】引数指定テスト終了。
PAUSE
c:\users\user\sendtoがファイルになるが?ぼけ
>>543 Windows7ではXPと異なり、以下のようにdirコマンドを使って(/aは省略不可)、SendToフォルダの見つける必要があるので注意しましょう。
※この例の場合、"C:\Users\usr\AppData\Roaming\Microsoft\Windows\SendTo" が本当のSendToフォルダになる。
c:\Users\usr>dir/a *SendTo
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は ****-**** です
c:\Users\usr のディレクトリ
2012/10/23 02:20 <JUNCTION> SendTo [C:\Users\usr\AppData\Roaming\Microsoft\Windows\SendTo]
相変わらず nul の使い道を理解してない情弱が多くて何よりだ
そういう情弱もな
確かにコンソールへのメッセージ表示ををNULデバイスにリダイレクトしても、エラーメッセージの表示までは抑制できない。 それは分かるのだが… ちなみにWindows95発売前のMS-DOSだけが対象OSなら、dirコマンドなど使わずとも以下の一行で事足りるように記憶している。 (うろ覚えだから、あまり自信はない。結局。Windows95/NT4.0〜Windows7の場合はVBScriptを利用するのが一番スマートかも?) IF "%1\."=="" ECHO 【情報】ディレクトリが指定されてます。
>>541 ファイルであるか否かを判定するのではなく、
ディレクトリであるか否かを判定する。
if exist "%~1\*" echo;folder else echo;file
カッコが要った。 if exist "%~1\*" ( echo;folder ) else ( echo;file )
>>541 の悩みを一行で解決してくれるとは、さすが情強
c:\users\user\sendtoがfileになるが?ぼけ
%~aIを見るのが正解だな
for /f usebackq %%i in (`mshta vbscript:execute^("CreateObject(""Scripting.FileS ystemObject"").GetStandardStream(1).Write(CreateObject(""Scripting.FileSystemObj ect"").FolderExists(""%~1"")):close"^)`) do echo %%i
バッチで簡単にできることをそこまでするかばか
>>552 set attribute=%~a1
if "%attribute:~0,1%"=="d" (echo;folder) else (echo;file)
と、いうところか。
そゆこと
557 :
デフォルトの名無しさん :2013/01/19(土) 21:28:35.08
>>555 ジャンクションやディレクトリのシンボリックリンクの属性も、
"d"になるの?
dにlが付く
パスにスペースを含むファイルをバッチファイルにドロップした時は%*%でパスを取得できるけど %~n*%ってやってもファイル名は取得できないね。どうすればいいのだろうか?
普通に for で回すしかないんじゃないか? for %%f in (%*) do echo %%~nf
561 :
559 :2013/01/20(日) 11:31:33.22
>>560 そのままコピペしたらでけたよ!アリガd!!
BOM(0xff 0xfe)か。 そのページからコピペ
batファイルスクリプトのみで文字と背景の色を変更する事はできませんか? 他の言語で言うcursesライブラリみたいなかんじで
>564 color /?
colorは画面全体 文字だけならfindstr
普通に%~n1でいいけど?
標準入出力に対応したコンソールってないですか? PowerCmdとConsole2は未対応でした 有料でも構いませんがなるべく無料がいいです
cmd.exe
バッチファイルで文字色と背景色を変えて文字列をECHOする。
"set = *"と"set == *"の違いがよく解らないのですが、=を2つ付ける事に意味はあるのでしょうか?
どっちも コマンドの構文が誤っています。 なので違いはない。意味もない。
set hoge=fuga set hoge==fuga この2つの違いとしたら前者はhogeに「fuga」が、後者は「=fuga」が入っている
575 :
539 :2013/01/24(木) 20:56:38.30
すいませんこれ実行してもクリーンアップされませんでした ダイアログが出て全てチェックはしました なぜでしょうか cleanmgr /sageset:10 cleanmgr /sagerun:10
576 :
デフォルトの名無しさん :2013/01/25(金) 03:14:53.32
バッチファイル内のset /aで、括弧使って計算をグループ化したらエラーに マニュアルどおりにやってるはずなのに・・・ と色々ググったりしても解決せず まさか・・・と思いエスケープしたら機能した なんなのこの実装・・・ というか/?に書いとけよ・・・
エスケープなんか要らんけど。 具体的にどんな計算だったか書いてみろ。
578 :
デフォルトの名無しさん :2013/01/25(金) 04:06:41.20
気になるんだったらてめーで勝手に試せばええ
C:\>set /a (1 + 10) * 3 33 C:\>set /a (1+10)*3 33 エラーとやらにはならんな。
自分で文法間違ってファビョる奴は始末におえんな
(set /a (1+10)*3) *3) の使い方が誤っています。 とか
入れ子の解析なんて俺ならしないな
583 :
デフォルトの名無しさん :2013/01/25(金) 23:44:41.72
ここレベル低いな 昨日今日始めた奴ばっかかよ
C:\>(set /a "(1+10)*3") 33 C:\>
586 :
デフォルトの名無しさん :2013/01/26(土) 00:20:00.74
超FAQに右往左往してる自覚はないんだな
誰か困ってる人がいたみたいだけど、俺は困らないしねぇ・・・
588 :
デフォルトの名無しさん :2013/01/26(土) 00:59:37.48
まぁお前は単なる冷やかしだけのゴミだけどね
>>584 へーこんなことできるんだ。
と低レベルな俺w
>>576-577 どんな間違いしたんだよ。 マヌケも反面教師として役に立つからかけやゴミカスが。
お前の脳みそ残念すぎ
592 :
577 :2013/01/26(土) 13:10:43.53
あまりにも初心者的間違いをしでかしたので 恥ずかしくてそれを晒すことも出来ず 他人を貶める事でしか精神の安定を保てないのでしょう。
cls
595 :
デフォルトの名無しさん :2013/01/27(日) 02:14:30.10
>>593 それ自分のことじゃん
>>581 のように答えを出せない馬鹿が、自己解決した奴に絡んで精神の安定を図ってるだけ
自分が初心者以下の能力しか持ってないことを自覚しないと
echo off
>>597 お前いい加減にしたらどうよ
恥の上塗りはお前だわ
goto :EOF
だからなにをしでかしたのか言ってみろよ あと577は間違いだ。謝罪する。
usbをパソコンに接続すると自動的に実行するやつってbatで出来ますか?
何を企んでるやら
usbにwebサーバを入れてCMS運用です
autorun.inf usb
なるほどありがとうございます それを使ってやってみます
システムにパスが通ってるはずなのにコマンドが使えません コマンドプロンプトからコマンドを打つと確かに使えます batファイルからだと使えません 絶対パスで指定するしかないのですが、batファイルの中でもシステムのパスを見る方法はありませんか?
パスが通っていれば実行できる。実行できないのはパスが通ってないから。 キミが考えなきゃいけないのはどうして、そのbatの中ではパスが通っていないかという事。
愚か者は放置で
cmdファイルなら使えるよ
また勝手に放置とかいって仕切る奴がいるよ
batファイルからでも使えるよ
>batファイルの中でもシステムのパスを見る方法はありませんか? @echo off path
見えました!
Good Job !
>>608 64bit System32 SysWOW64 sysnative
この辺りのキーワードが該当するような…
ハズレ
619 :
デフォルトの名無しさん :2013/01/30(水) 21:10:46.23
すみません。 複数のフォルダ名を引数で渡して、それぞれのフォルダ内のファイルをコピーしたいのですが "コマンドの構文が違っている"とエラーが出ます。お願いします。 @echo off for /L %%i in (1,1,10) do ( if not "%%i" == ""( xcopy %%i C:\Users\%%i\ /Y ) else (exit) )
if a==a( コマンドの構文が違っています
23 6554 184 296 5040 ↑のように数が入ったファイルがあるのですが、これらの合計値を求めることはできますか? エクセルならセルに貼り付ければ一瞬で右下に合計値が表示されますが、エクセルを使えない環境なので…
for /f %i in (a.txt) do set /a x+=%i
23+ 6554+ 184+ 296+ 5040= バッチじゃないけどこんな風にして電卓にコピペしてもいい。
ちなみにset /aで計算できるのは32bit符号付き整数の範囲なんで 2147483647を超える数値は計算出来ない。
9*9の一桁しか計算できない俺よりはずっとまし
628 :
622 :2013/02/08(金) 01:50:50.77
>>623 できました!ありがとうございます。
>>624 こちらも同じ結果になりました〜!(当たり前かw)
しかしこんなこと出来るんですね。
覚えておきます。感謝!
>>625 そんなすごい数は出てこないので大丈夫ですw
>>627 試してみたら確かに。
気をつけます。
凄い数っていってもファイルサイズとかだと簡単に出てくる数字。 高々2GBまでしか計算出来んってことだから。 それ以上は桁を切って使うとか面倒なことになる。 ドライブの空き容量とかは確実に超えるからな。
キロバイト単位/切り上げで計算して逃げたこともあるが、 2TBが当たり前になってきて、sh−がないメガバイトで計算だ〜 と、まさにイタチごっこ
CScriptを吐いて計算させてしまえばいい(実も蓋)
Windows Vista以降はPowerShellをつかたほうがいいですか?
Windows Vista以降はPowerShellを使ったほうがいいですか?
>>634 やりたいことに応じて、便利だと思ったら使えばいい。
それだけのこと。
>>635 質問の意図を汲み取れよアスペ、お前はもう書き込むな
なにそれ
質問には疑問があっても意図があるとは 産経新聞の記者か?
>>638 質問者が何をしようとしているのかどういうことをやりたいと思っているのかをよく考えてから答えろって言ってんだよ
わかんねえの?頭悪いんじゃねえのお前
>>640 批判されて自分が窮地に立たされるとそうやって相手を貶めて挽回を図ろうとする
お前のようなやつがいると大変なんだよね
死んでくれないかな
いますぐに
>>642 週末限定の小学生乙
あ、「頭の中身が」と言う意味な
>638 名前:デフォルトの名無しさん [sage]: 2013/02/09(土) 15:14:00.97 >質問には疑問があっても意図があるとは >産経新聞の記者か? こうやって揚げ足取って自分が賢いアピールするやつって最低だよな しかも他人が質問してる時にそれをやるんだから どんだけ鬱屈してんだよ
Windows Vista以降はPowerShellを使ったほうがいいと言って欲しいんだろ?
意図を汲み取って答えてやれ Windows Vista以降はPowerShellを使ったほうがいいよって
>>648 Windows Vista以降はPowerShellを使ったほうがいいかどうかということだ
使ったほうがよければ使うし、使わないほうがよければ使わない
>>649 質問に答えて欲しい、ちゃんと理由つけてね
>>650 なんでPowerShellを使ったほうがいいの?説明してくれる?
質問の後出しすんな
Windows Vista以降はPowerShellを使わないほうがいいよ
Windows Vista以降はPowerShellを使わないほうがいいの?説明してくれる?
コマンドプロンプトのスレがこんな風に荒れるなんて珍しいなw
>>659 週末だからガキが沸いてくるのは仕方ないな
まともな質問者なら、 ・そもそも、やりたい処理は何なのか ・なぜ「Windows Vista以降」に限ってそう思うのか 等々、詳しい事情を呈示した上で相談してくるのが当然。 それをせず、真面目に相手してくれた人を揚げ足取りでもやって からかおうという意図が見え見えだから、誰もまともに相手しない。 それだけのこった。
>>661 最初に揚げ足とるくだらないことやったのは
>>638 からかわれるのが怖いから答えることができないっていう臆病者なら質問に口を挟まないでほしい
どうせ答えることできないんなら黙ってて欲しい
自分の考えをもってるちゃんとした人なら自信を持って答えることできるよね
そういう人に答えて欲しい
>>661 は言い訳をぐだぐだ書いてるだけの無能
そういうひとはあほに答えないよ
>>663 あほじゃないから答えてくれるってことだね
だれがあほじゃないって?
>>660 暴れているのは皆いい年したおっちゃんです…
鬼は外
ちょっと煽られた程度で大噴火ってなにこれ。 最近沸点低すぎる奴多いな。
670 :
デフォルトの名無しさん :2013/02/09(土) 20:12:46.35
>>669 なんで煽るわけ?煽って怒られたら相手のせいにするの?人として間違ってると思わない?
人として間違ってる、だって
そういうことを言うのは人として間違ってるな
非常識なガキを弄るのは面白い
674 :
デフォルトの名無しさん :2013/02/09(土) 20:30:52.71
>>673 それってあと釣り宣言ていうんだよ
まじめに言い負かされて自分は弄る立場だったってあとになって言い訳してるだけなんだよ
ださw
小人閑居して不善をなす
676 :
デフォルトの名無しさん :2013/02/09(土) 20:40:49.79
>>675 閑居してるけど不善をなしてないから大人
677 :
デフォルトの名無しさん :2013/02/09(土) 20:43:08.91
結局誰も質問に答えられないんだね もういいよ こんなところで聞いた俺の質問に答えられなかったお前らが馬鹿だったよ
最近2ch知ったばかりのお子様がヒステリーを起こしているようだな。 2chがどんな酷い所かなんて無知なガキ以外誰でも知ってる話。 煽り煽られ無視上等だろうが… 何で煽るのとか今さら過ぎて(゚Д゚)ポカーンとなるだけだわ。
おまえ賢いなあ あたま最高にいいなぁ じゃーねぇ
ほらみんなもっと褒めてやれよ それが一番よ
…と言いつつ泣きながら必死でリロードし続ける
>>679 であった
そういうのはおまえだけだと思うよ 誰も屁にも思ってないよ
↑最後っ屁
684 :
634 :2013/02/10(日) 10:08:20.83
解答ついてるかなと覗きにきたら荒れててワロス
その前にまず日本語の勉強だな
それじゃ新しい言語powershellもむりぽ
>>677 質問として最低限の情報がないんだから答えられたらエスパーだよ…
そういう問題じゃないだろ
あした以降コートを着て行ったほうがよいでしょうか? みたいな質問なんだよ
正しい答えは、勝手にしろ、だよ
691 :
デフォルトの名無しさん :2013/02/10(日) 18:57:40.14
逆切れかお前ら 質問に答えられないからって逆切れか
その態度は人として間違ってると思わない?
なに切れてんの 見苦し
頭の出来の差は歴然としてるな
>>693 =691
今まで誰からも躾けられなかったんだろうな
猿にも劣るゴミ屑だ
責任転嫁するな
人は躾けられてなるもんじゃない
自分でなるんだ
>>634 は自分で出来の悪い人間になっただけ
他人のせいじゃない
違うな そんなのは幻想に過ぎない 躾けられずに育てば、人間もただの畜生
それこそ幻想だろ
キチガイ質問者がひとり来ただけでこの有様
700 :
デフォルトの名無しさん :2013/02/18(月) 01:03:44.40
ここのやつはアスペって感じはしないね ただのさみしがりやのこんちくしょうだろ アスペはこんなやり取りを楽しむ暇があったらガリガリプログラム書いてるからね むしろアスペ見習えや
サンドバッグに浮かんで消える憎いあんちくしょうの顔めがけ叩け 叩け 叩け!
> @perl -e "if ($ENV{PATH} !~ /MinGW/) {system qq(echo > tmplock)}" > @if exist tmplock (@del tmplock & call setmingwpath.bat) 要するに%PATH%に文字列があるかないかを調べたいんだけど perlでやってるところをバッチファイルだけでやる方法ある? findstrは、マッチしない時にif "%%str"==""で空文字に反応してくれずうまくいかなかったのよ
IF "%PATH:MinGW=%"=="%PATH%" (echo ない) else echo ある
errorlevelでも取れるんじゃないの。
はあ?
path | findstr "MinGW" echo %errorlevel%
path | find "MinGW" echo %errorlevel%
「1000%Sparking!.mp3」のように、ファイル名に半角の% と ! の両方が入っている時、それぞれの記号を全角の !と%にリネームしたいと思って四苦八苦してるんですが何か良い方法はないですか? ファイル名から%と!の両方を除去する方向でも構わないんですが。 以下のバッチで! & %のいずれかが入ってる場合は変換出来るものの、% と !が組み合わさってると遅延環境 変数の関係であっちを立てればこっちが立たずになっちゃってもうどうすりゃいいのか… SetLocal DisableDelayedExpansion For /F "Tokens=*" %%j In ('Dir /B *.mp3^|Findstr "& !"') Do Call :_Rename "%%j" ENDLOCAL :_Rename Set _Temp="%~1" Set _Temp=%_Temp:&=&% Set _Temp=%_Temp:!=!% Set _Temp=%_Temp:~1,-1% Ren "%~1" "%_Temp%" SetLocal EnableDelayedExpansion For /F "Tokens=*" %%k In ('Dir /B *.mp3^|Findstr "%%"') Do ( Set _Temp="%%k" Set _Temp=!_Temp:%%=%! Ren "%%k" "!_Temp!" ) ENDLOCAL pause goto :EOF
>>708 for /f "delims=" %%a in ('dir /a-d /b "*.mp3"') do (
set "FN=%%a"
call :rep_exc_amp
call :rep_per_and_ren
set t1= & set t2= & set t3=
set FN=
)
goto :eof
:rep_exc_amp
call set "t1=%%FN:!=!%%"
call set "t2=%%t1:&=&%%"
goto :eof
:rep_per_and_ren
setlocal enabledelayedexpansion
set "t3=!t2:%%=%!"
echo ren "!FN!" "!t3!"
endlocal
goto :eof
001.jpg 002.jpg 003.jpg ... と連番でファイルが有るとして、それを1つずつ数値を増やして 002.jpg 003.jpg 004.jpg ... とするにはどうすれば良いでしょうか、教えてください。
数値に10000とか元の桁数を十分上回る大きな数を加えてからdirを降順にして、 順次、1足した後に下三桁取り出してリネーム、とか。 俺ならバッチ使わず Flexible Renamer を使う。 数値の加算も桁合わせも楽だし。
あるフォルダが別プロセスで使われているか調べる方法を教えてください
ren move rd してみればエラーになる
for /f %i in ('dir /o-n /b') do ( set x=1%~ni set /a x+=1 call ren %i %%x:~1%%%~xi )
move hoge hoge\.. echo %errorlevel%
Windows7(64)の標準コマンドだけで、テキストファイルを編集したい。(単純な単語の置換) edlinがあれば事足りるけれど、Windows7(64)にはない。 JScript埋め込みで出来そうだけど牛刀をもって鶏を割くという感じ、 もっとかっちょいい方法なないでしょうか?
ワードパッドとか
メモ帳でダメな理由は?
notepadってコマンドを使うといいよ!
for /f "delims=" %i in (a.txt) do ( set x=%i call >>b.txt echo;%%x:旧文字列=新文字列%% )
それ空白行(^$)飛ばされんじゃ?
できるけどきにすんな
\set call/
がんばって関数化を進めたらすげぇ重くなった
以下のような動作をするバッチを作りたいのですが Aドライブに111というフォルダがあって、その中にa,b,c,〜というフォルダがあり それをBドライブのa,b,cdフォルダを作ってそれぞれに111というフォルダを作って Aドライブに入っていたa,b,c,〜の中身をコピーしたいのですが Aドライブ 111-a-○file -b-●file -c-◎file Bドライブ a-111-○file b-111-●file c-111-◎file というような感じです。 よろしくお願いします
文字列を置換するバッチの最後の処理で例えば echo %tmp%>>%text% という風にechoで表示した文字列を別ファイルの末尾にリダイレクトして追加いくという方法があったんですが、 この%tmp%に入る変数に「%」が混ざってると問題が発生するのを回避する方法ありませんか?
どんな問題は発生するんだか それで問題が発生する訳ないが? どんな問題か知らんが遅延展開でも使えばよかろうて
%tmp%の最後が数字だと問題が発生するな
コマンドプロンプトでは直接 set tmp=% とできるが バッチファイルでは set tmp=%% と重ねないと消えるね あと%tmp%の最後が数字だと問題が発生するのはコマンドプロンプトだけ バッチファイルでは展開後に 1>> になるから問題なし
まあ >> "!File!" echo;!Message! の方がいいな。
set echo とかで遅延展開使わなくてもいけるんじゃなかったっけか
ちゃう call echo だ
ディレクトリAに 0001.dat 0002.dat .... 1000.dat という1000個のファイルがあります。 0001.datから0500.dat をディスクXに、0501.datから1000.datをディスクYにコピーする batファイルを作りたいのですが、力量がなくてすみません。
るーぷ set /a count+=1 set filename=0000%count% set filename=%filename:~-4%.dat %count% gtr 500 だったら%filename%をほにゃらら そうじゃなかったらほにゃらら るーぷに戻る
set 0=x set 1=y for %%i in (a\*.dat) do ( set x=1%%~ni set /a x=(x-10001)/500 call copy "%%i" %%x%%: )
ディレクトリA ABC 123.txt ABC 456.txt ABC 789.txt ディレクトリB 1A.txt 2B.txt 3C.txt となっている時に、Bの名前を順番にAの名前と同じにしたいのですが(Bの1A.txtの名前がABC 123.txt) 良い方法はありませんでしょうか
@echo off ren 1A.txt "ABC 123.txt" ren 2B.txt "ABC 456.txt" ren 3C.txt "ABC 789.txt"
>>738 すみません、ファイルの数が多いのでFORか何かで回せないでしょうか…
>>739 ファイルの数がどうとか、数値の桁数がどうのとか、条件が足りなすぎ。
ABC 123.txt と ABC 99.txt どっちを先にしたいとか。
dir /b で出したリストを矩形切り貼り出来るエディタで
>>738 をするのが
結局一番手っ取り早いんじゃないの?
perlのようなものでやったほうがラクじゃないのかな
バールのようなもの?
>>740 たしかにそうですね。
エディタ使ってやってみます。ありがとうございました!
ファイルの数とABC順の並びが両フォルダで必ず同じなら二つのforでA・Bフォルダの各ファイル名取得してから サブルーチンに送って順にrenしていくとかじゃいかんのか
2つ以上のリストを同時に扱うってのは結構問題だが
え、そうなのか。結構安易にやっちゃってたわ… どの辺に問題出るんだろ
>>746 バッチじゃ2ファイルを同時に開くって出来ないでしょ。
え?
paste.cmdを見ればいいよ
いやdirで2つのフォルダの「ファイル名」のリストを取得するって話じゃないの? それでリネームするのは片方だけだし
もう済んじゃったかもしれないけど参考まで @echo off setlocal pushd z:\ディレクトリA set m=0 for /f %%i in ('dir /b/on *.*') do call :sub dir-A m %%i popd pushd z:\ディレクトリB set n=0 for /f %%i in ('dir /b/on *.*') do call :sub dir-B n %%~fi popd if %m% leq %n% (set max=%m%) else (set max=%n%) for /l %%i in (1,1,%max%) do call ren %%dir-B%%i%% %%dir-A%%i%% endlocal goto :eof :sub set var=%2 set /a %var%+=1 call set %1%%%2%%=%3 goto :eof
↑ ファイル名の受け渡しに問題があった 以下のように環境変数を経由するように修正して do set fname=%%~i&call :sub dir-A m do set fname=%%~fi&call :sub dir-B n call set %1%%%2%%="%fname%"
さらにdelims指定も忘れてた for /f "delims=" %%i in ('dir /b/on *.*') do set fname=%%~i&call :sub dir-A m for /f "delims=" %%i in ('dir /b/on *.*') do set fname=%%~fi&call :sub dir-B n
ありがとうございます。エクセルでやりました
おいwwwwwww
echo list volume | diskpart | find "NTFS" というコマンドを実行したとき、ボリュームラベルが未設定だと空欄のままとなりますが、 この空欄の部分もバッチで判定させるにはどうしたらいいですか? 下記のバッチでelse以降を以下のようにしてみましたが、エコーが返りません。 お分かりの方よろしくお願いいたします。 for /F "usebackq tokens=1-10" %%A in (`echo list volume ^| diskpart ^| findstr /I /C:"NTFS"`) do ( if /I "%%D" == "system" ( echo ドライブの情報 %%C: [%%D] %%G%%H ) else ( if /I "%%D" == "" ( echo ボリュームラベルは空です )))
>>756 区切り文字をスペースにしたら空欄も吸収されてしまうんで
区切り文字を使わず1,2行目の項目表示を解析して
何文字目から何文字がボリュームラベルかってのを取得するしかない。
758 :
756 :2013/03/12(火) 17:20:25.24
>>757 さん、レスありがとうございます。
システムのボリュームラベルが仮に、[Windows]だとすると、
Volume 1 C Windows NTFS
のようになりますが、Windowsの W は9文字目になるので、
この9文字目を解析するという手順ですよね?
具体的な方法がちょっと思いつかないです、すみません。
解析のため、他のコマンドも使う必要がありますか?
あればそうしたコマンド名も併せてご教示願えればありがたいです。
%TEST: = "" % こうやったらダメ?
あれ、化けた %TEST: = "" %
もういいや...
diskpartの出力の上2行ってこうなってるだろ Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ---- ---------- ------- --------- -------- 「Label」の位置Aと「Fs」の位置Bを取得して 各行のA〜Bまでをボリュームラベルと規定 A〜Bが空白なら云々とやる
ドライブレター振ってないときとかは抜きにして、こんな具合の決め打ちはダメ? for /F "usebackq delims=" %%A in (`echo list volume ^| diskpart ^| findstr /I /C:"NTFS"`) do ( echo %%A | findstr /I /C:"半角スペース16個NTFS" 1>nul if errorlevel 1 ( for /f "usebackq tokens=1-10" %%i in (`echo %%A`) do ( echo ドライブの情報 %%k: [%%l] %%o%%p ) ) else ( for /f "usebackq tokens=1-10" %%i in (`echo %%A`) do ( echo ドライブの情報 %%k: %%n%%o ボリュームラベルは空です ) ) ) 半角スペースの表示方法が分かんないので「半角スペース16個NTFS」はそんな感じで置き換えて。
>>759-763 みなさんレスありがとうございます。
>>762 さん
なるほどそういうことでしたか、完全に読み違い&勘違いしてました。失礼しました。
>>763 さんできました、ありがとうございます。
ラベルが空の時エコー返ってきました!
なるほどなるほど、こういう感じに入れ子にして処理するんですね、大変勉強になります。
みなさんお忙しい中対応していただきありがとうございました。多謝。
>>763 ボリュームラベルの欄の長さって固定なん?
事故レス diskpartのlist volumeってボリュームラベルの先頭11文字しか表示しない仕様だった。 長いボリュームラベルだと全部表示されないじゃん… 今初めて知ったぜorz
8.3形式の時代を生きた人間ならまず疑う
8.3なら12文字じゃん…
>>765 ,766
そこは気になったんで「12345678901234567890」と「半角スペース10個123456」って
ボリュームラベルで試して「半角スペース16個NTFS」にしといた。
ドライブレター + スペース3 + ラベル分のスペース11 + スペース2 + ファイルシステム
の並びなんで 16文字分 スペースがあれば判定も多少は安全かと。
「半角スペース11個+(何か文字列)」や「半角スペース7個NTFS」とかの変態なラベルは付けないと信じて。
8+1(.)+3 = 12
FATの仕様の話じゃなくてdiskpartの表示部のはなしだろ
batファイルを起動した時にコマンドプロンプトが立ち上がりますが、このコマンドプロンプトのウィンドウのサイズを指定する方法はありませんか?
>>774 mode con cols=xx lines=xx
おおありがとうございます
batからプログラムを実行するときにプロンプトを表示させない方法ってありますか? VBSからbatファイルを呼び出す方法しかないでしょうか?
batを呼び出すEXEを作ればいいよ
prompt $s
ショートカット
コマンドプロンプトからat 16:40 /interactive nodepad ってやってもメモ帳が起動しません 間違ってるところをご指摘お願いします
ミス nodepadじゃなくてnotepadです
試しにフルパスで書いてみるとどうだい at 16:40 /interactive C:\Windows\notepad.exe とか。(System32の下かも知れんが、いずれにしろ実際にある場所を書く)
リンク先に、/interactiveを付けても2000Pro/XP以外ではダメだったと書かれてるな
知らんかったこれ
バッチファイルからユーザーのexeを呼び出すような場合、 手軽にひとまとめのファイルにする方法はあるでしょうか? 詳しくない人に手渡すとき、ばらばらになると面倒なので。
Windows RTのコマンドプロンプトの互換性ってどんな感じなんだろ? robocopyとかifとかforとかってWindows 8と同じくらいの機能あるのかな? Surface RTの日本語版が出たから気になってるんだけど。
イーモバイルを使ってまして あらかじめ登録したダイアルアップ設定をショートカットでデスクトップに置いてマウスで接続しているんですが これをbatファイルのクリックで「もし接続されていなければ接続、接続されていれば切断」っというのは出来ますか?
ipconfigで確認とか
c:??aaa??bbb??ccc??ddd.cmd というバッチファイルでcccというフォルダ名を取得したいのですが どのようにしたらよいでしょうか?
意味不明
for %%a in (.) do echo %%~nxa
for %%a in (%~p0) do echo %%~nxa
forかsetのhelpにディレクトリを取得する方法が書いてなかったっけ
pushd %~p0 %cd:\=&set dir=% echo %dir%
劣った案を後から出すのって何?
自己顕示欲
>>796 はXPではダメ
何故なら、%~p0は、c:\aaa\bbb\ccc\
となり、その結果、
ECHO は <ON> です。
と表示されるから
for %%a in (%~p0..) do echo %%~nxa
ピリオドが一個多い
「\ccc\ddd.cmdでcccのフォルダ名を取得したい」ってのは、単にバッチ自身のあるカレントディレクトリ の引数を知りたいだけなんじゃないのか…? %~p0 だけで答えは済んでるのかも
俺には c:\aaa\bbb\ccc\ddd.cmdでcccを取得したい としか読めないが?
行間読めよ
c\aaa\bbb\をわざわざ削除したところに意味があってだな
スレの趣旨から外れてるかもですが、お尋ねします。 コマンドプロンプトの履歴(F7キー)の中身をテキストに書き出す方法ってありますか? ネットや書籍で情報収集 ↓ コマンドプロンプト上で実行 ↓ このコマンドいいな。バッチファイルにして使おう。 ↓ 特に長いコマンドだと手打ちでテキストに書き出すのが大変! という状況が改善可能であればな、と考えています。 ご存知の方居りましたらよろしくお願いいたします。
別の方法だと、マウスで範囲選択後、コマンドプロンプトのタイトルバー右クリック、編集、コピー テキストエディタで貼り付ける
812 :
809 :2013/03/26(火) 19:36:48.05
>>810-811 さん、レスありがとうございます。
できました!
doskeyコマンドは初めて知りました。
色々オプションもあるんですね、こちらも勉強しなくては。
実は、これまで画面見ながら手打ちしていたので(恥)、これでいろいろ捗ります。
迅速な対応ありがとうございました!
やめとけ 履歴はいいが、その用途はバッチファイルだろ
@echo off taskkill /f /IM notepad.exe echo offにしてるのに失敗しても成功しても以下のいずれかの文章がでます ・エラー: プロセス "notepad.exe" が見つかりませんでした。 ・成功: プロセス "notepad.exe" (PID 2892) は強制終了されました。 非表示にする方法教えてください
>>814 「コマンドプロンプト 標準出力 標準エラー出力 リダイレクト」などで検索。
コマンドプロンプトを2つ立ち上げて、それぞれのウィンドウをAとBとします AからBに文字を送信する方法ないですか?
そんな事をしない設計にするのが先だ
Aでテキスト書き込み Bでテキスト読み込み
>>816 少なくともバッチファイルの範疇ではないなあ
代替の方法が多分あると思うぞ、そもそも何故そうしたいんだ?
あるプログラムをAから起動して Bでそのプログラムをリロードしたいんですよ
そんな事をしない設計にするのが先だ
外部からどうこうするってのは無理だがAとBで定期的にファイルを 読みに行ってその内容によって自分自身であれこれするってのは出来るけど。
>>820 そのBは常時動いてるバッチファイルスクリプトってこと?
…何かバッチの用途を大幅に間違えてる気が
バッチAがファイルCに書いて、 バッチBがファイルCを読む。 んだけ。
set a1=test set b=1 ってやって echo | echo %a%b%% だったか echo | echo !a%b%! みたいなことすると時々 「プロセスが、存在しないパイプに書き込もうとしました」 ってのが返ってくるんだけどこれってどういう現象なの? 一応それが出るときもechoの出力は普通にされてるみたいで 条件も別に特定の値って訳でもなさそうでよくわからないんだけど
相手が閉じたパイプに書き込んでるのよ
閉じたパイプってのもよくわからないんだけど 毎度発生するわけじゃないってのがなのかどういうこと 実害無いなら 2> nul で消せないのかと思ったけど書き方わかんなひ
前のechoが出力するときに、後ろのechoが終了している つーか、echoにパイプする低脳はめったにいない
できるかどうかやってみただけなんだけどね 何で毎回同じ動作にならないのかが気になる
多重処理だからだろ win16なら同じ動作だよ
なるほど 実害は無いよねこれ
低脳は実害あるわw
@if(0)==(0) ECHO OFF
CScript.exe //NoLogo //E:JScript "%~f0" %*
GOTO :EOF
@end
で書き始めるの超便利なんだけど、スレチかな?
>>827 パイプってのはコマンドラインで「|」使うことのパイプじゃなくて、ソケットのようなプロセス間通信機構としてのパイプを意味してるんだよ。
コマンドラインでパイプするとこのパイプが作られて入力側と出力側プログラムにパイプハンドルが渡されるし、ファイルをリダイレクトするとファイルハンドルが渡される。
これらのファイル・パイプ・コンソールハンドルはWindowsではファイルハンドルと比較的挙動が似ているしハンドルなのでCloseHandleとかがフツーに作用するんだけど、
パイプの場合片方が閉じられるともう片方が読み書き(読みの場合はパイプ内のバッファ読みきってから)の時にEOFっぽいエラーが出てくる。
cmd.exeの内部コマンドは色々怪しい挙動する部分があるから同じかは知らんけど(内部コマンドはプロセス増えない=パイプの渡し方がそもそも違う)、右のechoが(入力は使わないとかで)入力を閉じたり終了した後に左のechoが改行文字をパイプに投げるとこのエラーになるはず。
あと、パイプやリダイレクト使うとそれを受け取った側でハンドルの種別を判別して挙動が変わったりするから、そのへんもめんどい。
ハンドルがコンソールだとWriteConsoleWでUnicode出力するけど、パイプやファイル相手だとWriteConsoleW使えないからマルチバイト文字列に変換して(!)WriteFileするプログラムとか・・・正直どうしようもない。
>>833 バッチでやる範疇じゃないなって時にはそれやるけど
それってもうバッチじゃないよねって感じがするね
エディタのシンタックス判別や補完に影響出るからやらない。
>>834 テンプレの
>質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。
に含まれてると理解してたけど違うの?
このJScript(WSH),Perl埋め込みのおまじない、>2 あたりに書いてあっても良い気がする。
さっきググってRuby埋め込みもあるのを今知った。
”等の埋め込み”の”等”って他に何があるんだろ?
>>833 こういうのやるなら最初からWSHでやれよって思う。
個人には意見差があります
>>838 バッチ書いてて途中でバッチではやりたくない文字列処理が出てきた時にコレを埋めてWSH(JScript)に投げるとかいう場合もある
最初からWSHで書いたほうがCScript起動のオーバヘッドもないんだけど、FORの使い勝手の良さから無計画にバッチで書き始めちゃったりとかね
そうなってるだろ?
そんなことも分からずに使ってるのか?
>>841 書いてる途中にコレを分割してバッチの頭と尻と腹に埋めて使う
途中でWSH混成にする辺りから判るように計画性なんて欠片もないので、書いてる途中でスクリプトの頭に別のもの埋める位は日常だ
ある実行可能ファイル(バッチファイルなど)をプロセスIDを指定して実行させることはできないのでしょうか? Linuxでは出来たのですがWindowsでのやり方がわかりません…
変態ソフトやね
>>845 起動中のプロセスからウィンドウタイトルや実行ファイル名が条件に合うプロセスのIDを列挙…とかなら出来たような
(バッチで…というのはどうだったか解らんが技術的には可能なので)
でもそうじゃなくてプロセスIDを固定したいってこと?何故そうしたいのか気になるところだけど、ちと変態挙動だねえ…出来るのかな
/proc/id/cmdlineを実行って事?
>>845 linuxでどうやるのか教えて
なんか気になる
プロセスIDとユーザIDを混同してるんじゃね? プロセスIDを指定とか、その発想がまず訳分からん
linuxはそういうもん
本人じゃないけど、sleepを長めに立ち上げて別の処理が終わり次第sleepを殺す なんて事をやってる俺はPIDがわかると楽になるな
PIDがわかるとPID指定はちがうだろ?それもわからんの?
同種のバッチ複数からsleepを立ち上げたら「俺のスキルじゃ」対象のsleepのPIDがわからないんだ、ごめんね
start /w "uniq title 1" sleep 10
どっちも無視してくださいな
あれだ EXE実行するごとにプロセスリスト見て求めてるIDじゃなかったら殺せばいいやね
859 :
デフォルトの名無しさん :2013/04/04(木) 03:10:12.86
for %%i in (%*) do (echo "%%~fi">>"C:\ドラッグアンドドロップされたものリスト.txt") これに1000個位D&Dすると「ファイル名または拡張子が長すぎます。」って怒られるんだけど回避法ないかな
やりかた帰るんだな
excelファイルを開くのに start hogehoge.xls を用いているのですが既に(ネットワーク上の誰かによって)開かれている場合アクセスできないといわれ開けません このとき、直接開いた時と同じ動作(hogehoge.xlsは編集中のためロック云々、読み取り専用にしますか?y/nみたいの) にしたいのですがどのように記述すればよいでしょうか? ちなみにexcelファイルはファイル名に今日の日付がついているのでショートカットをクッションにして開くようなことはできないと仮定します
EXCELの実行ファイルに開きたいファイルを引数で与えて起動したらダメだっけか? ファイル名のみの引数でダメだとしても、なんかMS Officeには/eとか/ddeとかその手のオプションが色々あるようだしその辺に希望の動作は有るんじゃないかとは思うけど
start excel /r hogehoge.xls
バッチを勉強中なんだけど・・・ 下記のように「Busyo.txt」、「Sei.txt」、「Mei.txt」の3つのテキストがあります Busyo.txt Sei.txt Mei.txt ┌───┐ ┌──┐ ┌──┐ │総務部│ │安藤│ │明子│ └───┘ │井上│ │一郎│ │上田│ │運子│ │遠藤│ │英治│ │小川│ │音子│ └──┘ └──┘ これを、それぞれバッチで結合したいと思っています
まず「Busyo.txt」+「Sei.txt」のように<1対多>のパターン そして「Sei.txt」+「Mei.txt」のような<多対多>のパターンです Busyo.txt + Sei.txt Sei.txt + Mei.txt ┌──────┐ ┌─────┐ │総務部 安藤│ │安藤 明子│ │総務部 井上│ │井上 一郎│ │総務部 上田│ │上田 運子│ │総務部 遠藤│ │遠藤 英治│ │総務部 小川│ │小川 音子│ └──────┘ └─────┘
それからそれから?
どうすれば良いのかなという問いです ・「Busyo.txt」+「Sei.txt」のように<1対多>のパターン こちらはset /p hogehoge=<Busyo.txt でなんとかそれっっぽいのはできたけど 「Sei.txt」+「Mei.txt」のような<多対多>のパターンで苦しんでいます
call > out.txt echo.> Mei_ type Mei.txt>> Mei_ set /a cnt = 0 for /f "delims=" %%a in (Sei.txt) do ( set "SEI=%%a" call :s set SEI= ) del Mei_ set cnt= goto :eof :s set /a cnt += 1 for /f "skip=%cnt% delims=" %%a in (Mei_) do ( echo %SEI% %%a>> out.txt goto :eof ) こんなんでどう
setlocal enableextensions enabledelayedexpansion type nul>out.txt set i1=Sei.txt set i2=Mei.txt (for /F "delims=" %%i in ('find /C /V ""') do set /a a1=%%i) <%i1% (for /F "delims=" %%i in ('find /C /V ""') do set /a a2=%%i) <%i2% if %a1% lss %a2% set /a a1=a2 (for /L %%i in (1,1,%a1%) do ( set /p s1=<&4 >nul set /p s2=<&5 >nul echo;!s1! !s2!>>out.txt )) 4<%i1% 5<%i2%
エクセルでも使った方がずっと楽だがな
全自動バッチで中間ファイルを複数スレッドで作るとやらざるを得ないから参考になる
for /f %%S in (Sei.txt) do ( set /p M= call echo %%S %%M%%>>out.txt ) < Mei.txt
すまん、空で書いてるもんで (for /f %%S in (Sei.txt) do ( set /p M= call echo %%S %%M%%>>out.txt )) < Mei.txt こうか?
でも、実際にはそれぞれが一致するか分からないよな。 一行でもずれてたら全部ごみだ。 最低でも行数が一致するかどうかは事前にチェックしないといけないと思う。 キーがあるならfindで探してつなげられるとおもうけど。 まあ、それっぽい名前をランダムに作るならありかな。 それでもランダムを計算したほうがいいと思うけど。
見苦しいなw 要するにunixのjoin相当だな
pasteだろw
881 :
デフォルトの名無しさん :2013/04/19(金) 07:55:01.54
>878 >最低でも行数が一致するかどうかは事前にチェックしないといけないと思う。 確かにSei.txtに神田、木梨とか追加して実行したら 神田音子、木梨音子ができちゃうね
あほか
要件にないこと云々
バッチで動く証跡管理モドキのツールを作りたいのです 共有フォルダは全部Dドライブにあるので とりあえず下記みたいにして無限ループにしてみました :start openfiles /query /v /s \\localhosts /FO csv |find "D:\" >>hoge.csv goto start ただこれだと時刻がとれないのです 一行の中にecho %time% で表示される時刻も一緒に出せないでしょうか
実行結果は下記のようになります "localhosts","32","root","Windows","0","Read","D:\\bin\hogehoge.txt" "localhosts","26","2chuser","Windows","0","Read","D:\\総務部\会計課\予算.doc" "localhosts","18","sitaraba","Windows","0","Read","D:\\人事部¥25年度異動.mdb" こいつを下記みたいにしたいのです 01:23:34.56,"localhosts","32","root","Windows","0","Read","D:\\bin\hogehoge.txt" 12:00:12.34"localhosts","26","2chuser","Windows","0","Read","D:\\総務部\会計課\予算.doc" 20:44:08.46"localhosts","18","sitaraba","Windows","0","Read","D:\\人事部¥25年度異動.mdb"
また、そんな百済ないのではなく、もっと良い方法があれば教えてください 一応、イベントログの監査機能のONもやってみたのですが あれだと見にくいし色々なログを拾いすぎてイマイチでした なお本物の証跡管理ソフトは1000万とかいうトンデモナイ見積でした・・・
:start for /f "delims=" %%a in ('openfiles /query /v /s \\localhosts /FO csv ^|find "D:\"') do call echo %%TIME%%,%%a>>hoge.csv goto start
>>884 %time% は午前中にメンドクサイ事になる気がする。
%time: =0% で置換しといた方がいい気がする。
>>887-888 ありがとう、月曜になったら職場の鯖で動かしてみます
ついでにご存知なら教えて欲しいのですが、このopenfilesだと
Read と Warite は拾ってくれるのですがDelete と Create は拾ってくれません
これを拾う方法は何かないでしょうか
wmic
公開したらアンチウィルスに登録されるオチだけどな つか最後のスクショ見たらWin32APIをC#クラスでラップとかはやってるのに、exe名称をsvchostにして偽装で終わりってのはなんか半端だなぁ・・・ dllにして適当なプロセスに読ませりゃいいのに・・・
894 :
デフォルトの名無しさん :2013/04/23(火) 22:34:46.31
>>892 十数年前からフリーで公開されてるのがたくさんあるから。
>>893 dll もぐりこませるのはチートでやったけど、
DLLのバグがプロセスに影響して業務に支障が出る場合がある。
また、プログラムが動作するためのスタックやヒープが少ないとオーバーフローのエラーになる。
しかも
>>892 が使ってるのはC# だけど、これは .net なので、
アプリが .net じゃない場合はライブラリをDLLが自分で全部ロードしないと動かない。
.net な DLLを走らせるには結構な数のライブラリを読み込まないといけないけど
それはDLLをもぐりこませるインジェクタがやらないといけない。
どの道、インジェクタを exe で作る必要があるんだから
ほんとのスパイ目的じゃない奴はある程度明示的に存在したほうがいい。
だから偽装する必要すらないと思うんだけど、偽装するならsvchostだよな。
俺も怪しいと思いながらsvchostは見逃してる。
>>895 DLL一個インジェクションして死ぬようなプロセス(又はdll)はそれはそれで問題が有ると思うが・・・
かといってシステム以外の場所にいるシステムと同じ実行ファイル名とか、パスが見える状況では怪しすぎる。
リソース消費の関係でプロセス分けるにしても、ある種の明示をするにしろ、rundllでdllを読ませたほうが良いと思う。
dllだけだとインジェクタが要るのは.NETに限らずdllの宿命だけど、
こういうケースならADからレジストリ弄ってエクスプローラなりieなりに読み込ませたり、rundllにキックさせるなり出来る。
C#でもstdcallなエクスポートも出来たりしたと思うんで(そういうラッパも有るみたいだし)そのへんは問題無い・・・筈。
個人的な印象では、後ろ暗さ・怪しさ感は、不正パスsvchost>インジェクション>rundllで
一般ユーザからの隠蔽性能は、インジェクション>rundll≧不正パスsvchost、かなぁとか思う。
自分だったら不正パスsvchostとか見つけたらその瞬間にkillしてVirusTotal送りするな。
っていうかスレチだなゴメン
897 :
デフォルトの名無しさん :2013/05/01(水) 12:11:28.51
FAT32なデバイスの空き容量を取得する方法を教えておくれ fsutil volume diskfree やったら「FSUTIL ユーティリティにはローカル NTFS ボリュームが必要です。」と断られてしまった
dirコマンドの何が不満なのかね?
FAT32かどうかも知りたいって事なら、素直にVBScriptと併用するのが無難だと思うが
Win板PowerShellスレに書いたが、反応無さげな気がするのでこちらにも投下 PowerShellが標準で実行できる設定になってないことにハラが立ったので、 PowerShellスクリプトとして実行可能なバッチファイルを作ってみた もし不備や改善できる点があれば指摘して欲しい ファイル末尾に何行か改行を入れないと何故か動かないことがあるので注意 @(":","`""<#") 2>NUL @POWERSHELL -Command - <%0 @EXIT /B %ERRORLEVEL% #>)|%{} Write-Host "Hello world!"
次はこれをJS,VBSでやってみたらどうだろう 以前CUI環境でのみ実行して欲しいスクリプトとかあったんだよな ……などと考えた後、全部WSH側でやった方が早いことに気づいた 出来たとしても、実用的な意味は多分無いな、うん
どうしても1ファイルにしたい場合は別として、 通常はパラメータでExecutionPolicy指定する方が良いと思う >powershell -ExecutionPolicy RemoteSigned .\test.ps1
-ExecutionPolicyオプションで一時的に実行ポリシーを変更できたのか
するとドットソースの読み込みが出来るようになるし、
>>900 で標準入力に
流し込んでいるせいか、変な動作してた部分が改善するかもしれないな
ご指摘感謝です
複数人で共有してるファイルサーバのDドライブ上に新しいファイルやフォルダが作られたり 削除されたらログに吐くようにしたいのです 単純にdirで吐いたやつを比較するだけだと dir /s /b d:\ >hoge1.txt timeout /t 3600 dir /s /b d:\ >hoge2.txt fc hoge1.txt hoge2.txt >hoge3.txt これだと新規ファイルを作るとhoge2.txtの行がズレた文だけ全部が表示されてしまいます またDドライブの中身が数ギガあるので最初の「dir /s /b d:\」の段階で凄く時間がかかる またフォルダを拾ってくれませn 何か良い方法はあるんでしょうか?
>>904 dir /s /b d:\ > h1
timeout /t 3600
dir /s /b d:\ > h2
copy h1 + h2 h3
sort h3 | uniq -i -u > h4
copy h1 + h4 h5
sort h5 | uniq -i -d > h7
copy h2 + h4 h6
sort h6 | uniq -i -d > h8
echo sakujo
type h7
echo tsuika
type h8
uniq はここから
ttp://unxutils.sourceforge.net/ 時間がかかるのは仕方ないと思う
フォルダも含むので問題ない
ファイル システム イベントの監視の概要
907 :
900 :2013/05/09(木) 19:39:59.95
どうにか形になったので最後に報告 @(":`""<#")2>NUL @ECHO OFF SET PS_TMP= SET PS_CMD=%0 FOR /F "delims=" %%a IN ('CMD /C "POWERSHELL -NoLogo -Command -<%0"') DO SET PS_TMP=%%a IF NOT EXIST %PS_TMP% EXIT /B 255 TYPE %0 >>%PS_TMP% POWERSHELL -NoLogo -ExecutionPolicy RemoteSigned -File %PS_TMP% %* SET PS_CMD=%ERRORLEVEL% DEL %PS_TMP% 2>NUL CMD /C "EXIT /B %PS_CMD%" SET PS_TMP= SET PS_CMD= EXIT /B %ERRORLEVEL% #>)>$null #↑bat ↓PS if (&{!$MyInvocation.ScriptName}) { while (1) { try { $o = [System.IO.Path]::GetTempFileName() $n = ($o -replace "[^.]+$", "ps1") ren $o $n -ea Stop echo """$n""" exit } catch { rm $o -ea SilentlyContinue }} }# setup完了 $args |%{ echo "コマンド引数:<$_>" } Read-Host 標準入力おk
サイズぎりぎりのところで何とか書き込めたか もう少し短くまとめられたら良かったんだが、 bat部分がどうにも長くなってしまうわな これで標準入力・コマンド引数・終了コードも 使えるようになったんでとりあえずはここまで
すごい!あほ
すごい!かしこ
912 :
デフォルトの名無しさん :2013/05/11(土) 22:50:55.25
>>907 TYPE %0 >>%PS_TMP% はなんで追記でリダイレクトしてるの?
DEL %PS_TMP% 2>NUL は他プロセスがファイルをロックしていて、
ファイル削除に失敗する可能性を考慮しなくて良いのかしら?
913 :
デフォルトの名無しさん :2013/05/11(土) 22:58:01.99
JAVASCRIPTでは、配列をグローバル変数として使うことはできないのか?
>>904 のをUSNジャーナル使って何とか出来んかと色々やってみてるんだけど
どうも手に余るっぽい。ファイルの削除を追うスマートな方法がわからん。
とりあえず今出来てるぶん。ファイルが多くなるとdir使うよりはずっと速いんだが…
setlocal enableextensions enabledelayedexpansion
set target=D
for /f "tokens=1,2 delims=x" %%i in ('fsutil usn queryjournal %target%:') do if "%%i"=="次の USN : 0" set nextusn=0x%%j
if not exist usn%target%.txt (
echo;%nextusn%>usn%target%.txt
goto :eof
)
set /p lastusn=<usn%target%.txt
set log=%date:/=%_%time::=%
set log=%target%_%log: =0%.txt
if "%nextusn%" neq "%lastusn%" (
for /f "tokens=1,2 delims=x" %%i in ('fsutil usn enumdata 1 %lastusn% 0x7fffffffffff0000 %target%:') do (
if "%%i"=="ファイルの参照番号 : 0" (
for /f "delims=" %%k in ('fsutil file queryfilenamebyid %target%: 0x%%j') do set changedfile=%%k
set changedfile=!changedfile:~23,-3!
echo;!changedfile!>>%log%
)
)
echo;%nextusn%>usn%target%.txt
)
>>912 追記になってるのは引数渡しで試行錯誤してた時の名残だわ
ファイル削除不能の可能性は確かにあるし、スタートアップにでも仕込みを
入れれば対応可能だろうけど、一時フォルダ内に残ったゴミの量をみれば、
MS含め誰も気にしてないのは明らかだよね
>>910 後ればせながらちょっと見てきたが、流石MSの人、良くできてるね
正規表現でスクリプトを分別する方法は考えていたけど、ワンライナーに
収まるよう短く出来る程PSに習熟してないので、その辺は敵わないとしても
bat部分識別用の行頭@@とか、GOTO :EOF なんていう定義済みのラベル
でサクッと戻り値返しつつ終了してるところとか、いやこれはお見事
あれ? EXITで終了しても普通に最後の戻り値取れるね GOTOで終了させるのは何の意図があるんだろうか
>>918 バッチ部分を色々拡張した時に、PSの呼び出しがサブルーチンの中だった場合にも使えるからとか?
スレチ
「,」区切りのファイルの1列目を抽出し、スペースを削除したものを 別ファイルに出力することを考えております。下記のように行いましたが、うまくいかず。。。 助言頂けると助かります。また2連続でスペースがあった場合、次の行を読みに行くようにしたいです。 @echo off setlocal enabledelayedexpansion for /F "tokens=1 delims=," %%a in (test.txt) do ( set TARGET= set FLAG=0 call :main %%a :main set AAA=%1 rem スペースなのか確認。 if not !AAA!_CHK==_CHK ( set TARGET=!TARGET!!AAA! set FLAG=0 shift call :main ) else ( rem スペースだった場合 if !FLAG!==1 ( rem 2連続でスペースだった場合 call :NEXT ) else ( set FLAG=1 shift call :main ) ) :NEXT echo !TARGET!>>kekka.txt )
【test.txt】 AAA AA,BBB CCC CC,DDD E EEEEE,FFF 【kekka.txt(期待値)】 AAAAA CCCCC EEEEEE 書ききれなかったので、2回にわけます。
rem 二重引用符とかが入力されると挙動が怪しくなるけど、ダメ文字回避は苦手なので放置 @echo off setlocal enabledelayedexpansion for /F "tokens=1 delims=," %%a in (test.txt) do call :main "%%a" goto :EOF :main set FLAG=0 set BUF=%~1 set STR= :mainloop if defined BUF ( if "!BUF:~0,1!" == " " ( set /a FLAG+=1 ) else ( set FLAG=0 set STR=!STR!!BUF:~0,1! ) if !FLAG! GEQ 2 set BUF=- ) else ( if defined STR echo !STR!>>kekka.txt goto :EOF ) set BUF=!BUF:~1! goto :mainloop
shift ./?
@echo on
927 :
922 :2013/05/21(火) 08:19:17.74
>>924 早速のご回答ありがとうございます。
想定していた結果が得られました。
またよろしければ1点ご教授頂けますでしょうか。
"!BUF:~0,1!"
これはどのような処理内容となるのでしょうか?
928 :
922 :2013/05/21(火) 08:24:17.33
すみません。もう1点抜けていました。 set BUF=!BUF:~1! こちらも教えて頂けると助かります。
>>928 ENABLEDELAYEDEXPANSION
について調べると良いよ
あ、それとも ~の挙動か あれもset/?辺りに載ってなかったっけ
遅延展開は自分で使ってて知らんてことは無いだろうから後者じゃね?
set /?に載ってるけど "%BUF:~0,1%"はBUFのオフセット0(1文字目)〜1(2文字目)までの文字列を取り出す指定で、BUFの最初の一文字を展開する "%BUF:~1%"はBUFのオフセット1(2文字目)〜最後までの文字列を取り出す指定で、BUFの最初の一文字を除く全てを展開する 文字単位で処理できることは処理できるけど、なんかどうにも野暮ったい %%で出来る展開オプションは!!でも使える(けどifで使う時とかに挙動が違うとか何とか)
ダメ文字の一部(!%^&<>|)回避の参考例 @echo off for /f "delims=," %%i in (test.txt) do set "a=%%i" & call :x goto :eof :x set /a b=0,c=0 :y call set "d=%%a:~%c%,1%%" if not defined d goto z if "%d%"==" " (set /a b+=1) else set b=0 if not %b%==2 (set /a c+=1) & goto y :z call set "a=%%a:~0,%c%%%" set "a=%a: =%" if not defined a goto :eof set "a=%a:^=^^%" set "a=%a:&=^&%" set "a=%a:>=^>%" set "a=%a:<=^<%" set "a=%a:|=^|%" echo %a% >> kekka.txt
当たり前だけど echo > って排他みたいな気の利いた事はしてないんだな 10万行4スレッド分担 HDD上で約1500行 RAMDisk上で約500行 も漏らすのは驚いた
排他はしてるだろwばか その結果漏らすんだろwばか 全体を逐次化したけりゃ、全体を()で括って ( ) > kekka.txt ってやりゃいいんだよwばか
ちょっとWindowsのバッチファイルのことで質問 特定のフォルダにある複数ファイルを別のフォルダに移動させたいんだが、 移動時の日付と時間が付加された形になるようファイル名を自動的にリネームしつつ移動したい (例えばreadme.txt → readme-20130602-153908.txt)みたいな感じ なのでバッチファイル中で for %%A in (%1) do call :filemove %%A exit /b :filemove set filename1=%~n1 set filename2=%~x1 〜(以下日付と時間を取得) MOVE /Y C:\移動元\%filename1%%filename2% D:\移動先\%filename1%-%日付%-%時間%%filename2% みたいに書いたんだが、元のファイル名に特殊文字が入っているとfilename1の内容が特殊文字のところで切られてしまうんで 拡張子より前のファイル名を正確に取得できず、最後のMOVEのところでコピー元のファイルがないと怒られてしまう これをどうにかしてファイル名に特殊文字が入っていてもちゃんと機能するようにしたいんだけどうまいやり方ってないかな? ファイル名に特殊文字を使わせないようにするのは無理なので、特殊文字があっても何とかするというスタンスでいきたんだけど・・・ エロい人いい方法があったら教えてくださいお願いします
set "filename1=%~n1"
バッチファイルでLF改行をCRLF改行に置換したり、 LF改行やCRLF改行を明示的に指定してファイルに書き込んだりすることはできますか? なおLF改行1バイトを埋め込んだファイルを標準入力やパイプ渡しする方法以外でお願いいたします。
>>935 全体を()でって /wait 無しの start 使って完全に別スレッド動作になってるから...
まぁ、組んでる最中のお遊びだから気にしないでくれ
実際のところ、最後sortで〆るから別個のファイルに書き出すだけで済むんだ
横だが、排他がいい加減なら漏れるんじゃなくて、順序が乱れたりデータが壊れるのが普通。 その手の症状が無いなら、排他制御の問題じゃなくてバッファが溢れてると考えられる。 つまりパイプのバッファサイズをどうにかして設定できれば…
排他ってこの場合は書き込みロックだろ。 排他をしてないんじゃなく、衝突時にロック解除を待たずにエラーとして書き込みを諦めるから漏らしてるんだろ。 衝突時に対象が開放されるまで待機するような処理をするプログラムにリダイレクトして代理書き込みしてもらうか、 cmd.exeプロセスごとに別の書き込みファイルに書いて後でマージするか、ってところじゃね。 935のやり方だと、同一のcmd.exeプロセス上の書き込みロックの解除が遅れて単独で自爆する事故は防げるだろうけど、 ロック期間が伸びるから別のcmd.exeプロセス上での書き込みロックと衝突しやすくなるんじゃないかと。
あ、なんかごめん、俺が言葉の使い方というかそもそも排他を勘違いしてたのね 解決法とかはあまりどうでもいいんだけど、一応大まかにこんな感じの処理です ::以下バッチファイルとして使うと バッチファイル名.bat.dat が生成されます if ""=="%~1" (goto main) else (goto sub) :main type nul>"%~0.dat" for /L %%A in (1,1,%NUMBER_OF_PROCESSORS%) do start "" /MIN %~0 %%A pause exit :sub set /a num1=%~100000 set /a num2=100000 / %NUMBER_OF_PROCESSORS% set /a num3=0 set /a num4=0 :loop set /a num4=%num1% + %num3% echo %num4%!>>"%~0.dat" set /a num3=%num3% + 1 if %num2% GTR %num3% goto loop exit
@echo offを入れると「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」が山ほど出るな。 んで、「int main(int c,char **v){FILE *f;if(c==2){while(!(f=fopen(v[1],"a")))Sleep(0); while((c=fgetc(stdin))!=EOF)fputc(c,f);fclose(f);}return 0;}」 なプログラムに書き込みさせれば…と思ったがクソ遅かった上にこれでも0.3%程取りこぼしたorz 後からマージって超優秀
945 :
936 :2013/06/03(月) 10:12:25.40
>>937 遅くなったけどサンクス
大抵の特殊文字は
>>937 でいけそうな感じだったけど、いろいろ試してたら一部ダメな文字があるみたい
試しに
for %%A in (%1) do call :filedisp %%A
exit /b
:filedisp
set "filename=%~n1"
set ext=%~x1%
echo ファイル名 %filename%
echo 拡張子 %ext%
echo ファイル名全部 %filename%%ext%
ってサンプルバッチファイルtest.batを書いて
新しいテキスト(1)#!.txt
新しいテキスト(1)%#.txt
新しいテキスト(1)%# - コピー.txt
のあるフォルダでtestbat *.txtってやると、1つ目はうまくファイル名が表示されるけど2つ目は%が抜け落ちて
3つ目はスペースの手前、#の後までだけで拡張子も取得できない
こういうのもうまく処理できる方法ってないですかね??
:loop cmd /c "echo;hoge>>out.txt" 2>nul if errorlevel 1 goto :loop
>>945 >>933 ダメ文字回避の話題は過去ログでいくつか出てる。
自分は、リネームソフトで一時的に全角にして処理後に戻すとかやってる。
無理矢理バッチでやっても労多くして功少なしなので。
逐次化 バッチ ファイル でぐぐれば山ほど出てくるわ
>>945 for %%A in ("%~1") do set "n=%%~nA" & set "x=%%~xA" & call :f
exit /b
:f
set d=%date%
set t=%time%
if not %d%==%date% goto f
set d=%d:/=%
set d=%d:~0,8%
set t=%t::=%
set t=%t: =0%
set t=%t:~0,6%
move /y "%n%%x%" "移動先\%n%-%d%-%t%%x%"
950 :
936 :2013/06/04(火) 19:09:40.12
>>947 すぐ上に出てたのね・・・気付かなかったスマン
>>949 サンクス
それ参考にしてバッチファイル書き直したら上手く動くようになったみたい
これで面倒な処理を自動化できるんでホント助かった
どうもありがとう
ファイルのタイムスタンプを取得するのに、for で %~ti だと 年/月/日 時:分 まで得られますが 秒 まで取得するにはどのようにすれば良いでしょうか。
>>951 自己レスです。
forfiles コマンド使って実現できました、お騒がせしました。
ふと気になったんだけどみんな、" ) "の位置ってどこで書いてるの? if %hoge% EQU 1 ( echo %hoge% )←この位置? )←それともこの位置?
ごめんスペース消えてた if %hoge% EQU 1 ( echo %hoge% )←この位置? : )←それともこの位置?
if %hoge% EQU 1 (echo %hoge%)←この位置
>>953 >if %hoge% EQU 1 (
> echo %hoge%
>)←この位置?
俺は、こっち。
理由は、if の終わりだから。
>>955 たしかにそのコードだったらそれで良いんだが…
>>956 無茶苦茶だが"("の中に"("が続く様な場合は下みたいになるのか
今まで"("と同じ位置に")"を書いてたわ
ありがとう
:if %hoge% EQU 1 (
: echo %hoge%
: for /f "delims=" %%a IN (c:\hogehoge.txt) DO (
: echo %%a
: )←この位置
:)←この位置
>>954 > : )←それともこの位置?
この書き方の人って、elseは次の行に書いてるの?
>>958 : ) else (
同じ行に書いてた
"("の真下を見れば")"があって自分的には見易かったんだが…
他の人が見難いなら書き方改めるか
>>960 その else ( に対する ")" はどうしてるの?
if ○○○ ( △△△ ) else ( ××× )
if ○○○ ( △△△ ) else ( ××× )
ちたんだelse
アイスですね
>962 これが一般的かと思う
質問させてください。 batでmsgbox "あいうえお"と書かれたabc.vbsを呼び出したいのですが、 batはvbsをスタートさせるだけで、以降の処理は継続して動かしたいのです。 何個か方法を考え、作ってみたのですがどれも理想通りに行かず状態です。 start "abc.vbs" /d "%~dp0" ↑新規cmd.exeが起動するだけでvbsは実行されない start abc.vbs /d "%~dp0" ↑理想通り、vbsは起動すると共に以降のbat処理も動くが、ファイル名に空白があった場合は使えない Cscript "%~dp0abc.vbs" //Nologo ↑vbsは起動するが、msgboxのOKを返してvbsを終了させないとbatの処理は継続されない よろしくお願い致します。
start "" "abc.vbs" /d "%~dp0"
startの""で括られた第一パラメタはウィンドウのタイトルバーに表示するウィンドウタイトルです なので先頭の"abc.vbs"はタイトルメッセージなのだと受け取られます 試しに、そのbatを start "bat実行中" xxx.bat とかで起動してみれば、ウィンドウタイトルの意味も分かると思います ご質問の回等としては、タイトルを正しく指定すればいいだけです start "" "abc.vbs" /d "%~dp0"
972 :
969 :2013/07/04(木) 18:36:07.65
>>970-971 正常に動きました!!
確かに'start "abc.vbs" /d "%~dp0"'を実行すると、
タイトルにabc.vbsとなったcmd.exeが上がりました…
ありがとうございました。
コマンドラインからCPU温度を取得する方法無いですかね。 Win32_TemperatureProbeを使った方法だと自分のPCの温度は取れないようで… そういうCPU温度を手軽に取れるコマンドラインアプリとか誰か知らないですか?
wmic /?
MSAcpi_ThermalZoneTemperature
とれたけど
C:\Users\hoge> wmic /MSAcpi_ThermalZoneTemperature グローバル スイッチが無効です。 動かないです
そこまでアホじゃないが、対応してない環境だったらエラーで落ちる。
wmic /namespace:\\ROOT\wmi path MSAcpi_ThermalZoneTemperature get CurrentTemperature /value
エラー: 説明 = サポートされていません
CurrentTemperature=3272 CurrentTemperature=2732
あ
t
次スレ
まだか
「wmic」これを「ダブルミック」と呼んでるけど皆はど〜よ?
うめ
次スレ
まだか
たててくるお!
だめだったお!
おぺレ〜てィんぐツすてむ のっとふぁうソど ぷりィ〜ずいソさ〜とツすてむでィすく ひっ卜えにィ〜き〜
スレ立て名人はいないのか
九九九
千
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。