【.cmd】 バッチファイルスクリプト %11 【.bat】©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん 転載ダメ©2ch.net
2015/02/25(水) 19:09:59.39ID:5hx8q1nT質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。
※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %10 【.bat】
http://peace.2ch.net/test/read.cgi/tech/1374205515/
それ以前の過去スレ
%9 http://toro.2ch.net/test/read.cgi/tech/1335015478/
%8 http://toro.2ch.net/test/read.cgi/tech/1315844420/
%7 http://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6 http://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5 http://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4 http://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3 http://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2 http://pc12.2ch.net/test/read.cgi/tech/1197881068/
%1 http://pc11.2ch.net/test/read.cgi/tech/1178281991/
0002デフォルトの名無しさん
2015/02/25(水) 19:46:08.29ID:v67AOmy/00031
2015/02/25(水) 20:30:42.86ID:5hx8q1nT("ageteoff"でもOKらしいが)
次回以降のスレ建て時も同じ配慮が必要になると思うので注意しましょう。
詳細は以下の記事を参照
http://info.2ch.net/index.php/%E6%96%B0%E7%94%9FVIPQ2
また、今回は前スレが>>997に達しても次スレの話題を誰も発言しなかったため、もう少しで誘導が間に合わなくなるところでした。
こんな事がないよう、次スレは>>980の人が建てる方向で願います。
(建てる途中で連投規制に巻き込まれて次スレに誘導できなくなる可能性も考慮すべきかも)
更に余談ですが http://www.forest.impress.co.jp/docs/news/20150216_688532.html でも報じられている通り、
来月3日の火曜日から2chブラウザ開発が許諾制となります。
( http://i.imgur.com/2TcDYzo.png は昨日の午前0時現在における2chブラウザのAPI対応状況一覧らしい)
2chブラウザを使っている人は、これに備えてボード一覧取得URLを以下のURLに変更しておくほうがいいかも。
http://kita.jikkyo.org/cbm/cbm.cgi/20.p0.m0.jb.vs.op.sc.nb.bb.29.nv/-all/bbsmenu.html
0004デフォルトの名無しさん
2015/02/26(木) 21:20:03.84ID:rvCGpWQW環境チェック用に
rem cdif.bat
@echo off
if '%1'=='' exit /B 255
pushd D:\temp ← .defファイルを保存する場所
setlocal
set z=%*
set y=%z: =%
set x=%y:/=%
%* > %x%.txt
if not exist %x%.def goto _new
set errorlevel=
diff %x%.def %x%.txt
if %errorlevel% == 0 goto _end
:_new
copy /Y %x%.txt %x%.def >nul
:_end
endlocal
popd
パラメ−タにコマンドを置くと前回実行結果との違いを表示する
例
cdif whoami /all
cdif net start
cdif assoc
0005デフォルトの名無しさん
2015/02/28(土) 13:23:16.31ID:Vf0Nycmv0006デフォルトの名無しさん
2015/02/28(土) 16:21:11.47ID:YYADq1Ex見た目がうざい
転載禁止は嫌儲が運動した結果の出来事
2015年3月3日以後に Spyle 以外の専ブラが使えなくなるのも嫌儲が運動した結果。
嫌儲に手を貸す必要はない。
そもそも転載禁止と表示しても、法的措置どころか苦情すら入れてないのが現実。
何の効力もない。
00076
2015/02/28(土) 16:26:28.85ID:YYADq1Ex0008デフォルトの名無しさん
2015/02/28(土) 16:56:20.46ID:M5P8h0pv存在チェック手を抜くと完走しないどころか、場合によっては泣き見るよ
pushd D:\temp || mkdir D:\temp && pushd D:\temp
WHERE app1.exe
if not %ERRORLEVEL%==0 goto :eof
などね。まあWHEREがないOSには向かないけど
あるいはこんなのか for %%I in (app1.exe app2.exe) do if /I "%%~$PATH:I"=="" goto :eof
0009デフォルトの名無しさん
2015/02/28(土) 17:01:28.28ID:M5P8h0pvpushd D:\temp || mkdir D:\temp && pushd D:\temp
0010デフォルトの名無しさん
2015/02/28(土) 17:13:03.89ID:/zEhZlSp2chではしたらばやまったりと違い、普通に&って書けばいいよ
if not exist app1.exe goto :eof
00119
2015/02/28(土) 17:35:28.42ID:M5P8h0pv教えてくれてありがとう、確かに化けないね
書き込む環境によるのかな?Vimエディタのchaliceプラグインから書いた
次からは気をつけるよ
>>4
もうひとつ訂正。app1.exeはdiff.exeに読み替えてほしい
win8, 8.1は知らないけど7proには無かったので
0012デフォルトの名無しさん
2015/03/01(日) 01:13:03.66ID:3pqosVHZありがとうございます。
windows標準に diff.exe が無いのをうっかりしていました。
入手するか、似た機能のスリーソフトが必要でした。
diff.exe はgnu フリーソフトです。
0013デフォルトの名無しさん
2015/03/01(日) 09:21:11.77ID:lUru30LD0014デフォルトの名無しさん
2015/03/01(日) 10:40:56.37ID:auZLsY4i0015デフォルトの名無しさん
2015/03/01(日) 18:14:23.46ID:iMUnkbvv表示とエラーレベル確認だけならFCコマンドがあるよ
0016デフォルトの名無しさん
2015/03/02(月) 17:20:43.72ID:uyLNdg9p中学出たらまた来いやド素人
0017デフォルトの名無しさん
2015/03/07(土) 12:52:17.55ID:z12PK9QI「shutdown -m」って一度に複数のPCを選択することは出来るのでしょうか。
shutdown -m \\○○ \\△△ ってするのですか?
分かるかたはお願いします。
0018デフォルトの名無しさん
2015/03/07(土) 14:47:08.28ID:CawHWVdd\\○○
\\△△
) do (
shutdown -m %%a
)
0019デフォルトの名無しさん
2015/03/14(土) 01:24:35.99ID:3WQ81uozecho 0 g%%%%h 1 i%%%j 2 l%%m 3
echo 0 n%%%%p 1 q%%%r 2 s%%t 3 u%v 4
とすると
0 g%%h 1 i%m 3
0 n%%p 1 q%v 4
と表示されます、なぜでしょうか?
0020デフォルトの名無しさん
2015/03/14(土) 02:15:45.11ID:nzf6iyBd%j 2 l% →環境変数と見なされて消えてる?
%m→m
多分こんな感じ
0021デフォルトの名無しさん
2015/03/14(土) 02:28:40.98ID:3WQ81uozありがとうございます。
パズルのつもりで考え、同じ結論になりました。
echo 0 n%%%%p 1 q%%%r 2 s%%t 3 u%v 4
の場合
%r 2 s% が消え、%t 3 u% が消えるようです。
0022デフォルトの名無しさん
2015/03/16(月) 10:51:59.75ID:n6rD9DBvEXIT
0023デフォルトの名無しさん
2015/03/21(土) 11:58:32.58ID:2zhIHOyAecho off
for %%FILE in (*.jpg) do (
bpgenc.exe %%FILE%~nI.jpg -o %%FILE%~nI.bpg
pause
こんな感じで作ってみたんですが
何分初心者なもんでエラーで動きませんでした
jpgがあるフォルダでbatを実行すると
そこのフォルダに同じ名前のbpgが出来るように出来ませんか?
0024デフォルトの名無しさん
2015/03/21(土) 12:29:07.78ID:JFP+1Mfcforの%変数は、一般の環境変数とは別物で%a〜%z,%A〜%Zの52個しか使えない
書くなら、以下のようになるけどbpgencの仕様を知らないので動作するかどうかは不明
(カレントにbpgencや*.jpgがあるとして)
for %%I in (*.jpg) do (
bpgenc.exe %%I -o %%~nI.bgp
)
0025デフォルトの名無しさん
2015/03/21(土) 12:34:03.49ID:JFP+1Mfc間違い訂正と一応ファイル名の半角空白対策で""で括った方がいいね
for %%I in (*.jpg) do (
bpgenc.exe "%%I" -o "%%~nI.bpg"
)
0026デフォルトの名無しさん
2015/03/21(土) 13:43:28.87ID:2zhIHOyA0027デフォルトの名無しさん
2015/03/22(日) 20:30:08.30ID:MzKPDq1O"C:\Windows"と書くか"C:\Windows\"のように最後に\を付けるのはどっちが正しいんでしょうか?
全てのファイルを指定したい時も*.*と書くのか*だけでもいいんでしょうか?
0028デフォルトの名無しさん
2015/03/22(日) 22:15:52.50ID:MRoLQSW+ディレクトリパスと認識させるなら後者
どちらか正しいかは関係ない(個人の手法により変わる)
0029デフォルトの名無しさん
2015/03/23(月) 00:27:47.55ID:LkjS11eT下手なことせずMS謹製APIを(正しく)使ってるアプリは大体柔軟に解釈してくれる。
一方で、独自実装かつ手抜きだとそのアプリのルールに従わないと駄目。
0030デフォルトの名無しさん
2015/03/23(月) 03:17:53.73ID:8SvXlaBoDOSだと"*"は"*."の意味で解釈されたような気がするが・・・
よく覚えてないが違ったかな
0031デフォルトの名無しさん
2015/03/23(月) 07:50:10.00ID:Zh4Tlzc4xcopyコマンドは末尾に\を付けると対話モードにならなくて済むから
\を付けるのがベター
0032デフォルトの名無しさん
2015/03/24(火) 21:50:49.26ID:15EAIg4Vオブジェクトとして扱うか 場所として扱うか
0033デフォルトの名無しさん
2015/03/26(木) 11:42:29.93ID:TtvSKEog自力でここまで頑張ってみましたがわかりません
for /f "tokens= delims=""" %%i in (.filelist) do (
if "%%i" EQU "\n" (
(echo %%i\n)>> .filelist.tmp
)
move .filelist.tmp .filelist
0034デフォルトの名無しさん
2015/03/26(木) 14:29:43.73ID:eQva/kB3● 空白が連続して並んでいる場合、空白1個とみなす、また改行だけの行は削除
(ファイル名がどんな場合でも必要ならbatは諦めてWSHでも使ってくれ)
@echo off
type nul>filelist.tmp
for /f "tokens=*" %%i in (filelist) do call :sub %%i
del filelist
move /y filelist.tmp filelist
goto :eof
:sub
if "%1" equ "" goto :eof
echo.%1>>filelist.tmp
shift
goto :sub
● 別の方法:空白1つずつを改行に変換(トリッキーだけど)
@echo off
setlocal EnableDelayedExpansion
set LF=^
type nul>filelist.tmp
for /f "tokens=*" %%i in (filelist) do (
set d0=%%i
call :sub
echo !d1!>>filelist.tmp
)
del filelist
move /y filelist.tmp filelist
goto :eof
:sub
set d1=%d0: =!LF!%
goto :eof
0035デフォルトの名無しさん
2015/03/26(木) 14:57:07.15ID:TtvSKEog中身が
"ho ge" "fuga" "bar"みたいな感じなんで1行だけなのでそれだとダメなんですよね
batは諦めたほうがいいですか?
0036デフォルトの名無しさん
2015/03/26(木) 15:10:34.99ID:TtvSKEogありがとうございました
0037デフォルトの名無しさん
2015/03/29(日) 23:08:04.40ID:brTyAs26数字以外の文字があっていても無視してくれるらしい
例
@echo off
rem 指定ファイル1,2のどちらが新しいか調べる
if '%2'=='' exit /B 200
if not exist %1 exit /B 201
if not exist %2 exit /B 202
setlocal
set x=%~t1 ←年月日 時分を得る
set y=%x: =% ←空白を除く
set f=%y:~2% ←32bit以内の数にする
echo %f% %1 ←確認用
set x=%~t2
set y=%x: =%
set g=%y:~2%
echo %g% %2
if %f% GTR %g% goto g
echo new %2
endlocal
exit /B 255
:g
echo new %1
endlocal
exit /B 0
0038デフォルトの名無しさん
2015/03/30(月) 18:13:52.92ID:7Wq+AZOx方法は人それぞれだけど
set x=%~t1
for %%I in (/ " " ^:) do call set x=%%x:%%~I=%%
set g=%x:~2%
echo %g% %1
0039デフォルトの名無しさん
2015/04/01(水) 01:00:08.58ID:AO10ro0Dそんな方法があるのかと思いましたが
call
in (/ " " ^:)
がよくわかりません
??
0040デフォルトの名無しさん
2015/04/07(火) 18:10:05.82ID:jQXYCPe4上記サイトを参考にバッチファイルを作ったのですが、
%rtmp% --rtmp "rtmpe://fms2.uniqueradio.jp/" --playpath "aandg2" --app "?rtmp://fms-base1.mitene.ad.jp/agqr/" --stop %dur% --live -o %out%
この部分は何を指しているのでしょうか?
コマンドプロンプトでテストをすると
「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています」
との表示が出るのですがどうしたらよいのか解りません
初心者なので噛み砕いて説明していただけるとありがたいです
よろしくお願いします
0041デフォルトの名無しさん
2015/04/07(火) 18:23:55.58ID:tPergwIj0042デフォルトの名無しさん
2015/04/07(火) 21:40:29.78ID:ms0ReaQq0043デフォルトの名無しさん
2015/04/08(水) 21:33:07.81ID:C3eEupG0ありがとうございます
rtmpdumpのヘルプがどこにあるのかすらわからない状況ですが、これから頑張ります
0044デフォルトの名無しさん
2015/04/09(木) 07:03:12.72ID:teaLGODaググったら ttps://rtmpdump.mplayerhq.hu/ でWindows版のzipファイルをダウンロードできたが、
その中に入ってる rtmpdump.1.html を適当な翻訳サイトで和訳するしかなさそうだな
つーか質問する前に、それを一通り読んだ?
日本語の解説サイトも幾つか見つかったから、それも一通り読んでおけば質問の手間が一気に省けたのでは?
あと、同梱の README.txt によると ttp://slproweb.com/products/Win32OpenSSL.html から
Win32 OpenSSL v1.0.2a Light も予め入手〜インストールしておくほうが良さそうだな
こちらは問題のバッチと直接関係なさそうだが…
0045デフォルトの名無しさん
2015/04/09(木) 20:47:41.89ID:ds7brpvM0046デフォルトの名無しさん
2015/04/09(木) 21:48:31.05ID:56Kz/Tqnありがとうございます
rtmpdumpの2.4をダウンロードしたときには入っていなかったようなので確認できていなかったみたいです
ですがやり直してみてうまくいったので無事バッチファイルは作成できました
みなさんありがとうございました
0047デフォルトの名無しさん
2015/04/10(金) 07:48:39.03ID:1r0Sjsp4バッチファイルはそういう用途には使えない(使わない)
0048デフォルトの名無しさん
2015/04/10(金) 08:53:04.22ID:xkkjlCYH絶対値をわざわざ「0からの距離」と書いてる時点で、靴下臭さが漂う釣り
0049デフォルトの名無しさん
2015/04/10(金) 18:17:04.09ID:OSkAW5mv0050デフォルトの名無しさん
2015/04/11(土) 01:45:05.27ID:TrV790b8@echo off
set errorlevel=
arp -a|findstr "物理アドレス" >nul
if %ERRORLEVEL% == 0 goto ok
echo 未接続、
exit /B 255
:ok
echo 接続中
exit /B 0
pingを使うのを使っていたがうまくいかない時があるので、
arpに変更したらうまくいった
0051デフォルトの名無しさん
2015/04/11(土) 06:44:22.81ID:fyKqFsgJ0052デフォルトの名無しさん
2015/04/11(土) 08:01:29.73ID:/PBMBHvW相応しいスレがあって、教えて頂ければそちらに移動します
DOS起動のUSBメモリを作成してブート
目的のexeファイルを実行し終えて再起動した場合に、コマンドでどのようにすればいいのでしょうか?
shutdown -rと打ち込むと「Bad command or filename - "shutdown".」と表示されてしまいます
電源ボタン長押しの強制終了は、HDDのSMART情報に電源断による磁気ヘッド退避回数が1カウントされてしまい
なんか嫌なのです・・・
0053デフォルトの名無しさん
2015/04/11(土) 14:23:00.94ID:5Lnp57nwDOSで電源断するプログラムをUSBにコピーしておきそれを指定するとか?
フリープログラムでそういうのはあったと思うので捜して使えるものを選択する
ちょっと検索してみたらFreeDOSにはfdapmとかがあるようだ
昔のMS-DOSにもver.6の頃にはpoffコマンドがあったような気もするけど
メーカー独自コマンドだったかも
また、SMARTの値は気にすることもないだろ
それこそMS-DOS時代ならスイッチでの電源断しかなかったわけだし
これでHDDがどうにかなってたらそれこそ大問題だった(まあSMARTの仕組み自体無かったけど)
0054デフォルトの名無しさん
2015/04/11(土) 15:00:26.00ID:2fqMRu3mちなみにwin9xの緊急用ディスク(だったっけ?)には入ってた気がする。
0055デフォルトの名無しさん
2015/04/11(土) 16:01:15.67ID:Wkw29TQd0056デフォルトの名無しさん
2015/04/11(土) 16:08:40.34ID:ZafMUMT00057デフォルトの名無しさん
2015/04/13(月) 02:52:48.66ID:d+oF06mHdos窓にはプロセスが使用中とエラーログがながれてますが
実行結果テキストはそのPC内容が空白になります
このプロセスエラーを表示させるにはどうしたら
いいのでしょうか?
0058デフォルトの名無しさん
2015/04/13(月) 06:51:07.81ID:lOTy3Gtt2>stderr
0059デフォルトの名無しさん
2015/04/13(月) 11:41:44.48ID:PhEs3M2yhttps://support.microsoft.com/ja-jp/kb/110930/ja
いろいろあるから調べてね
ちなみにforのinで使う場合はエスケープ記号も忘れずに
0060デフォルトの名無しさん
2015/04/14(火) 10:36:28.94ID:N5fdZKD9forfiles /P C:\Users\Owner\Desktop\test /S /D -1000 /C "cmd /c del /Q C:\Users\Owner\Desktop\test\@file"
というバッチをつくりました。更新日1000日以前のファイルを削除するのですが、
ファイル名が"backup"から始まる物のみ削除したい場合はどのように記述したらよいでしょうか?
0061デフォルトの名無しさん
2015/04/14(火) 12:14:07.00ID:+cu4u0lD"cmd /c echo C:\Users\Owner\Desktop\test\@file|findstr "^backup"&&del /Q C:\Users\Owner\Desktop\test\@file""
0062デフォルトの名無しさん
2015/04/14(火) 13:06:46.44ID:N5fdZKD9早速ありがとうござました。
0063デフォルトの名無しさん
2015/04/14(火) 13:48:29.77ID:ZcIa+N/O0064デフォルトの名無しさん
2015/04/14(火) 23:10:10.99ID:iRGvGEKTif not %ERRORLEVEL%==0
(
A1
)
:A1
call [〜.bat]
if %ERRORLEVEL%==0
(
echo "test"
)
上記の処理で最初にcallするバッチからは返り値(exit /b 0)が返ってくるのですが、
A1のサブルーチンに移行して、再度別のバッチをcallした時の返り値(exit /b 0)が返ってこず、
callしたバッチ内のexit /b 0の手前で処理が止まっており、echo "test"の処理まで行きません。
callしたバッチ内では最初にsetlocalの宣言を行い、endlocalの記述は省いています。
どなたか原因がわかる方が居たらお願いします。
0065デフォルトの名無しさん
2015/04/15(水) 05:47:48.98ID:qbvA5Mq5:STARTPROC
ECHO ●● このバッチファイルはWindows7で動作確認済です ●●
ECHO ・「proxy2ch」は i:\bin\proxy2ch フォルダにインストール済
ECHO ・「JaneXeno」は i:\bin\JaneXeno フォルダにインストール済
ECHO 以上の環境を前提としています
SETLOCAL
TITLE %~0
i:
ECHO ●● フリーソフト「proxy2ch」が起動してるかどうかを確認します ●●
ECHO ・まだ起動してない場合、先に「proxy2ch」を起動してから「JaneXeno」を起動します
ECHO ・既に起動している場合、即「JaneXeno」を起動します
TASKLIST /v | FINDSTR /i /r "proxy2ch.*running" > NUL
IF NOT ERRORLEVEL 1 GOTO STEP_OK
:STEP_NG
ECHO ●● まだ「proxy2ch」が起動してない為、ウィンドウ最小化状態で起動します ●●
ECHO (起動後、数秒待ってから「JaneXeno」を起動する事になります)
CD i:\bin\proxy2ch\Win32
START /MIN i:\bin\proxy2ch\Win32\proxy2ch.exe
PING 0 > NUL
:STEP_OK
ECHO ●● フリーの旧2ch仕様BBS用ブラウザ「JaneXeno」を起動します ●●
CD i:\bin\JaneXeno
START i:\bin\JaneXeno\Jane2ch.exe
:ENDPROC
ENDLOCAL
0066デフォルトの名無しさん
2015/04/15(水) 14:31:47.66ID:I1xT3eb5・条件分岐後に変な改行入れないでください
・A1なんてコマンド誰も知りません
・そもそもサブルーチンに移行できていません
ただ次行以降を実行しているだけです
提示したバッチ全体の構文がおかしいです
根本から見直してください
0067デフォルトの名無しさん
2015/04/15(水) 18:56:17.05ID:3mk21zLe0068デフォルトの名無しさん
2015/04/15(水) 19:14:08.41ID:iV7zdKJVこれが本当だったらそのbat内の処理が悪いんだろ
0069デフォルトの名無しさん
2015/04/16(木) 13:55:23.26ID:PKlW+mXsforfiles /P E:\HDD\backup /M *camdata* /S /D -10 /C "cmd /c rd /S /Q E:\HDD\backup\@file"
USB外付けHDDに監視カメラのデータを保存しています。
保存期間10日を過ぎたものはタスクスケジューラで削除していこうと思い、
上記バッチを実行すると該当データは削除できるのですが、その後に
ディレクトリ名が無効です。
ディレクトリ名が無効です。
ディレクトリ名が無効です。
・
・
・
とエラーがループして出てしまいます。
>>60-63
のデスクトップでのテストでは、エラーになりませんでした。
ご指導ねがいます。
0070デフォルトの名無しさん
2015/04/16(木) 19:05:59.05ID:dl3K38JP"cmd /c if @isdir==TRUE (rd /S /Q @path) else (del @path@file)"
0071デフォルトの名無しさん
2015/04/17(金) 00:25:16.38ID:w/dpiMO4WSH(VBScript, JScript)か、PowerShell でも使ったら?
Windows PowerShell
コマンド & スクリプティングガイド
五十嵐貴之(いからしたかゆき)、2015/3/25
0072デフォルトの名無しさん
2015/04/17(金) 07:57:13.26ID:x1OzcVcc0073デフォルトの名無しさん
2015/04/18(土) 13:07:53.50ID:PKb7WJB3コマンドプロンプトってターミナルエミュレーターかシェル
どっちの事を指して使われてる言葉なの?
0074デフォルトの名無しさん
2015/04/18(土) 13:10:24.18ID:sjW3inIoコマンドプロンプト
0075デフォルトの名無しさん
2015/04/18(土) 20:15:04.28ID:3vDqFDHYProsessExprorer系のツールでプロセス観察してみるとよく分かるよ。
0076デフォルトの名無しさん
2015/04/19(日) 02:00:49.40ID:0O9OZvk2forfilesなんて、昔はなかった
いつからなんだろう
古いサイトだと解説していない
0077デフォルトの名無しさん
2015/04/19(日) 14:25:40.05ID:YOn0sVc9フリーソフトのTAR.exeを使用して、
[フルパス]TAR.exe xvf [tarファイル名(フルパス)] -C [展開先ディレクトリ]で実行しても、
エラーで展開先にうまく解凍出来ません。
展開先の指定方法についてどなたかご教授願います。
0078デフォルトの名無しさん
2015/04/19(日) 14:51:37.34ID:9oYjIFcR0079デフォルトの名無しさん
2015/04/19(日) 14:58:02.24ID:ZbwKHW2Q0080デフォルトの名無しさん
2015/04/19(日) 16:15:39.93ID:5HhODAvdxvf の x はオプションじゃなくてコマンドだから "-" はいらない
>>77
そのフリーソフト -C オプションサポートしてるんか?
0081デフォルトの名無しさん
2015/04/19(日) 17:36:35.63ID:uCqT+TY7存在しないディレクトリ指定してエラーになってるとかそういうオチでは
0082デフォルトの名無しさん
2015/04/19(日) 23:32:53.44ID:6LHr2UmH本筋とはちと関係ないけど、tarって未圧縮の単なる書庫ファイルだからtgz(tar.gz)に
したらどないでっしゃろ
0083デフォルトの名無しさん
2015/04/21(火) 22:22:35.03ID:k+lIUh1Mhttp://www.soumu.go.jp/senkyo/kokumin_touhyou/index.html
☆ 日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、改憲の参議院議員が
3分の2以上を超えると日本国憲法の改正です。皆様方、必ず投票に自ら足を運んでください。
私たちの日本国憲法を絶対に改正しましょう。☆
0084デフォルトの名無しさん
2015/04/28(火) 09:18:46.56ID:AL7JlJvX> mklink /d c c:\
c <<===>> c:\ のシンボリック リンクが作成されました
> del c
D:\c\*、よろしいですか (Y/N)? y
のように質問された上にy押した後も消えてません
0085デフォルトの名無しさん
2015/04/28(火) 09:39:19.66ID:l73V3plJ0086デフォルトの名無しさん
2015/04/28(火) 09:43:27.68ID:8AGhJBnr0087デフォルトの名無しさん
2015/04/28(火) 17:42:15.31ID:Az6wvvs4フォルダごと消すなら >>86
0088デフォルトの名無しさん
2015/04/30(木) 12:53:11.12ID:ViywK5A0ありがとうございます
0089デフォルトの名無しさん
2015/05/04(月) 18:32:55.18ID:hzJehWExディレクトリにある全てのファイルをhoge.exeにドラック&ドロップするパッチを作ろうとしています。
>>25を参考に作っていましたが、hoge.exeが複数立ち上がってとんでもない状態になってしまいました。
hoge.exe foo1 foo2 ...
が実行できるパッチはどのように書けば良いでしょうか?
よろしくお願いいたします。
0090デフォルトの名無しさん
2015/05/04(月) 19:01:55.28ID:tr24rDGIでどや?
0091デフォルトの名無しさん
2015/05/04(月) 19:11:29.61ID:vdCrn8hY0092デフォルトの名無しさん
2015/05/04(月) 20:18:58.14ID:hzJehWExfor %%I in (*.bbb) do (
"hoge.exe" "%%*"
)
cd /d "E:¥aaa"
"hoge.exe" "%*
cd /d "E:¥aaa"
for %%I in (*.bbb) do (
start "" /wait "hoge.exe" "%%I"
)
cd /d "E:¥aaa"
start "" /wait "hoge.exe" "%*"
をやってみましたが、ダメでした。
どうやればいいんだろう 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0093デフォルトの名無しさん
2015/05/05(火) 00:56:28.99ID:cn76hmxdset FILES=
cd /d "E:\aaa"
for %%x in (*.*) do set FILES=!FILES! "%%~x"
hoge %FILES%
0094デフォルトの名無しさん
2015/05/05(火) 03:50:23.26ID:jBh84Fwc任意フォルダの全ファイルを一度に羅列して渡すのはできるだけ回避したほうが良くないかな
0095デフォルトの名無しさん
2015/05/05(火) 12:12:24.08ID:h/qL4+vGありがとうございます
すごい
ずっと悩んでいたから感激です
ほんと助かりました
>>94
拡張子でしていしておきました
アドバイスありがとうございます
009689
2015/05/06(水) 18:36:51.79ID:kduajoAsサブフォルダにあるファイルについてもできないか試していましたが、うまくいきませんでした。
試したのは
setlocal EnableDelayedExpansion
set FILES=
for /R "E:¥aaa" %%x in (*.bbb) do set FILES=!FILES! "%%~fx"
hoge %FILES%
です。%%~xを%%~fxや%%~$PATH:xに変えてみましたが、だめでした。
何かいい方法は無いでしょうか?
009789
2015/05/06(水) 19:36:01.98ID:kduajoAsファイル名、ファルダ名を変えたらうまくいきました
0098sage
2015/05/07(木) 02:20:57.96ID:kCRc77b6調べてみたのですがどうしたらいいか分りませんでした。どうやったら上手くいくのかどなたかご教示して頂けないでしょうか?
その1.dllとその2.dllは作成したバッチと同じディレクトリにあります。
@echo off
cd %~dp0
copy /-y その1.dll C:\Windows\SysWOW64\
copy /-y その2.dll C:\Windows\SysWOW64\
cd \Windows\SysWOW64
regsvr32 その1.dll
regsvr32 その2.dll
exit
0099デフォルトの名無しさん
2015/05/07(木) 02:30:30.14ID:VKPrOxig↓
@echo on
exit
↓
pause
にしてチェックしてみるとか
0100デフォルトの名無しさん
2015/05/07(木) 08:06:10.91ID:VSUD10fG0101デフォルトの名無しさん
2015/05/07(木) 11:09:54.36ID:KWH/KWxFcd %~dp0
↓
cd /d %~dp0
cd \Windows\SysWOW64
↓
cd /d C:\Windows\SysWOW64
0102デフォルトの名無しさん
2015/05/07(木) 16:36:18.43ID:96jPVZUT「成功しました」ってメッセージボックス出てそれ閉じるまでバッチの動作止まっちゃうね
0103sage
2015/05/07(木) 22:31:45.98ID:kCRc77b6>>101 C:ドライブ上ですら上手くいかないので最初は付けていたのですが外しました。
>>102 /s は付けないほうが成功しましたと出るので、成功できてることが確認できていいかなと思いまして付けてませんでした。
自己解決しました。ファイル名だと動かなくなくことは知っていたのですが、どうやらフォルダ名も半角の括弧があると、バッチを右クリックで管理者として実行してもバッチとして認識されないようでした。
基本的なところが間違っていたようです。
色々とお騒がせしてすいませんでした。
ダブルクリックだと半角括弧あっても動くのに・・・
0104デフォルトの名無しさん
2015/05/07(木) 22:59:18.82ID:VSUD10fG一行ごとにpause入れて止まらんとか聞いたことないぞ
0105sage
2015/05/07(木) 23:15:37.73ID:kCRc77b6PCが2台あるのでregsvr32で試したのですが両方が同じ結果でした。
フォルダ名に半角括弧の( を付けて、管理者権限が必要なコマンドが入ったものを試していただけないでしょうか?
)だけだとなぜかうまくいきました。
0106デフォルトの名無しさん
2015/05/07(木) 23:24:22.25ID:yEqXNtFThttps://social.msdn.microsoft.com/Forums/ja-JP/43f69d0b-1e8a-457b-8e85-57f4c06f2e56/bat?forum=windowsgeneraldevelopmentissuesja
0107sage
2015/05/07(木) 23:44:02.20ID:kCRc77b60108デフォルトの名無しさん
2015/05/08(金) 00:08:07.40ID:0odcB8A0パス・ファイル名には、半角英数字と、
_ アンダーバーだけを使う
日本語、空白、/ \ などは、
外人が作ったアプリや他のOSで、バグを起こす
外人は日本語のことまで考えて、
アプリを作っていないため
0109sage
2015/05/08(金) 00:43:49.96ID:1YMiCyWS0110デフォルトの名無しさん
2015/05/08(金) 01:22:21.82ID:DmYJm/wo> 日本語、空白、/ \ などは、
> 外人が作ったアプリや他のOSで、バグを起こす
逆になるべく日本語フォルダ、ファイル名にしておけば
海外製ウィルスが動作しなくなるかな
0111デフォルトの名無しさん
2015/05/08(金) 09:58:38.71ID:5fQ7r8Awイカタコとかは無理じゃね
0112デフォルトの名無しさん
2015/05/08(金) 16:37:33.99ID:U2au088Y全部日本語の窓互換OS開発すればありかもしれない
0113デフォルトの名無しさん
2015/05/08(金) 22:38:18.81ID:KwMVu8ydProgram Files(x86)とかいう名前をつけたのは外人だろ?
0114デフォルトの名無しさん
2015/05/12(火) 23:56:25.43ID:McgsoQJkdirを使えば最後に出ますが。
0115デフォルトの名無しさん
2015/05/13(水) 00:19:46.38ID:IRvX1zB30116デフォルトの名無しさん
2015/05/13(水) 00:44:59.35ID:++gYyXtiありがとうございます。
FSUTIL ユーティリティには管理者特権が必要です。
でしたが。
0117デフォルトの名無しさん
2015/05/13(水) 01:05:56.71ID:7VTqgTSP0118デフォルトの名無しさん
2015/05/15(金) 21:00:38.39ID:FSXq3hA5探しています。
E:\の場合はE:にしたいのです。
理由は、aria2c -dオプションでドライブ指定[E:\]の場合正常に動作せず、
[E:]で動作する。ためです。
よろしくお願いします。
0119デフォルトの名無しさん
2015/05/15(金) 21:37:19.52ID:G1rKhc+AGoogleでバッチファイル、テキストファイル、置換のキーワードでヒットするサイトを参考にしたら?
0120デフォルトの名無しさん
2015/05/15(金) 21:58:52.22ID:XJBM+btEset x=E:\
if "%x:~-1%" equ "\" set x=%x:~0,-1%
0121デフォルトの名無しさん
2015/05/15(金) 22:00:53.20ID:j/48pAYL0122デフォルトの名無しさん
2015/05/15(金) 22:30:21.33ID:FSXq3hA5>>120
>>121
ありがとうございました。
0123デフォルトの名無しさん
2015/05/16(土) 00:42:02.22ID:O4uFm57fありがとうございます。表示できました。
wmic というコマンドは知りませんでした。
wmic /? でみると巨大なコマンドなのに。
0124デフォルトの名無しさん
2015/05/18(月) 19:51:05.44ID:a89GM3eE"delims="と"tokens=*"の違いがわかりません
どちらも区切りなしで全てが対象の気がするんです
どのように使い分けてるんでしょうか?
0125デフォルトの名無しさん
2015/05/18(月) 20:11:44.07ID:a89GM3eEfor /f "usebackq tokens=*" %%i in (`cscript //nologo "len.vbs" "hoge"`) do set les=%%~i
結果を受取る最後の部分、les=%%~iとles=%%iの違いが解りません
~の有無で何が変わるんしょう?
"usebackq tokens=*"と"usebackq delims="の使い分けと
les=%%~iとles=%%iの違いが解んないです
0126デフォルトの名無しさん
2015/05/18(月) 20:35:07.70ID:/17k7IVe"c:\program files\aaa\bbb.exe"
みたいな空白を含み両端が""で囲まれている時に
%%iだと"c:\program files\aaa\bbb.exe"になり
%%~iだとc:\program files\aaa\bbb.exeになるという違いがあるから
受け取るのが数値を表した文字列の場合はどっちも一緒
0127デフォルトの名無しさん
2015/05/18(月) 22:47:45.42ID:clhkHSwG0128デフォルトの名無しさん
2015/05/18(月) 23:43:20.25ID:a89GM3eEちょっと確認とれないけど、言ってる意味はわかりました
ありがとうございます
>>127
スペースの有無で結果が変わりますね
違いがわかりました。ありがとうございます
0129デフォルトの名無しさん
2015/05/20(水) 17:18:51.87ID:/oDHFiERご助力をお願いいたします。
目的:任意フォルダ配下のサブフォルダから、行頭にの”[AAA]”があるフォルダのみを
別の任意フォルダに移動させたい。行頭文字には[ ]含みます。
移動元の親フォルダはd:\moto と仮定します。移動先フォルダはd:\saki とすると
処理したい該当するフォルダはd:\moto\[AAA]* となります。
set d_moto=d:\moto /* 移動元親フォルダ*/
set d_saki=d:\saki /* 移動先フォルダ*/
set path_moto=%d_moto%\[aaa]* /* 移動の対象フォルダ*/
for /d %%f in (%path_moto%) do move %%f %d_saki%
該当サブフォルダまでsetしたのはこの他の箇所で使うので定義しています。
またfor /d %%f in (%d_saki%\[aaa]*) do move %%f %d_saki% でも構文エラーが出ます。
ワイルドカードの記述がよく判っておりません。
0130デフォルトの名無しさん
2015/05/20(水) 17:26:51.76ID:/oDHFiER○ set path_moto=%d_moto%\[AAA]* /* 移動の対象フォルダ*/
失礼しました。上記レスには他にも誤字がありますがご勘弁願います。
0131デフォルトの名無しさん
2015/05/20(水) 17:41:33.73ID:Wa0xSOyJ実行したとき、コマンドプロンプトにどういうメッセージが出てたのか分からないので想像になるが
多分半角空白が含まれるフォルダ名のところでエラーが出てるんじゃない?
%%f -> "%%~f"
%d_moto%と%d_saki%には半角空白が含まれる可能性がないとするなら上の変更でいいと思う
あと、パス名ファイル名に大文字小文字の区別はないので>>130の上も下も全く同じ
0132デフォルトの名無しさん
2015/05/20(水) 19:23:26.75ID:/oDHFiERfor /d "%%~f" in (%path_moto%) do move "%%~f" %d_saki%
for /d "%%f" in (%path_moto%) do move "%%f" %d_saki%
どちらもダメでした。コマンドプロンプト・ウインドウ上でのエラー表示になりますが、
「"%~f" の使い方が誤っています。」と表示されます(又は"%f" )。
バッチでもエラーメッセージは表示されますが、バッチウインドウ自身が強制終了して
閉じてしまいバッチ上でのメッセージは確認出てきておりません(同じ内容だと思いますが)。
%環境変数%を使わないでコマンドプロンプト上でテストしてみると、行が変わって内部の
move文で半角スペースが有るため以下のパターンでは「コマンドの構文が誤っています。」と
表示されます。
for /d %~f in ("d:\moto\[AAA]*") do move %~f "d:\saki" ※%~f → %f でも
for /d %~f in ("d:\moto\[AAA]*") do move %~f d:\saki 同じ結果でした
for /d %~f in (d:\moto\[AAA]*) do move %~f d:\saki
後出しで恐縮ですがOSはWindows7 x64、アドミン&管理者モードで実行しています。
0133デフォルトの名無しさん
2015/05/20(水) 19:39:25.40ID:Wa0xSOyJちゃんと説明しなかったけど、まあこう書けばヘルプ見て分かると思ったんだけど
for /d %%f in (%path_moto%) do move "%%~f" %d_saki%
for /?
pause /?
0134デフォルトの名無しさん
2015/05/20(水) 20:21:43.80ID:/oDHFiERset d_moto=d:\moto /* 移動元親フォルダ*/
set d_saki=d:\saki /* 移動先フォルダ*/
set path_moto=%d_moto%\[aaa]* /* 移動の対象フォルダ*/
for /d %%f in (%path_moto%*) do move "%%f" "%d_saki%"
で正常動作しました。setした際に行尾に\を入れていなかったためか、
%%~f ではコンソール画面が強制終了してしまいましたので、%%fにしております
ご回答とお付き合い頂き、ありがとうございました。
0135デフォルトの名無しさん
2015/05/22(金) 18:53:43.10ID:dDrrBwBtset I="F:¥hoge¥test.txt"
set tem1=%~tI
set tem2=%tem1:"/"=%
set tem3=%tem2:" "="-"%
set tem4=%tem3:":"=%
rename %I% test%tem4%.txt
としてみたのですがうまくいきませんでした。
何かいいアイデアをお願いします。
0136デフォルトの名無しさん
2015/05/22(金) 19:08:31.56ID:H1v/SBhd0137デフォルトの名無しさん
2015/05/22(金) 19:09:49.99ID:H1v/SBhdfor %%i in (%I%) do set temI=%%~ti
0138デフォルトの名無しさん
2015/05/22(金) 19:57:31.64ID:rsRBQIIscall :x %%I%%
goto :eof
:x
set "tem1=%~t1"
set "tem2=%tem1:/=%"
set "tem3=%tem2: =-%"
set "tem4=%tem3::=%"
rename "%~f1" "%~n1%tem4%%~x1"
0140デフォルトの名無しさん
2015/05/23(土) 01:08:59.65ID:idOG0Vl/ご参考
大量にある、下位階層まで変更したい場合、
Flexible Renamer というフリーソフトもある
0141デフォルトの名無しさん
2015/05/23(土) 09:30:59.77ID:sl1qWZ50�d
0142デフォルトの名無しさん
2015/05/23(土) 09:45:09.89ID:EIZIQejy> 大量にある、下位階層まで変更したい場合
>>137 の応用 (for /r) でいいだろ
0143デフォルトの名無しさん
2015/05/30(土) 17:32:47.82ID:KPmzF3IM:RETAKE
set D=%DATE%
set T=%TIME: =0%
if not %D% == %DATE% goto RETAKE
set YYYYMMDDHHMMSS=%D:~-10,4%%D:~-5,2%%D:~-2%%T:~0,2%%T:~3,2%%T:~6,2%
:LOOP
start "hoge" /wait "hoge.bat"
if "%YYYYMMDDHHMMSS%"=="20150531000000"(
goto NEXT
) else (
ping localhost -n 600 > nul
goto LOOP
)
:NEXT
0144デフォルトの名無しさん
2015/05/30(土) 17:43:26.77ID:KWAqrQi+jt.exeとかschtasksとか
0145デフォルトの名無しさん
2015/05/30(土) 19:41:05.67ID:h+FcqRuXLOOP部分だけど、それだと指定日時に一致しない場合は延々ループし続ける
AよりBが小さいのようにGEQやLEQなどの比較演算子のほうがよさそう
if %YYYYMMDDHHMMSS% LSS 20150531000000 (
数値比較の場合はダブルクォートは外したほうがいい
0146デフォルトの名無しさん
2015/05/30(土) 20:55:20.63ID:NQWNmwnGそんなの、まともに比較出来ると思うのか?
0147デフォルトの名無しさん
2015/05/30(土) 21:09:00.59ID:NQWNmwnGif 20150530999999 LSS 20150531000000 echo aho
if "20150530999999" LSS "20150531000000" echo baka
0148デフォルトの名無しさん
2015/05/31(日) 01:38:25.44ID:jBtv10qY日時判定のif文を二段階にしたら
最初年月日で、次に時分秒で
0149デフォルトの名無しさん
2015/05/31(日) 03:52:31.64ID:6BGakI3g数字だけだと数値比較、それ以外は文字列比較
32ビット整数を超える数値なら文字列比較で
0150デフォルトの名無しさん
2015/05/31(日) 04:52:13.09ID:ntMrQIQAif "%date%"=="2015/05/31" goto NEXT
start "hoge" /wait "hoge.bat"
ping localhost -n 600 > nul
goto LOOP
:NEXT
でよくね
厳密にやりたかったら日時型すらないバッチなんぞ捨ててしまえ
0151デフォルトの名無しさん
2015/06/02(火) 11:53:10.99ID:kNAcHIfI特定のフォルダ配下の子フォルダの中身にはどんなファイル、孫にあたるサブフォルダ(※1)、とも存在しない物だけが
本処理対象(退避場所へ移動させる)となります。
※1 サブフォルダは存在してても中身が空の物は”例外処理(フォルダの削除)”の対象とします。
一言でフォルダの中身が空と行っても子フォルダとサブ以下では処理が異なります。子は本処理、孫以下は例外。
d:\temp
├aaa(ファイルはあり)-aaa1(ファイルは空)-aaa2(ファイルは空)
├bbb(ファイルは空)-bbb1(ファイルはあり)
├ccc(ファイルは空)-ccc1(ファイルは空)
├ddd(ファイルはあり)
├eee(ファイルは空)
├fff(ファイルは空)-fff1(ファイルは空)-fff2(ファイルはあり)
├ggg(ファイルはあり)-ggg1(ファイルはあり)-ggg2(ファイルは空)
本処理対象 :eee
例外処理対象:aaa1,aaa2,ccc,ccc1,ggg2
処理対象外 :aaa,bbb1(bbb毎),ddd,fff2(fff fff1毎),ggg(ggg1毎)
(つづく)
0152デフォルトの名無しさん
2015/06/02(火) 11:56:57.04ID:kNAcHIfIset cnt=1
loop-st:
if cnt==5 goto loop-end
for /d /r %dir_path% %%D in (\*) do ( //サブフォルダを含む指定配下のフォルダの全リストを取得
if not exist "%%D\*nul" ( //サブフォルダが無い場合対象とする
for %%S in (%%D\*.*) do ( //さらに中にファイルが存在し無ければ本処理対象 ※2
本処理
)
) else (
for %%S in (%%D\*.*) do ( //さらに中にファイルが存在し無ければ本処理対象 ※2
例外処理
)
)
set /a cnt=%cnt%+1
:loop-end
って感じで記述したのですが※2で「無ければ」の書き方判らなくて情け無い事に断念。if not exitですと
*.*指定をするとバッチが落ちる(コマンドプロンプト窓が強制的に終了しエラーも確認しにくい)ため上手く行きません。
またfor文の中で強引に goto とラベルを記載するやり方はエラー(※2)となりました。
※2 ()の使い方…と表示してたのは確認出来ました。
なおフォルダの階層は最大4です。aaa2は階層3となります。また上記では例外中の例外なcccに対してもまだ未対応です。
cccは子フォルダですが、空のサブフォルダしかないパターンで本来あってはいけないフォルダとなりますので
例外処理行き(ccc,ccc1共に削除)です
batでは困難でしょうか?正解コーデングのご呈示をお願い申し上げます。
0153デフォルトの名無しさん
2015/06/02(火) 19:30:38.92ID:KyjHTQN8eeeの本処理(退避場所に移動させる)って言うけど
eeeはファイルのフォルダも無い空のフォルダだよね?
退避させる意味あるの?
0154デフォルトの名無しさん
2015/06/02(火) 21:40:21.15ID:KyjHTQN8pushd d:\temp
set bak=c:\bak
set level=-1
call :sub "z:\test" proc1
call :sub "z:\test" proc2
popd
goto :eof
:sub
setlocal
if "%2" neq "" set proc=%2
pushd %1
set /a level+=1
if %level% lss 5 (
for /d %%i in (*.*) do (call :sub %%i)
) else (goto :eof)
set cnt=0
for /d %%i in (*.*) do set /a cnt+=1
for %%i in (*.*) do set /a cnt+=1
popd
call :%proc% %1 %level% %cnt%
endlocal
goto :eof
:proc1
if %2 equ 1 if %3 equ 0 md %bak%\%1 2>nul&rd %1
goto :eof
:proc2
if %3 equ 0 rd /s/q %1
goto :eof
0155デフォルトの名無しさん
2015/06/02(火) 21:48:29.76ID:KyjHTQN8call :sub "z:\test" proc1 → call :sub . proc1
call :sub "z:\test" proc2 → call :sub . proc2
0156デフォルトの名無しさん
2015/06/02(火) 23:07:01.41ID:mV5sXZYHまたは
半角空白 + 全角空白
は
2ch推奨NGワードなので避けませう
0157デフォルトの名無しさん
2015/06/03(水) 00:33:22.13ID:PtFxkubO@echo off
set bak=z:\bak
set level=-1
call :sub "d:\temp"
goto :eof
:sub
setlocal&pushd %1
set /a level+=1
if %level% gtr 4 goto :eof
set subdir=0
for /d %%i in (*.*) do call :sub "%%i"
set cnt=0
for /d %%i in (*.*) do set /a cnt+=1
for %%i in (*.*) do set /a cnt+=1
popd
if %cnt% equ 0 (
if %subdir% equ 0 (
if %level% equ 1 (call :proc1 %1) else (call :proc2 %1)
) else (call :proc2 %1)
)
endlocal&set subdir=1
goto :eof
:proc1
md %bak%\%1 2>nul&rd %1
goto :eof
:proc2
rd /s/q %1
goto :eof
0158デフォルトの名無しさん
2015/06/03(水) 07:12:21.00ID:WCFfLif6set "d1=%cd%\"
for /f %%i in ('"dir /ad /s /b 2> nul"') do set "d2=%%~fi" & set "d3=%%~dpi" & call :x & popd
goto :eof
:x
pushd "%d2%"
for /f %%j in ('"dir /a-d /s /b 2> nul"') do goto :eof
for /f %%j in ('"dir /ad /s /b 2> nul"') do goto y
if "%d1%" == "%d3%" goto z
:y
例外処理
goto :eof
:z
本処理
0159デフォルトの名無しさん
2015/06/04(木) 21:39:02.33ID:E36uiKc83行目
for /f "delims=" %%i in ('"dir /ad /s /b 2> nul"') do set "d2=%%~fi" & set "d3=%%~dpi" & call :x & popd
8行目
for /f %%j in ('"dir /ad /b 2> nul"') do goto y
0160デフォルトの名無しさん
2015/06/06(土) 19:29:25.50ID:iCqfzRtefirefoxのアドオンをつくろうと思い、アドオンのインストールを自動化するために
以下のbatファイルを作成しました。
@echo off
:loop
jpm xpi
wget [email protected] http:/localhost:8888/
sleep 5000
goto loop
しかし、次のようなメッセージがループします。
"'jpm'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。"
"'wget'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。"
"'sleep'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。"
jpm,wget,sleepはコマンドプロンプトからだと3つともちゃんと動きます。なのでbatでは自分で追加したコマンドは
ダメなのかと思ったので質問しました。
環境はwindows 7 Home Premium 64bit sp1です。
0161デフォルトの名無しさん
2015/06/06(土) 20:59:24.45ID:hSodQv/B使える。キミが何か間違っているが、必要な情報を提示していないので、それ以上の事は不明。
0162デフォルトの名無しさん
2015/06/06(土) 21:36:49.50ID:iCqfzRte僕が怪しいかなと思う部分を上げてみます。
1,batファイルはコマンドプロンプトでコマンドが期待通り動いた作業ディレクトリに置いています。
2,環境変数のPathに追加したというのは、システムのプロパティ→詳細設定→環境変数で設定していました。
ログインしているユーザーの環境変数のPathにjpm,sleeepのパスを、システム環境変数のPathにwgetのパスを設定していました。
3,パスの書き方は、コマンドの実行ファイルがあるディレクトリのフルパスをコピーして";"で区切っています
3,ログインしているユーザーは管理者
バッチファイルの先頭で「SET PATH=%PATH%;追加パス」を追加したら一応動いたのですが、
必要ではないんじゃないかとなんとなく思って気になってしまいます。
0163デフォルトの名無しさん
2015/06/07(日) 00:35:36.48ID:TwcY/ocitimeoutが市民権を得てもいいと思うんだけどなー
0164デフォルトの名無しさん
2015/06/07(日) 01:59:54.71ID:uKDfTV9kecho %path%
を入れてデバッグしよう
sleep → timeout
0165デフォルトの名無しさん
2015/06/07(日) 03:08:07.23ID:u7+f65Adこれ設定しても既に動いてるプロセスには即反映されないから
プロセスを再起動したり、一旦ログアウトしないといけないこともある
そこら辺で混乱があったのかもな
SET PATH=%PATH%;追加パス
は
SET PATH=追加パス;%PATH%
の方が良かったりすることもある
ファイル名がぶつかったとき呼び出したいものが呼び出せないこともあるから
バッチ実行時の最終的なパスがどうなってるのか確認したかったら
@echo off
path&pause
:loop
とかやっとくといい
0166デフォルトの名無しさん
2015/06/07(日) 15:23:50.35ID:MMVoxWft>164
>165
アドバイスありがとうございます。
>165さんの言うとおり、パソコンを再起動したらちゃんとpathが反映されました。
みなさんのアドバイスを参考にして、あと、短いけどなるべく使いまわせるように役割ごとにばらそうと考え
最終的にこういう風にしました。
====auto_addon_install.bat=====
@echo off
call confirming_path.bat
:loop
call jpm_xpi.bat
wget [email protected] http://localhost:8888/
timeout 5
::instead of "sleep 5000"
goto loop
====confirming_path.bat=====
@echo off
:: confirming path 1 as not \n
path
:: confirming path 2 as \n
echo %path% | sed s/;/\n/g
pause
exit
====jpm_xpi.bat====
@echo off
jpm xpi
exit
==================
これからアドオンをつくってみようと思います。ありがとうございました。
0167デフォルトの名無しさん
2015/06/07(日) 16:49:41.54ID:LTwn0E2k処理結果を確認する意味で終了コードを利用してもいいかもね
call jpm_xpi.bat
if ERRORLEVEL 1 (echo Exit Status %ERRORLEVEL%) & pause & goto :EOF
wget 以下略
====jpm_xpi.bat====
@echo off
jpm xpi
if %ERRORLEVEL%==1 exit /B 1
if %ERRORLEVEL%==0 exit /B 0
0168デフォルトの名無しさん
2015/06/07(日) 20:59:15.64ID:MMVoxWftそうだったのですか。
確かにpath確認用のconfirming_path.batをした後に、親バッチへ戻ってきていませんでした。
しかし、jpmの仕様なのか、confirming_path.batをコメントアウトしただけで,jpmの方は親バッチへ戻ってきしまいました。
僕がjpmを別のbatに移そうと思ったのは、メインのバッチファイルでjpmを実行するとjpmを実行した時点で処理が終了してしまうからです。
もしかしてこれが、jpmのバッチファイルがexit /Bを使わずに親バッチへ戻ってくることとなにか関係があるのでしょうか。
終了コードの書き方も参考にさせて頂きます。
0169デフォルトの名無しさん
2015/06/11(木) 06:24:09.49ID:zvXhuG+Hここでxxxは過去に出力したログを検索してヒットしたら出力しない、
何度この行を実行しても常にユニークな出力しかされないということをやりたいんですが
うまい方法ないですか
0170デフォルトの名無しさん
2015/06/11(木) 08:30:10.02ID:o9tryPI0ありがとうございます。引数渡しもあるのですね。
勉強になりました
0171デフォルトの名無しさん
2015/06/15(月) 18:12:46.03ID:GJ2N2cUzゼロから始まる数字は10進でなく8進法扱いされおかしな結果になります。
ゼロが何個も続く可能性のある数字文字列から最初のゼロを取る
簡単のやり方を教えて下さい。
0172デフォルトの名無しさん
2015/06/15(月) 19:34:37.53ID:PeZ0fZ8f簡単な方法は知らんが、愚直な方法としては %d% に数値が入ってるという前提で
:zero_suppress
if "%d:~0,1%" equ "0" if "%d:~1%" neq "" set d=%d:~1%&goto :zero_suppress
又は
for /f "delims=0" %%i in ("%d%") do set d=%%i
if "%d:~0,1%" equ "0" set d=0
0173デフォルトの名無しさん
2015/06/15(月) 20:03:52.06ID:IzyZ+arnset "a=0123"
set /a "b=1%a%*2-2%a%"
echo "%a% --> %b%"
0174デフォルトの名無しさん
2015/06/15(月) 22:25:16.68ID:C49nk2800175デフォルトの名無しさん
2015/06/16(火) 01:55:22.19ID:xfn3wJg6ありがとうございます。
勉強になりました。
>>173さんはすぐに意味がわかりませんでしたが、やってみて納得、
set "a=0123" のように "" で囲めるのは初めて知りました。
>>174さんはエラーが出ますが、
0176デフォルトの名無しさん
2015/06/16(火) 05:24:35.09ID:kBkkj2GI>>174 の -0 と /a は不要
0177デフォルトの名無しさん
2015/06/16(火) 17:38:49.75ID:fIwvDifY>>176
とっちゃダメ
0178デフォルトの名無しさん
2015/06/16(火) 20:07:51.10ID:kBkkj2GI不要だよ
0179デフォルトの名無しさん
2015/06/16(火) 20:35:30.33ID:kBkkj2GIでも a が空だと不味いぞ
0180デフォルトの名無しさん
2015/06/16(火) 21:06:14.29ID:kBkkj2GIfor /f "tokens=* delims=0" %%i in ("%a%-0") do set /a a=%%i
バッチじゃなくて直接入力だと "%a%" に展開されるのでNG
0181デフォルトの名無しさん
2015/06/26(金) 06:01:05.05ID:sKB1AmZZTech TIPS:バッチファイルの基本的な使い方 - @IT
http://www.atmarkit.co.jp/ait/articles/1506/26/news026.html
0182デフォルトの名無しさん
2015/06/27(土) 23:07:54.24ID:5TA1TjZr一括でコピーしたいのですが、xcopyやrobocopyでどのように記述すればいいのでしょうか?
ヘルプを見ると、除外するオプション(/EXCLUDE)は記載されていましたが
この方法だと指定するのが多くなりすぎて不便で困っている状態です
ご教示よろしくお願いします
0183デフォルトの名無しさん
2015/06/28(日) 12:19:29.88ID:Mckk18LIrobocopy /s コピー元 コピー先 *.jpg *.png
0184デフォルトの名無しさん
2015/06/28(日) 16:57:40.34ID:hilWFqBu0185182
2015/06/29(月) 22:19:20.20ID:xFjGO25h0186デフォルトの名無しさん
2015/06/30(火) 09:40:16.25ID:T2wiUbpe0187デフォルトの名無しさん
2015/06/30(火) 10:23:04.09ID:T2wiUbpe補助ツールの起動用として汎用的に使いたいと思ってます
0188デフォルトの名無しさん
2015/06/30(火) 12:20:24.58ID:28t7zSj6http://www.forest.impress.co.jp/library/software/visualbat/
0189デフォルトの名無しさん
2015/07/01(水) 01:32:24.09ID:MjkDd52Tそういう処理はバッチファイル向きじゃないのでAutoHotkeyとかのツール使った方がいいと思う
0190デフォルトの名無しさん
2015/07/02(木) 17:26:26.46ID:UInPCaD/ってどうやって書けばいいですか?
0191デフォルトの名無しさん
2015/07/02(木) 18:15:40.14ID:W1iwlrdH0192デフォルトの名無しさん
2015/07/03(金) 02:00:44.30ID:DFRnLTHhじゃね?
0193デフォルトの名無しさん
2015/07/03(金) 19:45:25.30ID:UldOsxivif not %x:秘=%' == %1' aaa.exe
0194デフォルトの名無しさん
2015/07/04(土) 07:18:12.44ID:vLkJmuOy起動のたびに指定のバッチファイルを自動で実行させる方法ないですか。
0195デフォルトの名無しさん
2015/07/04(土) 12:58:13.63ID:qSlQKSp6実行したいバッチファイルの最終行に「cmd.exe /k」コマンドを一行追加し、そのバッチファイルを実行すれば良い。
例えば以下の内容のバッチファイルは、基本的にSendToフォルダ(右クリック→「送る」)に入れておくものだが、
好きなフォルダで直接ダブルクリックしても良い。(ちなみに2行目のCOLORコマンドは文字を見やすくするためのもの)
@ECHO OFF
COLOR 0F
TITLE "%~f0"
ECHO 【コマンドプロンプト起動】
%~d1
CD "%~f1"
IF ERRORLEVEL 1 CD "%~p1"
ECHO ---------+---------+---------+---------+---------+---------+---------+
ECHO 右クリックしたファイルが存在するフォルダ(または右クリックしたフォルダ)をカレントディレクトリとして、コマンドプロンプト画面を起動しました。
ECHO この画面を閉じるには、通常のコマンドプロンプト画面の場合と同様に、画面の右上隅にある[X]をクリックするか、EXITコマンドを入力して下さい。
ECHO ---------+---------+---------+---------+---------+---------+---------+
VER
CMD.EXE /K PROMPT $G $T (%USERNAME%@%COMPUTERNAME%) "$P"$_$G
EXIT
0196デフォルトの名無しさん
2015/07/04(土) 13:08:57.29ID:s7zvO/Zmコマンドプロンプトのショトカットを右クリックし、プロパティを開いて
リンク先が〜cmd.exe"になってるところを、"〜cmd.exe" /K "バッチフルパス.bat"
って書き換えればいいんじゃね?
0197デフォルトの名無しさん
2015/07/05(日) 22:30:41.38ID:CaTht0J/と言う バッチ処理教えて 時々 Bluetooth機器が阿保になるので
0198デフォルトの名無しさん
2015/07/09(木) 00:33:36.89ID:x+M3PwToそれで.
start hoge1.bat
start hoge2.bat
コマンド1
や
start /w hoge1.bat
start /w hoge2.bat
コマンド1
を試してみましたがダメでした。
何かいいアイデアはありませんか?
よろしくお願いします。
0199デフォルトの名無しさん
2015/07/09(木) 01:33:00.66ID:EFIo5QkZ0200デフォルトの名無しさん
2015/07/11(土) 23:54:44.10ID:zNJDNBRR0201デフォルトの名無しさん
2015/07/12(日) 00:31:32.75ID:JwgGsFihそしてつなげた標準入出力は別に使う必要は無いわけで。
0202デフォルトの名無しさん
2015/07/12(日) 00:34:11.82ID:JwgGsFih0203デフォルトの名無しさん
2015/07/12(日) 12:41:45.69ID:yyKtP/0Vwindows8.1でBluetoothキーボード、マウスを使用しています
しばらく使用しないとキーボードが自動的に休止になってしまい
以降 Bluetoothを一旦OFFして再度ONしないと接続ができません。
これをマウスで操作すると5,6回の操作が必要です
バッチでBluetoothをOFF ONするようなコマンドは作れるんでしょうか?
0204デフォルトの名無しさん
2015/07/12(日) 14:06:18.11ID:leLDDrPp対象のハードウェアIDを調べてdevcon.exe使えばバッチから可能かも
簡単に書くと、事前にデバイスマネージャーでBluetooth機種のハードウェアIDを調べる
devcon.exe disable "対象のBluetooth機種のハードウェアID"
devcon.exe enable "対象のBluetooth機種のハードウェアID"
みたいな流れね
ハードウェアIDがわからないならあきらめろん
0205デフォルトの名無しさん
2015/07/12(日) 14:09:25.86ID:cZduJ3g5詳しくないが、DevConが必要らしい
0206デフォルトの名無しさん
2015/07/12(日) 14:39:15.93ID:ZoJlZfIrONにするときにUACのダイアログを操作するデバイスなくない?
0207デフォルトの名無しさん
2015/07/12(日) 15:40:00.13ID:ZoJlZfIr206は無視してください…
0208デフォルトの名無しさん
2015/07/12(日) 16:00:47.21ID:PO2rWK+pありがとうございます
そういことか
ごっちゃな出力でパニクってました
パイプを順次に起動してと思い込んでいました
0209デフォルトの名無しさん
2015/07/13(月) 02:19:24.08ID:oxguYBiyhttp://www.natzworks.com/digital/entries/2010/000263.html
だとWinインスコ時のも移動させちゃうからアプリストアなど動かない
0210デフォルトの名無しさん
2015/07/13(月) 13:24:27.28ID:ck7CB2gy動かん 先ずは止めてみようと思い
C:\User\i386\devcon.exe disable "HID\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002056e_PID&102d&Col01"
pause
exit
と打ったが 止まらん
ハードウェアIDが間違ってるの?詳細の一番上の一行だけど
0211デフォルトの名無しさん
2015/07/13(月) 13:53:24.86ID:RWTt7ci0記号類で引っかかってるのかも
^& のように ^ 記号でエスケープしたらどう
0212デフォルトの名無しさん
2015/07/13(月) 21:54:00.22ID:ck7CB2gyこの表現わからない。
0213デフォルトの名無しさん
2015/07/13(月) 22:54:36.16ID:RWTt7ci0}_VID&0002056e_PID&102d&Col01
を
}_VID^&0002056e_PID^&102d^&Col01
のように ^ 記号でアンド記号をエスケープする案を示した
バッチファイルからみてアンド記号はコマンド扱いなの
※ 文字化け対策のため & 記号を全角文字表記したので、実際には半角に直して
それと無関係なもの止めるとまずいからハードウェアIDの確認方法も書いておく
大まかな方法だけどコマンドプロンプトから実行して、該当するか確認して
devcon hwids *| find /I "HID"
0214デフォルトの名無しさん
2015/07/13(月) 23:24:19.93ID:9jM/hgDMdevcon findall HID\*
や
devcon find HID\*
とか
devcon hwids HID\*
の方が見当つけ易いんじゃなかろうか
0215デフォルトの名無しさん
2015/07/14(火) 00:05:27.15ID:xh4YNKiwバッチ処理前提だから
devcon hwids *|find /I "HID"|find /I "0002056e"|find /I "102d"
if ERRORLEVEL 1 goto ERROR
if ERRORLEVEL 0 goto BEGIN
みたいに段階的にフィルタして絞り込む形もとりえるかなと
安全でやりやすい方法ならなんでもいいの
0216デフォルトの名無しさん
2015/07/14(火) 04:06:21.79ID:ayHDk+Pvここに64ビット版があるらしい
試してみてくれ
ttp://delphintipz.blogspot.com/2012/07/disable-failed-no-devices-disabled.html
0217デフォルトの名無しさん
2015/07/14(火) 08:33:00.74ID:TwNFk+SS(コマンド名) "C:\Program Files\A" " D:\Program Files\A "←Aを代入
を実行してくれるbatって書けますか
0218デフォルトの名無しさん
2015/07/14(火) 09:05:32.61ID:gam5IC3n0219デフォルトの名無しさん
2015/07/14(火) 12:17:36.57ID:TwNFk+SSサンプルか参考batアドバイス宜しく
0220デフォルトの名無しさん
2015/07/14(火) 13:11:19.14ID:gam5IC3nこれでいいんじゃない?
set /p a=
command "c:\Program File\%a%" "c:\Program File\%a%"
0221デフォルトの名無しさん
2015/07/21(火) 07:37:07.25ID:7WzjAJ7xprocess_stdin.bat
:loop
if 標準入力がEOFなら goto :eof
標準入力から1行ゲットして%line%に保存
echo [%line%]
goto loop
>dir | process_stdin
[aaa.txt]
[bbb.txt]
[ccc.txt]
0222デフォルトの名無しさん
2015/07/21(火) 15:14:00.60ID:J1lfUMsKhttp://doudemoexe.com/Batch/0005.jsp
0223デフォルトの名無しさん
2015/07/22(水) 01:02:41.16ID:StAbR0Ko通常の使い方だとendlocal は必要なかった
.batが終わると endlocalなしでもbat内変数は消える
(setlocalは必要)
以上、今日の発見でした。
0224デフォルトの名無しさん
2015/07/22(水) 02:32:17.00ID:QnUh7Wvk0225デフォルトの名無しさん
2015/07/24(金) 19:24:15.05ID:dL+uOqe7shiftやメニューの頭に戻ってのループ処理、親への環境変数の継承くらいか
クリアするのが主目的で、別な値を再設定して別の目的で使用とかは混乱の元だからしない
0226デフォルトの名無しさん
2015/07/24(金) 20:24:24.41ID:+KpXt6+t0227デフォルトの名無しさん
2015/07/24(金) 22:44:30.28ID:YYoMYHtn今のやりかたは
DOS窓で右クリ→編集→すべて選択→エディタでctrl-V
もっと簡単にできる方法があれば教えて下さい。
0228デフォルトの名無しさん
2015/07/26(日) 18:02:41.27ID:YJ+DIjqNフォルダは除きたい
▼入力
dir /a-d /s /b
上記から、ファイルのパス部分を削除したい
for /f "delims=" %%a in ('dir /a-d /s /b') do @set x=%%a
変数に代入
ここから
ファイル名のみ取り出す方法がわかりません
なにか、いい案ないでしょうか
0229デフォルトの名無しさん
2015/07/26(日) 18:07:54.57ID:YJ+DIjqN|clip
>test.txt
0230デフォルトの名無しさん
2015/07/26(日) 18:38:20.15ID:9oxiKXd0ファイル名のみってのが、カレントディレクトリまでのパス部分を削除したい、
じゃなくて本当にファイル名の一覧だけでいいなら
for /r %%i in (.) do @dir /a-d /b "%%~i" 2>nul 1>>list.txt
みたいな
0231デフォルトの名無しさん
2015/07/26(日) 18:52:45.58ID:mOMjtGtufor /f "delims=" %%a in ('dir /a-d/s/b') do echo %%~nxa
0232デフォルトの名無しさん
2015/07/26(日) 19:59:32.63ID:YJ+DIjqNどちらの方法でも出来ました。
本当に助かりました。ありがとうございます!!
0233デフォルトの名無しさん
2015/07/27(月) 23:53:38.32ID:T6/asWdFありがとうございます。
前もって保存すると決まっている時は、clipなどを使えるのですが
いろいろやっていて、後で保存する必要が出た場合に簡単な方法があればと思いました。
長くかかる、再現しないなどでもう一度やれない場合です。
0234デフォルトの名無しさん
2015/07/28(火) 02:43:47.39ID:+/z/OnI4直接コマンドプロンプト使うんじゃなくてConEmuみたいなの使ってログ取りオプション有効にして作業するとか
0235デフォルトの名無しさん
2015/07/28(火) 03:19:58.31ID:tjBt9FXmDOS process LOG writer
http://www.vector.co.jp/soft/dl/win95/util/se144974.html
doslog.exeをパスの通っているところに置くか以下のbatと同じところに置いてbat実行
@echo off
set bat=%temp%\tmp.bat
set d=%date:/=%
set t=%time::=%
set t=%t: =0%
set dt=%d%_%t:~0,-3%
set log_file=/out %~dp0\doslog_%dt%.txt
echo @echo off>%bat%
echo :loop>>%bat%
echo set /p cmdline=%%cd%%^^^>>>%bat%
echo echo %%cmdline%%>>%bat%
echo %%cmdline%%>>%bat%
echo echo.>>%bat%
echo goto :loop>>%bat%
doslog cmd /k %bat%
del /q %bat%
0236デフォルトの名無しさん
2015/07/28(火) 03:33:41.10ID:tjBt9FXm@echo off
set bat=%temp%\tmp.bat
set d=%date:/=%
set t=%time::=%
set t=%t: =0%
set dt=%d%_%t:~0,-3%
set log_file=/out %~dp0\doslog_%dt%.txt
echo @echo off>%bat%
echo :loop>>%bat%
echo set cmdline=>>%bat%
echo set /p cmdline=%%cd%%^^^>>>%bat%
echo if not defined cmdline goto :loop>>%bat%
echo echo.%%cmdline%%>>%bat%
echo %%cmdline%%>>%bat%
echo echo.>>%bat%
echo goto :loop>>%bat%
doslog cmd /k %bat%
del /q %bat%
0237デフォルトの名無しさん
2015/07/29(水) 01:55:10.01ID:we/S8MTT処理したいファイルをD&Dでバッチファイルに放り込んで処理。
なんてのはよくあると思いますが、この「バッチファイルに特定のファイルを放り込む」
0238デフォルトの名無しさん
2015/07/29(水) 01:55:42.32ID:we/S8MTTこの、「特定のファイルをバッチファイルに放り込む」
なんて動作はどのように実現スレばいいのでしょうか?
0239デフォルトの名無しさん
2015/07/29(水) 02:41:38.74ID:Mm94swUw0240デフォルトの名無しさん
2015/07/29(水) 03:39:06.21ID:ObQZT/sFfoo.bat bar.txt
0241デフォルトの名無しさん
2015/07/29(水) 04:08:32.78ID:BtTeVh+H0242デフォルトの名無しさん
2015/07/29(水) 04:15:58.66ID:we/S8MTT0243デフォルトの名無しさん
2015/07/30(木) 01:06:22.86ID:OBXU0hZ1ファイルの中から特定の文字列を抜き出して、それらを結合するバッチを考えています。
凡例として以下のような内容のファイルから、特定文字列「hoge(.*,.*)」を全件抜き出し
それらを結合して最終的に「hoge(10,50)++hoge(90,110)++hoge(200,250)」といった文字列を
生成したいです。なお、#より右側はすべてコメント扱いです。
==========sample.txt
# サンプル情報、hoge()抽出
a = hoge(10,50).foo1(int).bar1()
b = hoge(90,110).hogehoge()
c = hoge(200,250).foo2(int).bar2()
a+b+c
==========
各種前提条件として、以下のようなものがあります
1. 対象文字列「hoge(.*,.*)」が出現する行数およびカラム位置は不定
2. 「hoge(.*,.*)」の()の中身は不定長
3. 「hoge(.*,.*)」が一行の中に出現するのは最大一回まで
4. 「hoge(.*,.*)」のさらに後に出てくる「()」の数は不定
5. 検索ファイルの中に「!」が出てくるか不明なため、極力遅延環境変数は使わない
findstrだと対象行丸々抽出になってしまい、「hoge(.*,.*)」の部分のみ抽出が
できないためforとset、callサブルーチンを組み合わせた文字列操作になるかと思います。
ただ「"hoge("がヒットしてから次に")"がヒットするまでの文字列を抜き出して変数に
格納する」という操作が、私なりに考えてみたもののわかりませんでした。
知恵をお貸しいただけないでしょうか。よろしくお願いします。
0244デフォルトの名無しさん
2015/07/30(木) 02:40:47.91ID:vXeGU9RJ1char毎に分解してやれば出来ないことはないだろうけどbatでやるには不向き
正規表現で検索置換できるWSHを使った方がいい
@if (0)==(0) echo off
rem cscript //nologo /e:jscript "%~f0" <sample.txt
for /f "delims=" %%i in ('cscript //nologo /e:jscript "%~f0"^<sample.txt') do set x=%%i
echo %x%
goto :eof
@end
var stdin=WScript.StdIn;
var s,x,r=[];
while(!stdin.AtEndOfStream) {
s = stdin.ReadLine().replace(/#.*$/,"");
x = s.match(/(?:^|[^_a-zA-Z])(hoge\(.*?\))/);
if(x) r.push(x[1]);
};
WScript.Echo(r.join("++"));
0245デフォルトの名無しさん
2015/07/31(金) 01:23:28.16ID:k8QkrhUeありがとうございます。
ConEmu、DOS process LOG writer 調べてみます。
0246243
2015/08/02(日) 10:42:10.95ID:KSbBJgW9遅くなってしまい申し訳ありません、レスありがとうございます。
ただ、個人的にはバッチのみを使って実現したいので、もう少し
足掻いてみようと思います。
0247デフォルトの名無しさん
2015/08/02(日) 17:51:00.45ID:vXJ+TZnTスクリプトも使わず正規表現な置換処理するのは無理があり過ぎる
0248デフォルトの名無しさん
2015/08/02(日) 19:33:22.43ID:KXoO9TBVまあ無駄な足掻きはやめたほうがいい
それと言語のコメントの判定はかなり厄介
#だって、 a="#"の場合はコメントじゃまずいだろうし
例えばエスケープを\とする場合、\#もコメントじゃなくなるだろうし
/* */で囲まれた中はコメントだとか、別の複数のコメントの記述があったり
複数行に跨ってコメントを許したりしてたら
もうそれこそ正規表現じゃ無理で簡単な言語解析のレベルになってしまう
0249デフォルトの名無しさん
2015/08/09(日) 10:30:39.27ID:SNWYDjIyフォルダを作成して、その中にbatファイルだけを入れて実行しています。
エラーレベルが!ERRORLEVEL!と表示されたり 9009と表示されます。
aaaaa.exeは実際にはありません。
setlocal enabledelayedexpansion
for /f %%i in ('dir /b /od *.*') do (
aaaaaa.exe
echo "エラーレベル" !ERRORLEVEL!
)
将来的には、フォルダ内のファイル数毎に、直前のコマンドの成否でバッチを書きたいです。
aaaaaa.exeがないので、0以外のエラーコードが返ってくると認識しています。
どこの書き方(理解)が間違っているか教えてください。
0250デフォルトの名無しさん
2015/08/09(日) 18:28:50.34ID:Wo1alMTPfor文に入る前のerrorlevel値が表示される
aaaaaa.exeの復帰値が反映されるのはfor文を抜けた後になる
コマンドプロンプトから実行してるのなら
初回実行時と2回目以降繰り返して実行した時の表示は上記の理由により変わってくる
0251デフォルトの名無しさん
2015/08/09(日) 18:45:19.83ID:Q+5Xwfkz終了コードの変化を比較するためnotepadを使用
バッチファイル自身がdirの結果に含まれるから最低1つはnotepadが開くと思う
@echo on
@rem 終了コードをリセット
cmd /C exit 0
for /f %%i in ('dir /b /od *.*') do call :SUB "%%i"
pause
exit
:SUB
@rem 存在しないアプリ
aaaaaa.exe
call echo %%ERRORLEVEL%%
@rem 存在するアプリ
start "" notepad.exe
call echo %%ERRORLEVEL%%
exit /B
0252デフォルトの名無しさん
2015/08/09(日) 18:45:50.76ID:Wo1alMTPあれ、遅延環境変数展開の場合なのか
それなら正常にaaaaaa.exeの復帰値が正常に表示されるはずなんだけど?
そうなる理由はわかりません、ごめん
ちなみに9009は「ファイルがありません」エラー
0253デフォルトの名無しさん
2015/08/09(日) 18:54:25.00ID:Q+5Xwfkz251のは空のnotepadが開くよ
対象を開くなら以下な感じで引数指定ね
start "" notepad.exe "%~1"
0254デフォルトの名無しさん
2015/08/10(月) 11:54:29.65ID:ma04BZuzレスありがとうございます。
>>251
スクリプト書いていただきありがとうございます。
:SUB側にcall echo %~1と書いて、ファイル名が取得できるのが確認できました。
知らないパラメータが多いですが、調べながら試しています。
助かりました。
0255デフォルトの名無しさん
2015/08/10(月) 23:31:07.37ID:hLG0BCKw例示した call echo %%環境変数%% は環境変数展開のバリエーションの一つであって、
call echo call引数の展開 のようなcallの使い方は適切ではないです
>>249の質問時に echo "エラーレベル" !ERRORLEVEL! がうまく展開されないとのことだったので
forのカッコから外に出した上で別の展開方法を例示しただけで通常であれば !環境変数! でいい
call引数の値をechoするだけなら echo %~1 で用が足りる
call echo や call set などの使用法はアンドキュメントだし無理に使う必要もないけど
興味があるならぐぐって調べてほしい
0256デフォルトの名無しさん
2015/08/10(月) 23:38:50.99ID:hLG0BCKw存在しない実行ファイルを指定しているのは通常ではないですよ、という意味ね
for /f %%i in ('dir /b /od *.*') do (
notepad.exe %%i
echo "エラーレベル" !ERRORLEVEL!
)
のように存在する実行ファイルを指定すれば問題なくERRORLEVEL取れるから
0257デフォルトの名無しさん
2015/08/11(火) 00:00:00.58ID:wwdlJScrコマンド検索パス上にあると思ったらなかったり、cd変わってて失敗するケースもあるだろうし
テストで意図的にやってるのは理解してますので
0258デフォルトの名無しさん
2015/08/11(火) 04:00:44.77ID:oWV7al3f0259デフォルトの名無しさん
2015/08/11(火) 08:08:17.57ID:kidrm6pf0260デフォルトの名無しさん
2015/08/11(火) 12:57:41.63ID:wwdlJScr結果に違いがあった点については、質問者がデバッグ中に質問内容以外のこともしたのだと予想してる
その点が気になるなら質問者から聞いてほしい
9009 はcmd.exeが返したerrorlevelであって、存在しない実行ファイルからの
errorlevelは返るはずもないから、文字列がそのまま返ってくる
echoコマンドの正しい処理だから別に不思議はないが、なにをやって違いが出たのかは質問者しか知りえない
おそらくはこんな感じで微調整しながらやってて、考えがまとまらないまま質問したと予想する
aaaaaa.exe
echo "エラーレベル" %ERRORLEVEL%
aaaaaa.exe
echo "エラーレベル" !ERRORLEVEL!
まったく同一のコマンドであれば相違点は出ないはずだが、異なるのであれば違うことをやっていたのは自明
カッコの中で処理してるからややこしくなってるのではなく、異なる処理をしたにもかかわらずひとつの質問に丸めてることが原因と予想する
簡単に言うと、環境変数の遅延展開を知る前と知った後とで違いをごっちゃにしているだけ、情報がすべて出てないだけ
0261デフォルトの名無しさん
2015/08/11(火) 23:25:41.78ID:84vLNAhyp = subprocess.Popen(cmdline, shell=True, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
や
my $pid = open3 $writer, $reader, 0, "$cmd"
の存在を知ったとき、あの時間はなんだだったのかと愕然とした。
0262デフォルトの名無しさん
2015/09/06(日) 00:59:23.17ID:YCgB583pここに記載されてるbatの振り分けキーワードを、
そのフォルダにあるファイルのファイル名末尾4桁(+拡張子)で自動取得し、その名前でフォルダを作成
そこに移動させるにはどうしたら良いでしょう?
xxxx0013.xxx(4桁列までの文字は数十種類、拡張子は数種、ファイル数は数千)
のファイルを4桁文字列前の文字列のフォルダに振り分けたいのです
よろしくお願いします
0263デフォルトの名無しさん
2015/09/06(日) 01:08:43.88ID:YCgB583p(4桁数列までの文字は数十種類(文字数様々)、拡張子は数種、ファイル数は数千)
よろしくおねがいします
0264デフォルトの名無しさん
2015/09/06(日) 01:35:39.75ID:LDb64vsE他に何か表示しておくといい情報ってありますか?
できればエラー発生行なんかがあるといいんですが見当たらないようです
:error
echo !!!!!!!!!!!!!!!!!!!!
echo エラー発生。ENTERで終了。
echo バッチファイル:[%~f0]
echo 引数:[%*]
echo ERRRORLEVEL:[%ERRORLEVEL%]
echo !!!!!!!!!!!!!!!!!!!!
pause>NUL
goto :eof
0265デフォルトの名無しさん
2015/09/06(日) 05:37:24.41ID:a7Z2ulaDfor /f "delims=" %%a in ('dir /a-d /b') do (
set "fnm=%%~na" & set "ext=%%~xa"
call :mv
set fnm= & set ext=
)
goto :eof
:mv
call set "dnm=%%fnm:~0,-4%%"
md "%dnm%"
move "%fnm%%ext%" "%dnm%"
set dnm=
goto :eof
0266デフォルトの名無しさん
2015/09/06(日) 06:36:51.11ID:YCgB583pありがとうございます!
最初の方の説明を今更間違ってることに気づいたのですが、最後の説明の方で組んでいただいたようで、ちゃんと希望道理の作動をしました
すごく助かりました
ありがとうございました
0267デフォルトの名無しさん
2015/09/06(日) 18:32:12.83ID:Ir/JiN9v> できればエラー発生行なんかがあるといいんですが見当たらないようです
エラー検出したところで、実行してるコマンドとか渡した引数の情報を適当な変数に入れて、エラールーチンで表示すれば?
まあ、バッチであまりここら辺に凝るのはおすすめしないけど
0268デフォルトの名無しさん
2015/09/10(木) 00:20:16.72ID:0fmkCSIWコマンド指定でまさかダブルクォートが「一組」しか使えんとは。
for /f %%i in ('"%hoge_exe%" ^| find "piyo"') do echo %%i
これすらパースできないときた。
(%hoge_exe% は半角空白込のフルパスだから「"」を抜けない)
こんなの Linux系なら楽勝なのに…
0269デフォルトの名無しさん
2015/09/10(木) 00:26:56.68ID:0fmkCSIWミラーリング以外なら robocopy じゃなくて xcopy で良いってことか?
意味が分からん。
0270デフォルトの名無しさん
2015/09/10(木) 00:54:28.51ID:v5ofxYj/うん
仕様がぼろぼろで旧式の骨董品
でも代わりがないから使うしかない
優秀な人は多いはずだが、みんな陽の当たるソフト担当になり、、
0271デフォルトの名無しさん
2015/09/10(木) 01:16:35.41ID:D73GyhwTコレはワビサビを愉しみながら使うモノだ。
0272デフォルトの名無しさん
2015/09/10(木) 01:26:44.22ID:rVL3fJUt確かに先頭と末尾に"があるとペアと認識するようだな
'call "%hoge_exe%" ^| find "piyo"'
'""%hoge_exe%" ^| find "piyo""'
のように書くと回避できた
0273デフォルトの名無しさん
2015/09/10(木) 03:08:07.86ID:SFXMkCA10274268
2015/09/10(木) 21:38:41.76ID:0fmkCSIWごめん。駄目だった。
setlocal
set imjpuexc_path=%CommonProgramFiles(x86)%\microsoft shared\IME14\IMEJP\imjpuexc.exe
for /f "delims=" %%i in ('""%imjpuexc_path%" getkanainput ^| find "a""') do (
echo %%i
)
endlocal
を実行すると…
\Common の使い方が誤っています。
C:\Users\Ore\Desktop>for /f "delims=" %i in ('""C:\Program Files (x86)\Common Files\microsoft shared\IME14\IMEJP\imjpuexc.exe" getkanainput ^| find "a""') do (
もう訳が分からない…閉じかっこがイカンのだろうか…
>>273
pushd . して実行ファイルのとこに cd /d して終わったら popd で回避した…
0275デフォルトの名無しさん
2015/09/10(木) 22:23:16.85ID:rVL3fJUt推測のとおり閉じ括弧だね
setとforの間に
set imjpuexc_path=%imjpuexc_path:)=^^)%
を入れるか、または
set imjpuexc_path=C:\Program Files ^^(x86^^)\Common Files\microsoft shared\IME14\IMEJP\imjpuexc.exe
とすれば通るだろうが、カレントパス変更の回避策の方が良いね
goto :eof
:run
for /f "usebackq delims=" %%i in (`%~fs1 getkanainput ^| find "a"`) do (echo %%i)
exit /b
0277268
2015/09/10(木) 23:32:42.46ID:0fmkCSIWありがとう。
Linux系だと「引用符の中は別世界」という了解があるのだが、バッチはそうではないみたいね…。
find の前のパイプにキャレットが要るのも、「特殊文字は空気が読めない」ってことでFAということか…。
バッチスクリプトにシェル変数の概念が無い、とこないだ知った初心者ですわ。
>>276
おお、そんな手があったとは。凄い。
参考にさせていただきます。
0278デフォルトの名無しさん
2015/09/11(金) 02:02:59.54ID:8iQOGvesfor %%I IN (%9 %8 %7 %6 %5 %4 %3 %2 %1) do (
)
0279デフォルトの名無しさん
2015/09/12(土) 17:25:17.07ID:PURjqYJ9start /b /wait command
オプションの順序で挙動が異なるぜみたいなこと外人が言ってますがどっちを使えばいいですか?
/waitが先だと間違いなんですかね?
0280デフォルトの名無しさん
2015/09/12(土) 22:56:10.69ID:cTPbZ0nl0281デフォルトの名無しさん
2015/09/12(土) 23:33:28.01ID:PURjqYJ9http://ss64.org/viewtopic.php?id=628
http://superuser.com/questions/355341/windows-start-wait-b-not-working
http://stackoverflow.com/questions/29925764/start-wait-b-not-exiting-program-when-there-is-an-error
とかを読んで思ったんです
「start /wait /b」で「すべての言語」にしてググると他にも海外フォーラムが引っかかりましたがどれが元ネタかはわかりません
これは「バグ」だとか「順序が違うと機能しない」みたいなことが書いてあるので、実際のところどうなんだろうと思いお尋ねしました。
0282デフォルトの名無しさん
2015/09/19(土) 18:16:48.17ID:rJvITlaVD:\デスクトップ\testフォルダ内にあるサブフォルダ全てからbackupフォルダを検索して削除したくて
C:\Users\ore>cd ../../
D:
cd D:\デスクトップ\test
for /R %%d in (backup) do rd /s /q "%%d"
として実行するとtestフォルダ内にcdというゴミファイルが出来てしまいます
ゴミファイルを作成しない様にするにはどうすれば良いでしょうか?
0283デフォルトの名無しさん
2015/09/19(土) 18:52:57.68ID:kEgCjcR8for /r %%d in (*desktop*) do rd /s /q "%%d"
if exist cd (del cd&&echo 0||echo 1) else (echo -1)
popd
0284デフォルトの名無しさん
2015/09/19(土) 20:11:26.20ID:rJvITlaVゴミが出なくなりました
ありがとうございます
0285デフォルトの名無しさん
2015/09/19(土) 21:24:39.32ID:qCXEI70o>>282でファイルcdが作られるとは思えんのだが?
0286デフォルトの名無しさん
2015/09/19(土) 21:31:23.75ID:CQxRgVL+1行目を良く見給へ
0287デフォルトの名無しさん
2015/09/19(土) 21:36:13.70ID:qCXEI70oあれそのままbatの中身だったんか?
おれはプロンプト表示かと思ってた
0288デフォルトの名無しさん
2015/09/19(土) 23:26:27.82ID:kEgCjcR8ぶっちゃけ作られるのはおかしい。
ただcdが作られるならcdではなくpushdで移動した方が良いし
また質問されるのもスレ汚ししたくないからcd削除で二重に提案した
それと*desktop*は間違えで*backup*が正しいんだけどうまくいってるんだろうか?
0289デフォルトの名無しさん
2015/09/20(日) 00:43:15.75ID:OUcPf0J5確かに、よくもまあうまく動かせたもんだ
C:\Users\ore>cd ../../
どこからのコピーかは知らんが、↑をそのままbatに書くような人間がねえ
0290デフォルトの名無しさん
2015/09/20(日) 00:46:26.96ID:PEdhYvSo一応それぞれの意味は調べてやったつもりではありましたのでちゃんと変更しました
あの中身は元々Cドライブで実行していたものなのですがちょっと個人理由でDドライブで実行したくなったのです
その際は元が
@echo off
cd C:\Users\ore\Desktop\test
for /R %%d in (backup) do rd /s /q "%%d"
で問題なかったので試行用にエコー消してDドライブに移動するのを追加しただけ、のつもりでした
お蔭さまで無事解決しましたしこれ以上はスレ汚しにもなるかと思われますのでご報告までに
改めてありがとうございました
0291デフォルトの名無しさん
2015/09/26(土) 20:40:09.22ID:sjK3MFI2バッチファイルから、PDF印刷するツールをつくりましたが、不具合があります。
解決方法を教えて頂けないでしょうか。
現象:
PDFファイルをコマンドラインから印刷する際、印刷中のファイルを非表示とする引数 /h を使用しているにも関わらず、
印刷中のファイルが画面上に数秒表示されてしまう。
発生条件:
ツールと関係なくユーザがAdbobe ReaderからPDFファイルを開き、ウインドウを最大化した上でAdobe Readerを終了。
そののち、ツールを使用してコマンドから印刷すると、引数 /h があるにも関わらず印刷中のファイルが画面上に数秒表示されてしまう。
なお、ウインドウの最大化を解除して上でAdobe Readerを一旦終了させ、そのあとにツールを使って印刷すると印刷対象ファイルは画面上に現れなくなる。
しかし毎回、ツールを使うユーザにこの操作をやってもらうのは負担なので、コマンドの書き方を変えることでバグが出ないようにしたい。
コマンド:
START ACRORD32.EXE /p /h /l %%f
・forを使用した繰り返し構文の中に上記のコマンドを入れており、%%fの変数は事前に変数に格納したファイルパスとファイル名となります
・各引数については、/p は印刷の実行、/h はウインドウの最小化、/lは印刷ダイアログの非表示
0292デフォルトの名無しさん
2015/09/26(土) 22:30:11.72ID:HzL2ulcE問題が分かってるのにこのスレに書き込むとは
初心者って怖いな
見たくないなら/min使え
0293デフォルトの名無しさん
2015/09/26(土) 23:03:22.25ID:vRcULbafこっちの環境はAcrobat Readerが最新じゃないので多少違うかもしれないが、
/pが指定されるとどうも読み込み完了までは表示されちゃうようだ
また一旦文書を読み込むと前回最大化だったのが標準に戻る
だったら事前に読み込んで最大化を解除してしまえってことで
start acrord32 /h xxx.pdf
start acrord32 /p /h xxx.pdf
::と2度呼び出せば表示されない
::その後、印刷終了を3秒待って
ping -n 3 localhost
::強制終了
taskkill /f /fi "windowtitle eq xxx.pdf*"
なお、印刷終了はbatで判定可能(msinfo32とか)だろうから調べてくれ
あと、/lオプションを付けると、こちらでは印刷終了後もacrord32.exeのプロセスは残ったままになる
(タスクバーにも何処にも表示されてないけど、タスクマネージャで見るとプロセスは生きてる)
taskkill /f /fi "imagename eq acrord32.exe"
で殺せるけど
0294デフォルトの名無しさん
2015/09/26(土) 23:03:27.42ID:sjK3MFI2そうですね、バッチというよりはAdobeの問題なのでしょうが、コマンドの書き方で問題を解決したく、質問しました。
/minを試してみます。
どうもありがとうございました。
0295デフォルトの名無しさん
2015/09/27(日) 00:50:27.93ID:fyu1n2iR2回呼び出してやれば最大化が解除できたのですか?
さっそく試してみます。
どうもありがとうございます。
0296デフォルトの名無しさん
2015/09/27(日) 02:06:33.21ID:NGGi3SIL使い方はお好みで。
ニューススレッドを追加! RSS配信の記事を一覧で表示!
http://fluid.twolineprj.com/twoline/entry
ご意見をぜひ投稿してください。
0297デフォルトの名無しさん
2015/09/27(日) 19:51:17.88ID:0MtmseWf/minを試してみたのですが、Adobe Reader に対しては有効になりませんでした。
なおためしに、notepadやexcelに対して/minを使ってみた場合には、普通に最小化して起動してくれました。
なぜAdobeに対してはだめなのでしょうか…
>>293
2回呼び出しをやってみたのですが、最大化の解除はできませんでした。
Readerのバージョンが違うからだと思いますが…
0298デフォルトの名無しさん
2015/09/27(日) 20:52:07.03ID:cWKfNT9Fそのソフトを買ったメーカーにそれぞれ聞け
0299デフォルトの名無しさん
2015/09/27(日) 20:52:50.94ID:cWKfNT9Fごめんなさい、そのソフトのメーカーに聞け、の誤りです
0300デフォルトの名無しさん
2015/09/27(日) 23:56:06.69ID:S+VayHQkあれダメだった?
初回読み込み時に表示されるの?それとも2回目の印刷時に表示されるの?
印刷時だったらもしかしたら初回読み込み時起動処理中だったからかもしれない
acrord32.exeは起動すると2つのプロセスが存在する
多分1つは受付みたいな役割りをしていて各pdfを開くプロセスの管理をしていると思われる
状態とウィンドウタイトルの変化は
ProcessID=xxxx runninng OleMainThreadWndName
↓
ProcessID=xxxx runninng OleMainThreadWndName
ProcessID=yyyy running N/A
↓
ProcessID=xxxx runninng N/A
ProcessID=yyyy running xxx.pdf(SECURED) - Adobe Reader
なので最初の1プロセスのみの処理中に次の起動がくるとダメなのかもしれないので
ウェイトを入れてみるとかやってみて
なお、tasklistで状態を表示するようにすると何故か文書が表示されちゃったので
起動完了をbatで監視するのはうまくいかないかも知れない
それと実際の読み込み(印刷もそうだが)は上のProcessID=yyyyのプロセスの方なので
終了しても最大化は解除はされない(この部分は誤解を与えたかもしれない)
0301300
2015/09/28(月) 00:02:40.56ID:pVReont5こっちの検証環境はXPなので32bit環境です
0302デフォルトの名無しさん
2015/09/28(月) 21:17:36.12ID:XtRLoMNV長文失礼いたします
rmdirコマンドで削除したフォルダの成功、失敗の判定として以下の処理を実行しています。
if exist フォルダ名 (
echo 失敗
) else (
echo 成功
)
rmdirコマンド実行時に指定したフォルダを開いていない状態だと問題なく成功とでますが、開いている状態だと指定したフォルダは削除されるのにも関わらず、失敗と出力されます。
上記、判定処理の前にTIMEOUTコマンドで1秒ウェイトを入れると問題なく成功と出力されます。
私の推測では、rmdirコマンドは、開いているフォルダを閉じてから削除コマンドが実行されているための遅延と考えているのですが、この原因についてご存知の方ご教授頂ければ幸いです。
よろしくお願い致します。
0303デフォルトの名無しさん
2015/09/28(月) 21:52:33.44ID:pVReont5他がファイル/フォルダをオープンしていると、削除が拒否されずに保留されることがある
これは他プログラムがどのようにオープンしているのかによって違ってくる
FILE_SHARE_DELETE(削除共有)フラグ付きでオープンしているものを削除しようとすると
エラーにはならずに保留される(クローズ後に削除される)
0304デフォルトの名無しさん
2015/09/28(月) 22:33:43.19ID:ynPwQZO2つかerrorlevel使えば?
0305デフォルトの名無しさん
2015/09/28(月) 22:37:43.41ID:ywrXX2XIご回答ありがとうございます。
削除処理の遅延により判定処理に、削除が間に合わず削除失敗と出力されてしまう可能性があるようですね。
この場合、削除処理が終了するまで次の判定処理に進まないような処理が必要になると思うのですが、いい方法などありましたらご教授お願い致します。
0306デフォルトの名無しさん
2015/09/28(月) 22:42:03.73ID:ywrXX2XIご回答ありがとうございます。
削除コマンドrmdirでは、失敗でもERRORLEVELにエラーは設定されないようなので、削除指定したフォルダの有無で判定をしています。
0307デフォルトの名無しさん
2015/09/29(火) 00:01:30.08ID:bgSeuQIxなら、逆の発想で dir で行けば?
0308デフォルトの名無しさん
2015/09/29(火) 00:39:57.93ID:8SFmbeyJrmdir "フォルダ名" 2>&1|find /V "" && echo 失敗
「ERRORLEVELを返さないコマンドのエラー判定」あたり参考
0309デフォルトの名無しさん
2015/09/29(火) 00:43:01.28ID:8SFmbeyJfind /V "" && echo 失敗
0310デフォルトの名無しさん
2015/09/29(火) 00:49:47.95ID:8SFmbeyJrmdir "フォルダ名" 2>&1|find /V "" && echo 失敗
0311デフォルトの名無しさん
2015/09/29(火) 01:06:12.17ID:bgSeuQIxいくつか理由はあるが、とてもそれが有用なノウハウだとは思えない。
0312デフォルトの名無しさん
2015/09/30(水) 21:24:53.14ID:lqNGdTXzご助言ありがとうございます。
原因特定できず、とりあえずウェイトを設定して経過観測することにしました。
また続けてご質問があります。
rmdirコマンドで削除するフォルダの中にあるフォルダやファイルが開いているとエラーになりますが、これをエラーとせず削除指定したフォルダを消すためにはどうしたら良いでしょうか?
個人的には、rmdirコマンド実行前に、exploerをtaskkillで終了させ再起動させる処理が案としてありますが、並行して何か処理が走る可能性を考慮してなるべく実行中のタスクを落とさずrmdirコマンドを正常終了させたいです。
よろしくお願いします。
0313デフォルトの名無しさん
2015/09/30(水) 21:32:01.35ID:RUmQvCwV裏では何が走ってるのか判らないので諦めたほうがいい
例えば、インデックスサービス、ウィルススキャン、IMEなど
0314デフォルトの名無しさん
2015/09/30(水) 22:01:54.29ID:SiaxX88C並行処理には色々あるから、どういうシチュエーションを想定しているかが分からない以上答えようが無い。
一般論としては >>313 の言う通り。
0315デフォルトの名無しさん
2015/09/30(水) 22:19:02.70ID:lqNGdTXzご回答ありがとうございます。
裏で走る処理の想定は、完全に把握することはできない状態で、313さんが仰る通りです。
今回は、諦めて削除対象が掴まれていたらエラーにする処理にします。
0316デフォルトの名無しさん
2015/09/30(水) 22:31:46.85ID:lqNGdTXzWindowsサーバー2008 でバッチファイルを直叩きすると必ず管理者権限で実行されると耳にしたので、調べているものの参考文献が見つかりません。
実際にWindowsサーバー2008の環境でバッチを叩く権限が私にはなく、動作確認ができない状態のためご存知の方いらっしゃいましたら、参考URLやご助言頂ければ幸いです。
よろしくお願い致します。
0317デフォルトの名無しさん
2015/09/30(水) 22:45:30.90ID:lqNGdTXz自己解決できました。
管理者権限は、UAC設定によりバッチ実行時に管理者以外のユーザーが実行した場合は、昇格ダイアログや管理者ユーザーのパスワード入力ダイアログが表示された後に管理者権限で実行されるようです。
0318デフォルトの名無しさん
2015/10/01(木) 15:59:29.84ID:feh5z6YX作成日が新しい順で10件だけ表示する、という方法はありますか?
0319デフォルトの名無しさん
2015/10/01(木) 22:27:35.44ID:GOCfcoessetlocal
set target_path=
set num=0
for /f "usebackq tokens=*" %%a in (`dir /a:-d /o-d /b "%target_path%"`) do (
call :main "%%~a"||(goto :eol)
)
:eol
endlocal
goto :eof
:main
if "%num%"=="10" (exit /b 1)
echo %~1
set /a num+=1
exit /b 0
0320デフォルトの名無しさん
2015/10/01(木) 22:50:13.28ID:SNj2dVz3作成日と言ってるから、
dir /a-d /o-d /tc /b
でしょう
あとファイル名に&や^なんかが使われてると・・・
0321320
2015/10/02(金) 00:42:34.05ID:CZzG8B2R@echo off
if "%~1" equ "" (set folder=.) else (set folder="%~1")
if "%~2" equ "" (set n=10) else set /a n=%2
if %n% leq 0 set n=99999
for /f %%i in ('dir /a-d /o-d /tc /b %folder%^|find /v /c ""') do set /a n=%%i-%n%
if %n% lss 0 set n=0
dir /a-d /o-d /tc /b %folder%|sort /+99999|more +%n%|sort /+99999
なお、
dir /a-d /o-d /tc /b %folder%
のかわりに
dir /a-d /o-d /tc %folder%|findstr "^[0-9]"
とすればdirの出力形式で表示される
出力をフルパスで出す方法はちょっとわからない(for文で%~fIとか使うことは可能だがダメ文字が・・・)
0322318
2015/10/02(金) 01:12:11.43ID:2daHSNuhありがとうございます。
詳細なソート方法は分かったんですが表示するファイル数を限定出来なかったのでとても助かります。
0323デフォルトの名無しさん
2015/10/02(金) 01:46:43.29ID:xI4RFHCVdir /a-d /o-d /b | head -10
dir /ad /od /b |tail -10
など
0324デフォルトの名無しさん
2015/10/02(金) 04:08:29.67ID:ywG60DzMsetlocal
set target_path=.
set line=0
set maxline=10
for /f "usebackq tokens=*" %%a in (`dir /a:-d /o:-d /t:c /b "%target_path%"`) do (
call :main "%%~a"||(goto :eol)
)
:eol
endlocal
goto :eof
:main
if "%line%"=="%maxline%" (exit /b 1)
echo "%~1"
set /a line+=1
exit /b 0
0325デフォルトの名無しさん
2015/10/02(金) 13:30:43.97ID:Q66dAmlyポイントを教えて下さい。
今は次のいい加減なチェック方法しています、set で環境変数に
FPS_BROWSER_APP_PROFILE_STRING (←Windows10)
FPS_BROWSER_USER_PROFILE_STRING (←Windows10)
SESSIONNAME
の3つor1つが無いのが管理者権限で実行されているバッチ
これだと、何かのはずみで自前で設定しちゃう(ってる)と明らかにダメな判定基準なので
何かもっと頼れる判断方法を知りたいのです。
Windows10 と Windows7 です。
0326デフォルトの名無しさん
2015/10/02(金) 16:31:13.60ID:CZzG8B2R引数で渡さずに環境変数で渡すようにしないと
a^b.txt
0327デフォルトの名無しさん
2015/10/02(金) 17:03:45.75ID:2DuVHDsawhoami /GROUPS|find "High" >NUL||(echo バッチファイル自身が管理者権限で実行されていません) && goto RUNAS
とか (アンド記号は半角で)
判定はMandatory Labelから
0328デフォルトの名無しさん
2015/10/02(金) 17:34:44.56ID:c57yEoAI@echo off
set folder=.
set /a len=10
for /f "usebackq tokens=1* delims=:" %%a in (`dir /a:-d /o:-d /t:c /b "%folder%" ^| findstr /n "^"`) do (
if %%a GTR %len% (goto :eof) else echo %%~f$folder:b
)
0329デフォルトの名無しさん
2015/10/02(金) 17:39:55.07ID:0pgpzEB+ありがとうございました、スッキリうまくいきました。
勉強になります。
0330デフォルトの名無しさん
2015/10/02(金) 18:54:09.58ID:2DuVHDsahttp://scripting.cocolog-nifty.com/blog/2010/01/post-f725.html
この辺を参考にしただけ
管理者権限か否かの判定のみなら>>327で用は足りると思うけど、念のため追記
0331デフォルトの名無しさん
2015/10/02(金) 20:04:45.82ID:0pgpzEB+重ねてありがとうございます。
その記事の次の
waitfor hoge /t 秒
もポイント高かったです。
timeout 使うとエラーになって用をなさないことが時々あったので
ping を使ってたんですが waitfor という方法があったとは。
『コマンドラインから、UACダイアログを出さずに「管理者として実行」する。』
などでの SchTasks も何かもう目からウロコ。
0332デフォルトの名無しさん
2015/10/05(月) 19:28:34.57ID:SpCxBh4Z〜いろんな作業〜
POPD
というバッチで、たまにカレントが作業フォルダのまま終了してしまうことがあります。
もちろん、作業自体に強制終了、GOTO :EOF等はしていません。
終了後POPDを手入力しても戻らないのでシェル自身が忘れてしまっているようです
最初に%CD%を保管しておいて、POPD後戻っていなかったら強制的にCDで戻るように
するようにしようかと思っているのですが、
もう少しスマートな方法とかあります?
0333デフォルトの名無しさん
2015/10/05(月) 21:41:49.86ID:bTT+ZGiBホントに?
0334デフォルトの名無しさん
2015/10/06(火) 02:00:18.79ID:mXRqVUnfecho on
して本当に popd してるのか確認したのか?
0335デフォルトの名無しさん
2015/10/06(火) 02:23:23.79ID:QJFP7AtVなんか変なことしてるところがあると思うよ
それを見つけた方がいいけど
別の環境保存方法ということでは
setlocal〜endlocalで挟む
それが別のbatであるなら、callで呼ばずにstart /b /waitで呼ぶ
とかかな
0336デフォルトの名無しさん
2015/10/06(火) 03:03:04.87ID:QJFP7AtVcall|call hoge.bat
0337デフォルトの名無しさん
2015/10/07(水) 19:03:48.86ID:nsjlsK3xpowershellのスクリプトでログオンて出来ますかね?
ググったのですが参考になる情報を見つけられませんでした。
ヒントを教えて頂けないでしょうか。
0338デフォルトの名無しさん
2015/10/07(水) 19:43:48.86ID:RUI9/d0r0339デフォルトの名無しさん
2015/10/24(土) 10:57:16.17ID:p7rCtkQ8バッチからIME辞書登録を行いたいのですが、方法はありますでしょうか。
フリーソフト等を使わず、windowsの標準機能のみで行う方法がありましたらご教示ください。
0340デフォルトの名無しさん
2015/10/24(土) 11:13:55.98ID:fZHdxrwJこの操作手順を自動化するにはAutoHotKey的なツールを使うしかない
無理やりやるならVBSでSendなんちゃら使いまくるくらいか
複数の単語を一括で登録するには
https://support.microsoft.com/ja-jp/kb/881925
0341デフォルトの名無しさん
2015/10/24(土) 22:36:15.42ID:p7rCtkQ8そのsendなんちゃらってなんでしょうか。
ヒント頂けないでしょうか。
お手数ですいません…
0342デフォルトの名無しさん
2015/10/24(土) 23:39:00.99ID:mJxFzgC6SendKeysのことだと思うけど…
たぶんあなたには無理だと思うから、
諦めるか条件を緩める手段をとったほうが良いかと
0343デフォルトの名無しさん
2015/10/25(日) 21:17:07.24ID:CKwhkT150344デフォルトの名無しさん
2015/10/26(月) 00:24:08.25ID:zhu5kfAS0345デフォルトの名無しさん
2015/10/26(月) 01:43:05.06ID:kwhrPFGj使用目的を明らかにしてくれれば別の解決方法もアドバイスできるかもしれないのに
0346デフォルトの名無しさん
2015/10/26(月) 10:35:38.89ID:g04VwT0z0347デフォルトの名無しさん
2015/10/26(月) 10:44:57.57ID:+1zm0ysr例えば(会社等で)使用する全ての端末に同じ単語を辞書登録させたいとかそんな感じだろうか
そういったことであれば自分で辞書ファイルを作ってしまえばいいんじゃないかね
その辞書を使用する登録はimjpuexcでできるから、これならバッチファイルも一緒に作って
セットで各端末に配布して実行するだけまで省力化できそうだが
0348デフォルトの名無しさん
2015/11/24(火) 00:49:21.44ID:K+m1Fn13ドラッグアンドドロップしたディレクトリ配下を見ていき
ディレクトリ内がファイルだけの場合はそのディレクトリをその場所に圧縮し、圧縮後に削除
という処理を作りたいのですが
ディレクトリ内がファイルだけか?という判定がうまくいかず
DIRで/a:dとしてもカレントがカウントされてERRORLEVELが常に0になってしまい
助けていただけませんか
0349デフォルトの名無しさん
2015/11/24(火) 01:57:14.13ID:E5eNrkbC0350デフォルトの名無しさん
2015/11/24(火) 03:42:46.10ID:ZLe33KjQset err=0
for /f %%a in ('dir /ad /b') do set err=1
set err
set err=
0351デフォルトの名無しさん
2015/11/24(火) 04:04:14.14ID:DOEe32Zv何がしたいのかいまいちよく分からないんだが、
指定されたdirがファイルだけのときは、その親dirに圧縮ファイルを作成後サブdir削除ってこと?
(それともサブdir、さらにその下のサブdirと次々と潜っていくってこと?)
分からないので、直接質問されたことにだけ
1)dirかどうか
if exist "%~1\" echo **
1)ファイルがあるかどうか
dir /a-d "%~1" >nul 2>&1 || echo **nofile**
2)サブdirがあるかどうか
set flag=no
for /d %%i in ("%~1\*") do set flag=yes
又は
for /f %%i in (''dir /b /ad "%~1" 2^>nul') do set flag=yes
0352デフォルトの名無しさん
2015/11/24(火) 19:52:42.07ID:K+m1Fn13ありがとうございます。言葉が足らず申し訳ありません
サブDirの下に潜っていき、その潜った先がファイルだけの構成なら
そいつを圧縮するということを行いたいのです
フォルダ構造を保ちながら、ファイルがまとまっているフォルダだけ圧縮していく
ということを実現しようとしています。
0353デフォルトの名無しさん
2015/11/24(火) 23:26:24.37ID:uLTusmQs0354デフォルトの名無しさん
2015/11/26(木) 21:08:59.38ID:Xx7BS4XNInfo-ZIP の zip.exe を使用した例
cd /d
0355デフォルトの名無しさん
2015/11/26(木) 21:11:45.12ID:Xx7BS4XNInfo-ZIP の zip.exe を使用した例
cd /d "%~f1"
for /r %%i in (.) do set "n=%%~nxi" & pushd "%%i" & call :x & popd
goto :eof
:x
for /d %%j in (*) do goto :eof
zip "..\%n%.zip" *
if errorlevel 1 goto :eof
cd ..
rd /s /q "%n%"
0356デフォルトの名無しさん
2015/12/02(水) 18:49:05.46ID:uZhzBB52virtualbox(PC/ATエミュ)にms-dos6.22(english)をインストールしました。
起動後にECHO %PATH%で環境変数PATHを表示させようとしましたが、
%PATH% とタイプした文字が置換されずに帰ってきてしまいます。
自分で環境変数を設定しても同様です。
---------------------------------
C:\ SET VAL=OK
C:\SET
(中略)
VAL=OK <--セットされている
C:\ECHO %VAL%
%VAL% <--置換されない
---------------------------------
これって仕様でしょうか。環境変数を参照するにはどうしたらいいでしょうか?
0357デフォルトの名無しさん
2015/12/02(水) 20:00:00.33ID:G6CksgA0ダブルクォーテーションで囲めば、どうなる?
0358デフォルトの名無しさん
2015/12/02(水) 21:32:16.52ID:uZhzBB52同じです。
C:\ECHO "%VAL%"
"%VAL%"
0359356
2015/12/02(水) 23:38:35.70ID:uZhzBB52COMMAND.COMの仕様です。
バッチファイルに記述して実行すると置換されます。
WIN9xあたりまではそういう仕様かもしれません。
0360デフォルトの名無しさん
2015/12/02(水) 23:45:06.29ID:l4g7T0Facmd.exeになってからコマンドライン直書きでも展開されるようになったような
0361デフォルトの名無しさん
2015/12/03(木) 06:14:24.04ID:rFz6rQx10362デフォルトの名無しさん
2015/12/03(木) 23:14:20.69ID:351ZeN4c記憶がごっちゃになってもうどっちがどっちだったかわからん
0363デフォルトの名無しさん
2015/12/04(金) 02:45:09.97ID:K5fLtIaiそうだったっけ?
全然そんな記憶無いんで、普通に直打ちで変数展開されてたと思う
0364デフォルトの名無しさん
2015/12/04(金) 04:22:29.66ID:p/GS1A930365デフォルトの名無しさん
2015/12/07(月) 06:23:17.16ID:DQwTbvQ5プログラミング的というかバッチ的なセオリーというのがもしあれば教えて下さい
失敗した場合
・ループ goto :LOOP
・リトライ上限回数による終了 exit /b 1
成功した場合
・途中終了によりリスタート exit /b 2
・正常終了 exit /b 0
とあってそれぞれどのような順でも出来ます
頻度の高い順や短い処理の順にした方が余計な判定をしなくて済みますが
大差ない場合等はその順序に何かセオリーがあったりしますか?
0366デフォルトの名無しさん
2015/12/09(水) 01:33:29.59ID:DMnL3no70367デフォルトの名無しさん
2015/12/09(水) 03:34:34.37ID:xJXhqdvpどういう指定?拡張子?for /r で出来ると思う
0368デフォルトの名無しさん
2015/12/10(木) 03:14:00.36ID:VBAMhbiJ"20000101000000" "20040404_044444"とか"2000/01/01_00:00.00"とか引数の形式はお任せ
引数のエラーチェックは無しでOK。閏日は必要。閏秒は無視
0369デフォルトの名無しさん
2015/12/14(月) 22:34:22.40ID:A58wbYtQrem call :a1 yyyymmddhhmmss yyyymmddhhmmss result
call :a1 19700101000000 20380119031407 s
echo %s%
pause
goto :eof
:a1
setlocal
set /a b=10000,c=100
call :a2 1 %1 & call :a2 2 %2
call :a3 y1 m1 d1 d1 & call :a3 y2 m2 d2 d2
set /a s1+=h1*3600+n1*60,s2+=h2*3600+n2*60,s3=(d2-d1)*86400-s1+s2
endlocal & set /a %3=%s3%
goto :eof
:a2
set a=%2
set /a y%1=1%a:~0,4%-b,m%1= 1%a:~4,2%-c,d%1= 1%a:~6,2%-c
set /a h%1=1%a:~8,2%-c,n%1=1%a:~10,2%-c,s%1=1%a:~12,2%-c
goto :eof
:a3
set /a y=%1,m=%2,d=%3,m+=(y-1)*12,d+=(m-1)*31
set /a a=m+9,d+=a/48-a/1200+a/4800,b=12
set /a %4=d-a/b*3-(m+7)/b-(m+5)/b-(m+2)/b-m/b
0370デフォルトの名無しさん
2015/12/15(火) 00:46:59.16ID:o42ChFzI@echo off
rem call :a4 yyyymmddhhmmss +sec year month day hour minute second
call :a4 19700101000000 2147483647 y m d h n s
echo %y% %m% %d% %h% %n% %s%
pause
goto :eof
:a4
setlocal
set /a b=10000,c=100,s2=%2
call :a2 1 %1
call :a3 y1 m1 d1 d1
set /a s1+=h1*3600+n1*60,d3=d1+(s1+s2)/86400,s3=(s1+s2)%%86400
set /a h3=s3/3600,n3=s3/60%%60,s3%%=60
call :a5 d3 y3 m3 d3
endlocal & set /a %3=%y3%,%4=%m3%,%5=%d3%,%6=%h3%,%7=%n3%,%8=%s3%
goto :eof
:a5
set /a d=%1,a=305,b=365,c=146097,e=(d+a)/c,f=(d+1+a)/c-e,d-=e
set /a d+=(d-f+a)/36524,c=1461, e=(d+a)/c,f=(d+1+a)/c-e,d-=e
set /a d+=(d-f+a)/b*3+(d+244)/b+(d+183)/b+(d+91)/b+(d+30)/b-1
set /a %2=1+d/372,%3=1+d/31%%12,%4=1+d%%31
goto :eof
rem ここに >>369 の :a2 と :a3 をコピペ
0371デフォルトの名無しさん
2015/12/15(火) 04:37:32.89ID:DyLWSAr/こんなに短く書けるものなのですね
ifやらforやら使って閏日判定して足したり最初から全部秒に直して計算してたりとアホな事してました
とても参考になりました。ありがとうございました
:a3 2行目 a=m+9 が良く分かりません。その後は閏日を追加する計算で3行目が月31日計算の補正だと思うのですが
暇があって気が向いた時で良いですので :a3,2行目と3行目の解説をお願いしたいです
0372デフォルトの名無しさん
2015/12/15(火) 05:13:05.16ID:DyLWSAr/48ヶ月(4年)毎に+1日,1200ヶ月(100年)毎に-1日(4年毎の打ち消し),4800ヶ月(400年)毎に+1日
なるほどです
0373デフォルトの名無しさん
2015/12/16(水) 20:07:03.65ID:fy5f41q6rem this.bat yyyymmddhhmmss yyyymmddhhmmss VerName
setlocal
call :SUB 1 %~1
call :SUB 2 %~2
set /a s=(d2-d1)*86400+(h2*3600+n2*60+s2)-(h1*3600+n1*60+s1)
endlocal & echo %s% & if not "%~3"=="" set %~3=%s%
exit /b
:SUB
set a=%2
call set /a y%1=1%a:~0,4%-10000,m%1=1%a:~4,2%-100,d%1=1%a:~6,2%-100,h%1=1%a:~8,2%-100,n%1=1%a:~10,2%-100,s%1=1%a:~12,2%-100
call set /a m%1+=(y%1-1)*12
call set /a d%1+=(m%1-1)*31+(m%1+9)/48-(m%1+9)/1200+(m%1+9)/4800-((m%1+9)/12)*3-(m%1+7)/12-(m%1+5)/12-(m%1+2)/12-m%1/12
exit /b
rem消してcallを&してcall set /aを,で1行に纏めたら10行になるな
似たようなの書いた事あるけど俺もifとfor駆使して50行くらいあったわ
ロジック大事だな。369みたいにスマートに書ける頭良い奴羨まし
>>372
>a=m+9 は3月起点にする為
それが分かるなら分かりそうなものだが3行目もそれと同じ
3月なら-3日、15ヶ月なら-6、同じように5月、7、10、12と西向く侍越えてたら日を引いてる
0374デフォルトの名無しさん
2015/12/17(木) 09:52:29.59ID:pa9hyiSFフェアフィールドの公式でもっと簡略化できる
:a3
set /a a=(12-%2)/10,y=%1-a,m=%2+a*12
set /a %4=365*(y-1)+y/4-y/100+y/400+306*(m+1)/10-63+%3
逆算では>>370の:a5の代替となる公式は知らないなあ
0375デフォルトの名無しさん
2015/12/17(木) 14:48:37.51ID:ZSvcUJP0:a3
set n= 00 31 61 92122153184214245275306337
set /a y=%1,m=%2,d=%3,y+=(%2+9)/12-1,m=(%2+9)%%12*3
call set /a %4=y*365+(y/4)-(y/100)+(y/400)+%%n:~%m%,3%%+d-1-306
goto :eof
0376デフォルトの名無しさん
2015/12/17(木) 22:03:19.42ID:6xd5GL4Z>>375
名人芸みたい
set /a で , を使えるのは知らなかった
0377デフォルトの名無しさん
2015/12/18(金) 20:41:02.17ID:5v+P6SwD理解するのに少し時間がかかったけどひとつ賢くなりました。ありがとう
0378デフォルトの名無しさん
2015/12/19(土) 23:36:20.61ID:hIm+VLiM>>369は差分を取ってるだけだから定数部分は要らない
簡略化したいなら(y-1)はyでいいし、-63も不要だな
でもそうすると>>370で使えなくなるけど
0379デフォルトの名無しさん
2015/12/20(日) 01:39:29.37ID:ZqBWpEZfcall :SUB 1 %~1 & call :SUB 2 %~2
set /a s=(d2-d1)*86400+(h2-h1)*3600+(n2-n1)*60+s2-s1
endlocal & echo %s% & if not "%~3"=="" set %~3=%s%
exit /b
:SUB
set a=%2
set /a m=1%a:~4,2%-100, y=1%a:~0,4%-10000-(12-m)/10, m=m+(12-m)/10*12
call set /a d%1=1%a:~6,2%-100, h%1=1%a:~8,2%-100, n%1=1%a:~10,2%-100, s%1=1%a:~12,2%-100
call set /a d%1+=365*y+y/4-y/100+y/400+306*(m+1)/10
0380デフォルトの名無しさん
2015/12/21(月) 08:37:29.96ID:h62kjpL5通日から年月日求める式の解説してるサイトとかあったら教えて欲しい
0381デフォルトの名無しさん
2015/12/21(月) 09:39:16.04ID:M1iYKpBucall :SUB 1 %~1 & call :SUB 2 %~2
set /a s=(d2-d1)*86400+(h2-h1)*3600+(n2-n1)*60+s2-s1
endlocal & echo %s% & (if not "%~3"=="" set %~3=%s%) & exit /b
:SUB
set a=%2 & set /a b=!a:~0,8!, c=1!a:~8!-1000000, h%1=c/10000
set /a m=b/100%%100, e=(12-m)/10, m+=e*12, y=b/10000-e, n%1=c/100%%100
set /a s%1=c%%100, d%1=b%%100+365*y+y/4-y/100+y/400+306*(m+1)/10
goto :eof
0382デフォルトの名無しさん
2015/12/21(月) 10:07:38.96ID:M1iYKpBu> eは0年3月から400年周期が何回あるか?で合ってる?
dは1年1月1日からの日数
1個目のeは400年3月1日から400年周期の3月1日の日数
1個目のfはdの最終日の翌日が400年周期の3月1日だったら1,それ以外は0
2個目のe,fは同様に4年周期での値
> 通日から年月日求める式の解説してるサイトとかあったら教えて欲しい
私も知りたい
0383デフォルトの名無しさん
2015/12/21(月) 10:32:14.51ID:M1iYKpBu2chは2種類あるんで、>>を付けないと番号が変わることがある
0384デフォルトの名無しさん
2015/12/21(月) 16:40:51.02ID:xEP90Lc1d=1年1月0日を基点とした日数
d+1=1年1月1日を基点とした日数
d+305=0年3月1日からの日数
146097=400年+97(うるう日)
36524=100年+24(うるう日)
1461=4年+1(うるう日)
003 004 005 006 007 008 009 010 011 012 001 002 (月)
031 030 031 030 031 031 030 031 030 031 031 028 (日数)
031 061 092 122 153 184 214 245 275 306 337 (積算日数)
030 060 091 121 152 183 213 244 274 305 336 (積算日数-1)
372=365+(305>)*3+(244>)+(183>)+(91>)+(30>)
0385デフォルトの名無しさん
2015/12/21(月) 16:48:15.00ID:xEP90Lc1↓
d+1+305=0年3月1日からの日数
に訂正
0386デフォルトの名無しさん
2015/12/21(月) 16:55:52.04ID:xEP90Lc1これは明らかに間違ってるんで削除
0387デフォルトの名無しさん
2015/12/21(月) 17:00:54.37ID:M1iYKpBuよく考えるとシフト演算式の>>の右側の数値が勝手に変わったりするんだな
やだなあ
0388デフォルトの名無しさん
2015/12/22(火) 23:27:20.70ID:GbSBVwIU俺も
誰か概要でも良いので解説お願いします
0389デフォルトの名無しさん
2015/12/23(水) 11:08:49.70ID:aiQM95lLrem input.txtには3行書かれている
FOR /F
0390デフォルトの名無しさん
2015/12/23(水) 12:48:25.38ID:dDv8KSpn躓いてるのは、
30,91,183,244,305,372の数値の意味だろ?
>>384で解説されてるじゃん
0391デフォルトの名無しさん
2015/12/23(水) 15:53:35.33ID:dDv8KSpn全部の月を31に補正して計算するってこと 1年は31*12=372日になる
3月以降の場合、+3日
11月以降の場合、+1日
9月以降の場合、+1日
6月以降の場合、+1日
4月以降の場合、+1日
例えば、7月3日だったとしよう
すると、+3+1+1=+5日が加算され、31*7 あまり 3日という風に算出する
0392デフォルトの名無しさん
2015/12/23(水) 16:15:56.66ID:dDv8KSpn(d+244)/12 が5月以降
(d+183)/12 が7月以降
:
ってことね
0393デフォルトの名無しさん
2015/12/23(水) 18:34:12.63ID:2AzhQbBP0394デフォルトの名無しさん
2015/12/24(木) 10:50:25.07ID:Hd7uli2yしかし起動してきたsetup.exeなどの「同意する」「次へ」などは手動でやっています。
この alt+n や Enter などのキー入力はバッチファイルからできないものでしょうか。
0395デフォルトの名無しさん
2015/12/24(木) 19:51:50.54ID:k0eMsSdChttp://potato.2ch.net/test/read.cgi/software/1387352479/588-594
0396デフォルトの名無しさん
2015/12/25(金) 01:37:29.49ID:xjel9170これを使えば、キー入力が出来ます。
キーボード・マウス シミュレーター
http://ftp.vector.co.jp/pack/winnt/util/operate/kms1_1.zip
KMS.EXE
入力のタイミングは、こちらで調整出来ます。
コンソールアプリ用 : Visual Studio 用 バッチビルドパッケージ
http://winofsql.jp/download/vc_build.zip
FINDWINDOW.EXE ウィンドウハンドル取得
FOREGROUND.EXE 指定のウィンドウハンドルの画面をフォアグラウンドにする
コマンド・プロンプトからウィンドウのアクティブ状態を変更
http://ftp.vector.co.jp/pack/win95/util/desktop/ACTVW160.ZIP
ACTIVATE.EXE
0397デフォルトの名無しさん
2015/12/25(金) 05:48:22.51ID:pIvyUHeA0398デフォルトの名無しさん
2015/12/25(金) 14:17:34.47ID:O30Ofv/O0399デフォルトの名無しさん
2015/12/25(金) 23:52:12.53ID:Q7FXbHS7cd xxx\yyy\zzz
del /P *.*
と書くのは止めましょう
xxx\yyy\zzz フォルダが無かった場合、現フォルダのファイルが全滅
幸い重要ファイルはなくて助かった、もし del /S /P *.* だったら大ダメージ
0400デフォルトの名無しさん
2015/12/26(土) 00:46:33.93ID:X4YvfGHD0401デフォルトの名無しさん
2015/12/26(土) 01:15:18.22ID:DVIYmgTf間違って大量削除したときのために復元ソフトはいつでも動かせるようにしとけ
0402デフォルトの名無しさん
2015/12/26(土) 02:02:37.73ID:ORfhhjc6cd 〜 && call 削除のための処理
とかすればいいんじゃね
0403デフォルトの名無しさん
2015/12/26(土) 20:19:18.74ID:GqwbH3xGせめて cd /d にしろよ
0404デフォルトの名無しさん
2015/12/27(日) 00:32:23.81ID:WRaoLAxwcd 〜 && call だと cd がエラーでcallは実行されないのに
cd 〜 && echo abc だとcd がエラーでもecho実行、なぜ?
if exist でチェックしようとしてもファイルかフォルダか区別できないような気がする
0405デフォルトの名無しさん
2015/12/27(日) 09:53:50.86ID:g59Yk3Y1変数など訂正すべきところなどご教授ください
robocopy "C:\Users" "D:\Users" /E /COPYALL /XJ
robocopy "C:\ProgramData" "D:\ProgramData" /E /COPYALL /XJ
rmdir "C:\Users" /S /Q
mklink /J "C:\Users" "D:\users"
rmdir "C:\ProgramData" /S /Q
mklink /J "C:\ProgramData "D
0406デフォルトの名無しさん
2015/12/28(月) 13:00:25.63ID:dgI6+oKo> ファイルかフォルダか区別できないような気がする
dir /ad とか attrib で属性見るとか
そこまでやるなら wsh とかに行った方がいいように思うけど
0407デフォルトの名無しさん
2015/12/28(月) 13:47:32.36ID:c+74yIFVif existによるディレクトリの確認はこの辺参照
http://d.hatena.ne.jp/otn/20050209/p1
0408デフォルトの名無しさん
2015/12/28(月) 19:52:52.18ID:VIpgPLjeとか
call :AA folder
:AA
set a=%~a1
set a=%a:~0,1%
とかで1文字目取り出して if "%a%"=="d" じゃないっけ?うろ覚え
0409デフォルトの名無しさん
2016/01/02(土) 22:28:34.67ID:R0FqLiWH0410デフォルトの名無しさん
2016/01/04(月) 23:45:48.45ID:uSRue82fありがとうございます、いろいろな方法がありますね、試してみます。
遅くなってごめんなさい
0411デフォルトの名無しさん
2016/01/19(火) 21:34:08.04ID:ibh0JYmW2つのフォルダを比較して、フォルダ1と同じ名前のファイルだけ抽出して別フォルダに保存出来るアプリありますでしょうか?
例えば
(フォルダ1)
ファイルa
ファイルf
ファイルg
ファイルp
ファイルx
(フォルダ2)
ファイルa
ファイルb
ファイルc
ファイルf
ファイルg
ファイルv
ファイルw
ファイルx
の場合フォルダ2の
ファイルa
ファイルf
ファイルg
ファイルx
だけ、フォルダ3にコピーしたいのですが・・・
バッチファイルで出来るなら、それでもいいのですが、よろしくお願いします。
0412デフォルトの名無しさん
2016/01/19(火) 21:36:04.38ID:ibh0JYmW最終的にフォルダ1にある名前のファイルだけ残ればいいです。
因みにですが、フォルダ1とフォルダ2のファイルは名前が同じでも中身が違いますので、残すのはあくまでもフォルダ2のファイルだけです。
0413デフォルトの名無しさん
2016/01/19(火) 22:03:45.19ID:IRnEE3xbhttp://potato.2ch.net/test/read.cgi/software/1387352479/
バッチでも出来るけど
フォルダ1と2にはフォルダが無い事前提?
フォルダ1か2、或いは両方にファルダがある場合どうするの?
0414デフォルトの名無しさん
2016/01/20(水) 00:58:45.36ID:QphOxfb9set "DIR_A=%CD%\f1"
set "DIR_B=%CD%\f2"
set "DIR_C=%CD%\f3"
md %DIR_C%
pushd "%DIR_B%" || goto :err
for %%a in (*) do dir /a-d /b "%DIR_A%\%%~a" >nul 2>nul && copy %%~a "%DIR_C%"
popd
set DIR_A=
set DIR_B=
set DIR_C=
goto :eof
:err
echo error
goto :eof
0415デフォルトの名無しさん
2016/01/20(水) 03:16:35.15ID:CGJNTMJr@echo off &setlocal
REM USAGE: this.bat "folder1" "folder2"
pushd "%~1" ||goto :eof
popd
pushd "%~2" ||goto :eof
pushd ..
set DTTM=%date:/=%%time: =0%
set DTTM=%DTTM::=%
set $TMP=$tmp%DTTM:~0,-3%
move "%~2" %$TMP%
xcopy /e /i /h /k /y /b %$TMP% "%~2\%$TMP%"
rd /s /q %$TMP%
for /f "delims=" %%A in ('dir /a:-d /b "%~1"') do if exist "%~2\%$TMP%\%%A" move "%~2\%$TMP%\%%A" "%~2\%%A"
rem rd /s /q "%~2\%$TMP%"
exit /b
@echoからexitまでをコピーして拡張子をbatで保存
"folder1" "folder2" は同じディレクトリにあってそこをカレントディレクトリとして実行するならフォルダ名のみで可
そうでない場合はフルパスで指定
exitの前のrem rd /s /q "%~2\%$TMP%"をrd /s /q "%~2\%$TMP%"とrem消せばtmpフォルダが削除されるけど十分テストしてから消してね
>フォルダ2に無いファイルをフォルダ2から消しても構いません
フォルダ2のファイルのうちフォルダ1にあるものとファイル名が同一のもの以外を削除ってことよな?
ファイルサイズが大きいなら該当ファイルだけtmpフォルダに移動させる仕様の方が処理が早い
0416デフォルトの名無しさん
2016/01/20(水) 05:25:10.21ID:2Q8BlnOVREM USAGE: this.bat "folder1" "folder2"
pushd "%~1" ||goto :eof
popd
pushd "%~2" ||goto :eof
pushd ..
set DTTM=%date:/=%%time: =0%
set DTTM=%DTTM::=%
set $TMP=$tmp%DTTM:~0,-3%
md "%~2\%$TMP%"
for /f "delims=" %%A in ('dir /a:-d /b "%~2"') do if not exist "%~1\%%A" move "%~2\%%A" "%~2\%$TMP%\%%A"
rd /s /q "%~2\%$TMP%"
exit /b
0417デフォルトの名無しさん
2016/01/20(水) 07:14:28.26ID:Mi5py/5P0418デフォルトの名無しさん
2016/01/24(日) 00:40:39.46ID:krEiQR2u具体的な処理は 複数のファイルを
20160116
2016年01月16日
を160116の6ケタ数字に変更してファイル名の最後に持っていくという処理をしたいです
写真20160116.jpg
20160116家.jpg
2016年01月16日花.jpg
犬2016年01月16日.jpg
をすべて→写真 160116.jpg
みたいに文字列+日付6ケタに統一したいのです
0419デフォルトの名無しさん
2016/01/24(日) 00:41:52.56ID:krEiQR2uファイルのリネームをしたいです
具体的な処理は 複数のファイルを
20160116
2016年01月16日
の日付が含まれたファイル名を
160116の6ケタ数字に変更してファイル名の最後に持っていくという処理をしたいです
具体的には
写真20160116.jpg
20160116家.jpg
2016年01月16日花.jpg
犬2016年01月16日.jpg
をすべて→写真 160116.jpg
みたいに文字列+日付6ケタに統一したいのです
よろしくお願いします
0420デフォルトの名無しさん
2016/01/24(日) 01:27:04.99ID:5+KozvoU>>418
difして差分取れ
0421デフォルトの名無しさん
2016/01/24(日) 05:34:39.03ID:fqtpw7COPowerShell じゃダメなのか?
0422デフォルトの名無しさん
2016/01/24(日) 08:03:06.77ID:bklX6SGrそれができるならやってる
0423デフォルトの名無しさん
2016/01/24(日) 15:29:33.54ID:LnmKPUOXリネーム系ソフトが一発で文字列+日付6ケタに出来ないなら一旦、日付8ケタ_文字列.jpg とかに変換してそこからバッチで、文字列+日付6ケタに再変換するとかは?
0424デフォルトの名無しさん
2016/01/25(月) 03:33:01.80ID:FJlvjxIx>>419
ファイル名が例題通りなら
setlocal enabledelayedexpansion
SET Fldr=%USERPROFILE%\Pictures
SET Ext=*.jpg
SET RenBat=RenStrYYMMDD.cmd
echo;cd /d "%Fldr%" > "%RenBat%"
for /f %%0 in ('dir /b "%Fldr%\%Ext%"') do (
set DelNGP=%%~n0
set DelNGP=!DelNGP:年=!
set DelNGP=!DelNGP:月=!
set DelNGP=!DelNGP:日=!
set Str=!DelNGP!
for /l %%C IN (0,1,9) DO @(
set Str=!Str:%%C=!
)
call set YYYYMMDD=%%DelNGP:!Str!=%%
if "!DelNGP!"=="!Str!!YYYYMMDD!" (
echo;ren "%%~nx0" "!Str!!YYYYMMDD:~-6!%%~x0" >> "%RenBat%"
) else (
echo;ren "%%~nx0" "!YYYYMMDD:~-6!!Str!%%~x0" >> "%RenBat%"
)
)
で、出来たバッチファイルの怪しいヤツを編集して実行すればなんとか。
ファイル名がこれに当てはまらないなら、正規表現の出番なので
提示されている、PSとかperl、sed、awk等を仕入れて専用スレでお願いします。
0425デフォルトの名無しさん
2016/01/25(月) 03:54:11.66ID:FJlvjxIx写真160116.jpg
160116家.jpg
160116花.jpg
犬160116.jpg
ですが、if文をやめてechoを最初の行だけにすれば
写真160116.jpg
家160116.jpg
花160116.jpg
犬160116.jpg
になります。
0426デフォルトの名無しさん
2016/01/27(水) 05:07:29.42ID:fJiggefaズレを表示するコマンドは下記のようにNTPサーバー名が必要です
w32tm /monitor /computers:[NTPサーバ名]
そこでNTPサーバーを調べるコマンドは "w32tm /query /source"ですが
返り値は ntp.nict.jp,0x9 みたいな感じで ntp.nict.jp だけを取り出したいと思います
そこでgoogle検索して下記のようなものを書いたところ期待どおりの結果を得る事が出来ました
結果的にはOKなのですがechoとw32tmのコマンドくらいしか意味がわかっていません
特に3行目5行目はチンプンカンプンですがこういう書き方で問題ないでしょうか?
無駄な記述があるとか、もっとスマートな方法があるとか指摘して頂ければ助かります
よろしくお願いします
--------------------------------------------------------------------------
@echo off
SETLOCAL
for /f "usebackq tokens=*" %%i in (`w32tm /query /source`) do @set RESULT=%%i
echo %RESULT%
for /f "tokens=1-2 eol=, delims=," %%A in ("%RESULT%") do (
set STR1=%%A
set STR2=%%B
)
echo サーバー: %STR1%
w32tm /monitor /computers:%str1%
endlocal
pause
0427デフォルトの名無しさん
2016/01/27(水) 06:18:16.88ID:3u678Fz6w32tm /monitor /computers:%%A
)
pause
0428デフォルトの名無しさん
2016/01/27(水) 06:39:40.57ID:3u678Fz6w32tm /monitor /computers:%%A | findstr "NTP:"
)
pause
0429デフォルトの名無しさん
2016/01/27(水) 06:50:27.07ID:3u678Fz6for /f "tokens=2" %%B in ('w32tm /monitor /computers:%%A ^| findstr "NTP:"') do echo %%B
)
pause
0430デフォルトの名無しさん
2016/01/27(水) 07:38:45.54ID:fJiggefaありがとうございます
表示もスッキリして頂いてとても勉強になります
0431デフォルトの名無しさん
2016/01/27(水) 23:21:20.89ID:bcAMZw4L0432デフォルトの名無しさん
2016/01/28(木) 13:48:27.48ID:EDEAMnLybatを実行するとデコードされて「資料(過去)」と認識されてます。
「資料%28過去%29」を文字列として認識させるにはどうしたら良いでしょうか。
0433デフォルトの名無しさん
2016/01/28(木) 15:22:02.94ID:hExe5FIXパーセントエンコードはURIに使うものでbatでデコードはされないと思うな
それとは別に
batで%は特別な意味を持っていて、普通は引数や環境変数の中身を見るときに使う
echo %1 %hoge%
とか
よって、%2が第2引数を参照してるととられ、引数指定してなかったら無いので
資料8過去9
とならないとおかしいと思うけど?
本当に「資料(過去)」となるのなら俺にはその原因は分からない
で、「資料8過去9」となると仮定して%%と重ねて記述すると%になるので
資料%%28過去%%29
でどうかな?
batの何処にどういう風に使ってるのかわからないので場合によっては
%%%%と各必要があるかも知れない
0434デフォルトの名無しさん
2016/01/29(金) 21:46:01.22ID:j1UQgjYgありがとうございます
必要な情報だけ一行に集約されてとても見やすいです
こういうふうに書けるよう理解を深めたいです
0435デフォルトの名無しさん
2016/01/30(土) 03:15:06.90ID:hg3OxSOg@for /f "tokens=2 delims=+s" %C in ('w32tm /monitor /computers:%A ^| findstr "NTP:"') do @echo %A [%B]: %C
こういうのを"ファイル名を指定して実行"からだと「アクセスが拒否されました」となるのですが
コマンドプロンプトを管理者として実行の時と同様の結果にする書き方とか方法があれば教えて下さい
0436デフォルトの名無しさん
2016/01/30(土) 10:20:23.91ID:zXGU0vQSディレクトリの中を見ていき、2GB以下なら圧縮ということをしたく
対象Dir
├フォルダ
│ ├フォルダ(2GB 以下) ← これを圧縮
│ │ └ファイル
│ ├フォルダ(2GB以上)
├フォルダ(2GB以下) ← これを圧縮
├フォルダ(2GB以上)
再帰的に見ていった時に、圧縮していくと最終的に一番上が2GB以下になり
全部圧縮されてしまい。どなたかお助けください
0437デフォルトの名無しさん
2016/01/30(土) 23:03:45.58ID:ffKBMc7Hどうでも良いけど、超&以下、以上&未満な
0438デフォルトの名無しさん
2016/01/31(日) 11:30:04.13ID:+ngYeOTEリストを出力して、最後にそれをパス指定で圧縮と
無駄に再帰でやろうとしすぎていました。ありがとうございます
0439デフォルトの名無しさん
2016/02/06(土) 10:40:05.52ID:hbtVaDtkhttp://AAAAAA/だけを取り出す方法が知りたいです
(3つ目の/までの文字列を取り出したい)
よろしくお願いします
0440デフォルトの名無しさん
2016/02/06(土) 11:56:20.12ID:ilYyGYOR@echo off
set arg1=%~1
@for /f "tokens=1,2 delims=/" %%i in ("%arg1%") do set domain1=%%i//%%j/
echo %domain1%
set arg1=%~1
set Scheme=%arg1://=&set arg1=%
set domain2=%arg1:/=&set dummy=%
echo %Scheme%//%domain2%/
0441デフォルトの名無しさん
2016/02/06(土) 12:13:31.62ID:hbtVaDtk作りたかったものが作れました
ありがとうございます
0442デフォルトの名無しさん
2016/02/07(日) 03:34:31.41ID:xzt+ySx/常に4桁の文字列が得られるようにしたいです
0443デフォルトの名無しさん
2016/02/07(日) 03:59:09.24ID:S13nymNFecho %random% を使う
0、10000以上であればやり直す
0444デフォルトの名無しさん
2016/02/07(日) 04:06:32.80ID:oI7YLQ9S質問の意味がいまいち不明だがこういうことか?
@echo off
for /l %%i in (0,1,9999) do (
call set cnt=000%%i
call echo %%cnt:~-4%%
)
set n=0
:loop
set cnt=000%n%
echo %cnt:~-4%
set /a n+=1
if %n% lss 10000 goto :loop
0445デフォルトの名無しさん
2016/02/07(日) 15:37:11.81ID:YEUGR+cIcall echo %%ct:~-4%%)
set a=10001
:LOOP
echo %a:~-4%
set /a a+=1
if %a% LEQ 19999 (goto :LOOP) else exit /b
0446デフォルトの名無しさん
2016/02/07(日) 16:38:16.87ID:7II1MwkRfor /f %%i in ('コマンド') do set value=%%i としたとき、
コマンドの処理時間が長いと完全に沈黙しちゃうので何とかしたいのだけど、
コマンドを単独で実行した時にコンソール上に表示される実行中の情報
(進行状況とか)を表示する方法ってないかな?
0447デフォルトの名無しさん
2016/02/07(日) 17:41:06.71ID:oI7YLQ9Sどうしてもって言うのなら、ファイルをフラグに使うとなんとかなるかな
@echo off
set f=%temp%\result
start /b コマンド>%f%
set n=0
call :wait %f%
if %errorlevel% neq 0 goto :timeout
for /f "tokens=*" %%i in (%f%) do echo %%i
del %f%
goto :eof
:timeout
goto :eof
:wait
if %~z1 gtr 0 exit /b 0
ping -n 2 localhost >nul
set /a n+=1
echo 処理中(%n%秒)
if %n% leq 10 goto :wait
echo timeout
exit /b 1
0448デフォルトの名無しさん
2016/02/07(日) 17:51:21.78ID:oI7YLQ9Stasklistからコマンドが消えるのを監視するのがいいかも
さらには、別batでコマンドを起動し、終了時にタスクなり他ソフトなりを起動して
何らかのアクションを起こし、それを監視するとか
0449デフォルトの名無しさん
2016/02/07(日) 20:46:37.41ID:csmRYXFo0450446
2016/02/08(月) 00:34:24.61ID:tvZTUQzkやはりちょっと別の工夫が必要なんだねぇ。
一応、当該コマンドの処理
(通常のファイル操作に加えて、標準エラー出力からの文字列を整形したものを環境変数に格納)
が終わったら格納した環境変数を使ってまた別のコマンドを実行していて、
その時にエラーレベル判定は行われるので、
すんなり行けば、次のコマンド(ここで"echo 中間処理終了")で、その程度での経過は分かるから、
申し訳ないけど、そのままで妥協しておこうかな。
>>449
同時でなくていい場合なら、標準エラー出力のほうを一度ファイルにして、
改めてtypeで読み込んで整形して環境変数に格納というのでも出来そう。
teeをLinux(Cygwinでも)で使ったことはあって、Cygwinのbashスクリプトでやっちゃおうか、とも思ったんだけど、
とりあえずどのWindows環境でも使えるということで、ハマってしまいました。
ただ、findstrが文字数オーバーでエラーが出るサンプルがあって、
結局grep使っちゃったから、あまり意味が無いかもw
御二方、どうもありがとう。
0451デフォルトの名無しさん
2016/02/08(月) 01:25:16.89ID:DULBP8IAtasklistの結果からそのコマンドのイメージ名が消えるまで適当に表示させながら
ループさせるんじゃいけないの?
また、>>447のエラーレベルって蛇足的な処理じゃん
無くても問題ない
該当コマンドってのが自分でカスタマイズできるんならリダイレクトも不要
そのコマンドの終了時点でフラグ的なファイルに書き込めばいい
0452デフォルトの名無しさん
2016/02/08(月) 01:29:33.68ID:T6p//Vzmコマンドの最後でファイルを作り、
batでは if exist でそのコマンドができるのを待つ、なかったら timeoutで待つループ
0453デフォルトの名無しさん
2016/02/08(月) 01:30:33.89ID:T6p//Vzmあ、ダブった
0454デフォルトの名無しさん
2016/02/08(月) 01:36:07.46ID:IaYL4Dgoもうバッチの範疇外じゃないのかな?どのWinでもって事ならWSHかPowerShellを勧めるよ
0455デフォルトの名無しさん
2016/02/08(月) 01:43:25.70ID:IaYL4Dgo0456デフォルトの名無しさん
2016/02/08(月) 01:46:27.75ID:U7IijhSaecho 処理中です。ウィンドウは絶対に閉じないでください。
でいいじゃん
ちょっと応答不能になっただけで速攻ウィンドウ閉じる奴って
結構多いけど理解に苦しむ
0457446
2016/02/08(月) 21:23:57.31ID:4qV7ShMX問題のコマンドについて、今まで標準エラー出力から文字列を抽出していたけど、
環境変数でファイルパスを別途加える事でログをファイルに出力できることがわかったので、
コマンドの処理は通常通りおこなって(コンソールに経過他の情報が表示される)、
その終了後、改めてログファイルから文字列を読み込んで環境変数代入を処理することで、
経過情報を表示しながら for /F や tee と同じ目的を数行で達することが出来たよ。
コマンド実行と環境変数代入を同時に処理するということにこだわりすぎたかな。
みなさん、お付き合いいただき、どうもありがとう。
0458デフォルトの名無しさん
2016/02/08(月) 21:58:26.82ID:aeLE2jq+高度なプログラムが動き出しちゃうときあるから
0459デフォルトの名無しさん
2016/02/10(水) 23:06:13.15ID:rMhx/tnPそもそも、重複時自動的にリネームしつつコピーしてくれるちょっと便利コマンドって
どこかにありそうな気がしたので、そんなコマンド(プログラム)教えてください
0460デフォルトの名無しさん
2016/02/11(木) 01:24:38.76ID:xppsr9esリネームするならコピー元?コピー先?
リネームの形式は連番?日時?
これらをコマンドラインオプションで設定出来る非対話形式なcuiコピーツールがあっても良いなって思うけど
バッチ側の少しの手間で実現出来るからわざわざ外部ツール導入するのは躊躇われるな
firefilecopyにそれっぽい設定があった気がするけど使ってたの何年も前なので覚えてないわ
0461デフォルトの名無しさん
2016/02/11(木) 10:17:29.10ID:E36uRHTx> これらをコマンドラインオプションで設定出来る非対話形式なcuiコピーツール
まさしくそういうツールが欲しいなと思った訳でして、firefilecopy 試してみたところ
連番などの指定ができない、既にリネーム済みのものがあった時に自動的に
処理できない模様で目的に合致せず、無念
linux 系のツールならと思ってググッてみても、cp だと拡張子が維持できない suffix の
付け方になってしまうなど、調度良いのが今のところ発見できず……
0462デフォルトの名無しさん
2016/02/15(月) 13:55:49.70ID:wQ6idclhでぐぐって見つかるバッチを条件が合致した際にcallするとか
スクリプトだからリネーム条件なんかはカスタマイズも可能かと
0463デフォルトの名無しさん
2016/02/15(月) 14:13:15.78ID:NpLlCTmpそれでコピーしつつログ解析して必要ならナンバーか日付つけてのリネームコピーするとかやればいいんじゃないの
0464459
2016/02/15(月) 21:36:25.85ID:CcVUGHWP現状として、コピーする時に同名ファイルがある時には名前を変えてコピーするのは
既にバッチファイルで実現していて、同じことを手軽に便利に出来る単独の CUI な
ツール、プログラムがあれば、というよりあるに違いない、と思ったのが >>459 の
質問だったわけです
0465デフォルトの名無しさん
2016/03/11(金) 22:12:34.63ID:g0a/JI38file1 file2が+で始まる場合 ""で囲んでいないとcopyされない
0466デフォルトの名無しさん
2016/03/15(火) 00:41:28.28ID:8utBFAR10467騙し髪
2016/03/15(火) 01:32:32.69ID:ZWMv0nUcこれなど如何?
::←全角254文字が限界→
動く.CMD
rem /; ::0123456789ABCDEFGHIJKLMを11回書く+0 ※ 最後の0が254文字目
::0123456789ABCDEFGHIJKLM012345678・・・0
:LOOP
@ECHO;LOOP
@PAUSE
GOTO :LOOP
こちらは、GOTO :LOOP で止まります。
止まる.CMD
rem /; ::0123456789ABCDEFGHIJKLMを11回書く+01 ※ 最後の1が255文字目
::0123456789ABCDEFGHIJKLM012345678・・・01
:LOOP
@ECHO;LOOP
@PAUSE
GOTO :LOOP
0468デフォルトの名無しさん
2016/03/16(水) 09:25:21.97ID:6gvLipIQ0469デフォルトの名無しさん
2016/03/20(日) 13:25:19.72ID:pvWacbTUstart "" "%~f0"
start "" "%~f0"
exit /b 0
0470デフォルトの名無しさん
2016/04/02(土) 01:38:35.14ID:SZPhSxIwhttp://gigazine.net/news/20160331-microsoft-build-10-important-announcements/
これでバッチを使う必要がなくなればいいな
0471デフォルトの名無しさん
2016/04/03(日) 19:00:37.30ID:+cm4a62/http://www.horstmuc.de/wcon.htm
0472デフォルトの名無しさん
2016/04/04(月) 03:27:50.00ID:UUnGIXWsIn a batch file REM at the start of a line signifies a comment or REMARK, alternatively adding :: at the start of a line has a similar effect.
Rem - Comment | Windows CMD | SS64.com
http://ss64.com/nt/rem.html
@ECHO OFF
::
:: First comment
REM Second comment
REM
0473デフォルトの名無しさん
2016/04/04(月) 03:48:54.12ID:TBgct8lKラベル機能をコメントとして使うのは昔からある手法
0474デフォルトの名無しさん
2016/04/04(月) 03:50:07.49ID:TBgct8lK::comment
というように:を2つ連ねるけどね
0475デフォルトの名無しさん
2016/04/10(日) 15:46:04.10ID:wyM3R/Jw0476デフォルトの名無しさん
2016/04/10(日) 16:11:22.77ID:wyM3R/Jwfor /f "delims=" %%a in (hoge.txt) do
このコマンドで1つのファイルから交互に2つの変数に中身を代入できないでしょうか
*hoge.txt*
ほげ1
ajairhioa
ほげ2
aj329jagjal
これを%%aにはほげ1ほげ2、%%bにはajairhioa、aj329jagjalを順次代入したいです
"
0477デフォルトの名無しさん
2016/04/10(日) 17:35:06.95ID:DGt37MFbfor /f "delims=" %%a in (hoge.txt) do call :sub %%a
for /f "tokens=1* delims=," %%a in (hogehoge.txt) do echo %%a %%b
pause &exit /b
:sub
if %cnt%==0 (
set LN=%1
set /a cnt+=1
exit /b
)
>>hogehoge.txt echo %LN%,%1
rem ↑ファイルに書き出す事に不都合があるなら↓
rem for /f "tokens=1* delims=," %%a in ("%LN%,%1") do echo %%a %%b
set cnt=0
0478デフォルトの名無しさん
2016/04/10(日) 18:06:01.41ID:DGt37MFbset cnt=1
for /f "delims=" %%a in (hoge.txt) do call :sub %%a
for /f "tokens=1,2* delims=," %%a in (hogehoge.txt) do echo %%a %%b %%c
pause &exit /b
:sub
if %cnt% LSS 3 (
set LN=%LN%,%1
set /a cnt+=1
exit /b
)
>>hogehoge.txt echo %LN%,%1
set LN=
set cnt=1
0479デフォルトの名無しさん
2016/04/10(日) 20:10:23.92ID:R4xtJDTH@if (0)==(0) echo off
for /f "tokens=1,2 delims=," %%a in ('cscript.exe //nologo //e:jscript "%~f0"^<hoge.txt') do (
echo %%a , %%b
)
goto :eof
@end
var StdIn=WScript.StdIn;
while (!StdIn.AtEndOfLine){
var s=StdIn.ReadLine();
if(!StdIn.AtEndOfLine) WScript.Echo(s+","+StdIn.ReadLine());
}
0480デフォルトの名無しさん
2016/04/11(月) 21:54:33.79ID:Vzz4aFRcバッチまったくの初心者であまりわかりませんでしたがありがとうございます
なにか初心者向けで体系的に学べるサイトとかありますかね?
0481デフォルトの名無しさん
2016/04/11(月) 21:58:42.43ID:Vzz4aFRcバッチまったくの初心者であまりわかりませんでしたがありがとうございます
なにか初心者向けで体系的に学べるサイトとかありますかね?
0482デフォルトの名無しさん
2016/04/11(月) 21:59:22.47ID:Vzz4aFRc0483デフォルトの名無しさん
2016/04/11(月) 22:40:01.79ID:OwO3FuPu0484デフォルトの名無しさん
2016/04/11(月) 22:59:56.31ID:Vzz4aFRc0485デフォルトの名無しさん
2016/04/11(月) 23:11:45.22ID:kHX/TE9cはい
0486デフォルトの名無しさん
2016/04/12(火) 00:30:07.81ID:cKwKVfMZテンポラリー属性ってcmdからだと変更できないよね
0487デフォルトの名無しさん
2016/04/12(火) 00:31:51.05ID:iN7RaFvn$i=0
$evenStr=''
$oddStr=''
$ary = (cat hoge.txt) -as [string[]]
foreach ($line in $ary) {
if($i % 2 -eq 0){
$evenStr += $line
}else{
$oddStr += $line
}
$i++
}
Write-Output $evenStr, $oddStr
入力
1
2
3
4
5
出力
135
24
0488デフォルトの名無しさん
2016/04/12(火) 04:11:38.82ID:mqOre39wせめてvbsにした方がいい
0489デフォルトの名無しさん
2016/04/12(火) 05:40:07.79ID:Hl1a/qVy精々 %1 && >> とかの幾つかのお約束事と最初に躓くコマンドはforくらい
他のコマンドやオプションはggってリファレンス見ればいいんだし
echo pause set if for call goto start move xcopy ren del dir findstr
これだけ知ってればちょっとしたファイル操作に便利だし他に比べハードル低いよ
複雑な事をするにはバッチは向かないし制約もあるから他が良いのは間違いないけど
0490デフォルトの名無しさん
2016/04/12(火) 08:15:23.59ID:smwPn8rR0491デフォルトの名無しさん
2016/04/12(火) 08:40:26.31ID:xYAotuK9トラップもそれなりにあるし
わざわざ覚える言語ではないと思う
bash 並みになればまだいいんだが
0492デフォルトの名無しさん
2016/04/12(火) 10:03:04.09ID:W9B2ZLoA一番簡単なものだし、ちょこっとやる分には良いとっかかりになると思うよ
ヘルプ読むだけで十分概要はわかるしね
それから何にいくのかは、自分が何に興味あるかで決めればいい
0493デフォルトの名無しさん
2016/04/12(火) 22:44:22.00ID:N5k4ywKZcmdは少し学んで、その後win10に向けてshellを学ぼうかなと思います
0494デフォルトの名無しさん
2016/04/29(金) 16:15:40.02ID:Du8RELkw例えば「指定フォルダ以下に存在する拡張子がtxt"以外"のファイルを全て削除(サブフォルダ含む)」
みたいな事をやりたいんだけど。
0495デフォルトの名無しさん
2016/04/29(金) 21:30:07.02ID:nOk/Iq10そういう場合は
for /f %%i in ('dir "%1" /a-d /b /s | findstr /r /i /c:".txt\>"') do del %%i
というバッチを書いて第一引数に指定フォルダを渡せばいいんじゃないの??
0496デフォルトの名無しさん
2016/04/29(金) 21:35:10.00ID:nOk/Iq10for /f %%i in ('dir "%1" /a-d /b /s | findstr /r /i /v /c:".txt\>"') do del %%i
だった。
0497デフォルトの名無しさん
2016/04/29(金) 23:27:50.12ID:Du8RELkwありがとう。ちょっと検討しなおしてみる。
0498デフォルトの名無しさん
2016/04/30(土) 22:24:06.87ID:HLsp90ueワイルドカードで否定、というより…
hoge.txt hoge.doc hoge.xls … とあったとしてだよ。
.txt 以外の拡張子を持つファイル、という指定は Linux の bash でも 1コマンドでは出来ないよ??
とりあえず、俺の知る限りのコマンドラインシェルでは出来ない。
0499デフォルトの名無しさん
2016/05/01(日) 02:14:20.07ID:f7rDjALb496弄れば除外設定の拡張子もサブフォルダ以下を含めるかも引数で指定出来るようになるだろうに何か問題あるの?
0500デフォルトの名無しさん
2016/05/01(日) 08:38:28.34ID:4tDBI2/Zそれ以前にいきなり三国人とか言い出す癖直した方がいいと思うよ
0501デフォルトの名無しさん
2016/05/01(日) 11:19:50.80ID:tKi6j9CTBitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
。
0502デフォルトの名無しさん
2016/05/01(日) 15:01:02.76ID:gt2lBnxwshopt -s extglob; ls !(*.txt)
0503デフォルトの名無しさん
2016/05/01(日) 20:56:52.01ID:w3ycpbWLそれで思い出したけど、ワイルドカードにはそもそも否定、っていう概念が無いのよね。
>>502
それは知らなかったぜ…。が、やっぱ拡張であって1コマンドじゃないのね。
0504デフォルトの名無しさん
2016/05/02(月) 11:40:31.88ID:ZqwyA4jLそういえば他のコマンドでは無いよね。
0505デフォルトの名無しさん
2016/05/09(月) 14:25:03.70ID:LpHkpPcH> 正規表現だと否定って言うのは普通に使うから別に違和感ないけどね
普通に使う??
否定の正規表現がどのくらい面倒臭い代物か知ってて言ってんのかよ
0506デフォルトの名無しさん
2016/05/09(月) 20:31:48.60ID:4hkTezx/若いなお前
0507デフォルトの名無しさん
2016/05/11(水) 20:07:41.82ID:+ByNjd23お前は正規表現の前に日本語を勉強すべき
0508デフォルトの名無しさん
2016/05/15(日) 23:09:30.40ID:0PD+6ouGcolor で色を変えるように、透明度の変更をコマンドでやるには
どうすれば良いでしょうか?
0509デフォルトの名無しさん
2016/06/06(月) 05:31:09.64ID:/VUqLFGtをフォルダ名としてリネームすることはできないのでしょうか?
■フォルダ1
┣ファイル1
┣ファイル2
■フォルダ2
┣ファイル3
┣ファイル4
といったフォルダ構造があったばあい、
■ファイル1
┣ファイル1
┣ファイル2
■ファイル3
┣ファイル3
┣ファイル4
といった感じにリネームしたいんです
ヒントがあれば教えてください
0510デフォルトの名無しさん
2016/06/06(月) 05:36:07.56ID:mrKNlhKB再帰呼び出し
0511デフォルトの名無しさん
2016/06/06(月) 05:59:54.20ID:JVcEODJX断りも何もせず放置したように移動してきてるみたいだけど
別人ならごめん
結果的に同名のフォルダとなる場合のリネームのルールさえ決めておけば
for でやってもそんなに難しくはない
0512デフォルトの名無しさん
2016/06/06(月) 06:39:56.64ID:/VUqLFGtファイル名をフォルダ名にリネームしている、参考ページがあれば教えてもらえないですか?
>>511
別人ではないですよ。
forを使う場合は、どうやるんでしょうか?
サンプルが載ってるページがあれば教えてください
0513デフォルトの名無しさん
2016/06/06(月) 07:38:12.87ID:mIdKUrWtこんな感じ
@echo off
for /f "delims=" %%i in ('dir /b /on /ad') do (
for /f "delims=" %%j in ('dir /b /o-n /a-d "%%~i"') do set name=%%~j
call ren "%%~i" "%%name%%"
)
フォルダ名の重複によるリネームエラーを変名してリトライするなら
上の call ren "%%~i" "%%name%%" を
set src=%%~i
call set dst=%%name%%
call :ren
の3行に代えて下を追加(引数渡しでなく環境変数渡しなのは、特殊な文字の変換をなるべく防ぐため)
goto :eof
:ren
ren "%src%" "%dst%" 2>nul
set suffix=1
if %errorlevel% equ 0 goto :eof
:loop
ren "%src%" "%dst% (%suffix%)" 2>nul
set /a suffix+=1
if %suffix% gtr 10 echo ***打ち切り***&goto :eof
if %errorlevel% neq 0 goto :loop
goto :eof
0514デフォルトの名無しさん
2016/06/06(月) 08:36:49.68ID:/VUqLFGt調べて読み解いて、理解できあなかったらまた質問させてもらいます。
0515デフォルトの名無しさん
2016/06/06(月) 12:24:37.84ID:/VUqLFGtありがとうございました。
今まで、相当に無駄な作業してました。
0516デフォルトの名無しさん
2016/06/06(月) 15:17:54.02ID:mIdKUrWt余計なことかも知れないが、空のフォルダがあった場合に変になるのでそのフォルダはリネームしないことにすると以下のようになる
@echo off
pushd %1
for /f "delims=" %%i in ('dir /b /on /ad 2^>nul') do (
call set folder=%%~i
call :search_file
call :ren
)
popd
goto :eof
:search_file
set fname=
for /f "delims=" %%j in ('dir /b /on /a-d "%folder%" 2^>nul') do set fname=%%~j&goto :eof
goto :eof
:ren
if not defined fname goto :eof
set suffix=1
ren "%folder%" "%fname%" 2>nul
:retry
if %errorlevel% equ 0 goto :eof
ren "%folder%" "%fname% (%suffix%)" 2>nul
set /a suffix+=1
if %suffix% gtr 10 echo ***打ち切り(%folder%)***&goto :eof
goto :retry
0517デフォルトの名無しさん
2016/06/06(月) 17:00:29.53ID:mIdKUrWtcall set folder=%%~i
for /f "delims=" %%j in ('dir /b /on /a-d "%folder%" 2^>nul') do set fname=%%~j&goto :eof
↓
set folder=%%~i
for /f "delims=" %%j in ('dir /b /on /a-d "%%folder%%" 2^>nul') do set fname=%%~j&goto :eof
0518デフォルトの名無しさん
2016/06/06(月) 19:49:58.32ID:wj+hntm6相当に無駄なスレ違いの質問はクローズしよう
http://potato.2ch.net/test/read.cgi/software/1446733472/665
0519デフォルトの名無しさん
2016/06/06(月) 20:27:13.87ID:kp8pJwePマルチ宣言してる奴に快く回答するとか
まじクズっすねー
0520デフォルトの名無しさん
2016/06/08(水) 21:05:04.00ID:rpxHmTxHそこはかとなくダサい気がするのだがうまく言えなくてもどかしい。
0521デフォルトの名無しさん
2016/06/08(水) 21:09:54.69ID:rpxHmTxH面白い課題や面白い発見自身に罪は無い。
それを提示した人間がたとえ殺人者でも、その課題や発見自身は俺は歓迎する。
もし、Libre Office の開発者の一人が殺人を犯したからといってお前は Libre Office を使うのを止めるか?
止めるのであれば非難していただいて結構。
0522デフォルトの名無しさん
2016/06/08(水) 22:04:51.84ID:sUmK8XFrその例えはおかしいね
マルチ質問に返答するのはマナー違反って話なんだから
つーか例える必要ないでしょ
マルチ質問に答えることがマナー違反ではない理由を言えばいいだけだ
0523デフォルトの名無しさん
2016/06/08(水) 22:23:27.09ID:rpxHmTxH> マルチ質問に返答するのはマナー違反って話なんだから
間違い。
1. マルチ投稿は迷惑かもしれないが、課題としては良問と思った。情状酌量の余地あり。
2. マルチ投稿に答えるのがマナー違反だという話は聞いたことがない。
3. 別板からわざわざ出張って「○○のもんだけど」とか言われてもシラネ。掲示板のルール無視。それこそ893まがいの行為。
0524デフォルトの名無しさん
2016/06/08(水) 22:29:07.11ID:rpxHmTxHお前がインターネットのルールブックなわきゃねぇんだ。マナーだのなんだのごたくヌカすな。
>>516
全体的にエラー処理まわりが気になるけど、そこは置いとく。
ren じゃなくて move じゃない?ren にすごく違和感…。
0525デフォルトの名無しさん
2016/06/08(水) 22:34:56.16ID:sUmK8XFr1. あなたがそう思うのは勝手だけどそれに対してクズと呼ばれるのは仕方ないこと
2. マナー違反を受け入れるのもマナー違反なのは当然
3. 俺に言われても知らん
あとさ、例えが例えになってないことについてどう思ってんの?
0526デフォルトの名無しさん
2016/06/08(水) 22:49:05.28ID:JbG4hFO7このスレは過去を見てもわかるように、親切な人間達が回答してくれる珍しいスレなんだからさー
0527デフォルトの名無しさん
2016/06/09(木) 00:29:49.83ID:mVcmv6vYマルチって言ってるけど、向こうで最後に書いてから半日経ってからこっちに書いてるじゃん
それになんだか追いだされたように見える
まあ、さよなら、を言わずに出てったのは礼儀知らずかもしれないが
そんなのは世の中にいっぱいいるんで今更事たてて言うほどじゃないな
0528デフォルトの名無しさん
2016/06/09(木) 00:38:52.14ID:M1aHpfX0cd フォルダ
endlocal
でせっかくcdしても元に戻ってしまう
0529デフォルトの名無しさん
2016/06/09(木) 00:56:26.88ID:mVcmv6vYsetlocalはそういうもんだから
逆に環境が引き継がれちゃったらsetlocal使う意味が無くなる
そういうことやりたかったら、
setlocal
set result=999
〜
endlocal&set result=%result%&cd フォルダ
ってやると、環境変数を返すことも出来る
0530デフォルトの名無しさん
2016/06/09(木) 01:29:34.62ID:M1aHpfX0ありがとうございます
そんな高度な技ができるとは知らなかったです
0531デフォルトの名無しさん
2016/06/09(木) 02:52:40.71ID:3N2Gwx2Nsuffixとかかな
for /f "delims=" %%j in ('dir /a-d /b "%folder%" 2^>nul ^|^|goto :eof') do ren "%folder%" "%%~nj" &&goto :eof
でren出来なかった場合のみerrorlog吐くとかの方がスマートかも
まあバッチだし。。細かいとこ凝るならpsとかの方が
0532デフォルトの名無しさん
2016/06/09(木) 14:01:20.29ID:mVcmv6vYfor /f "delims=" %%j in ('dir /a-d /b "%%folder%%" 2^>nul ^|^|goto :eof') do ren "%folder%" "%%~nj" &&goto :eof
0533デフォルトの名無しさん
2016/06/09(木) 14:12:43.69ID:mVk0iXAO質問がマナー違反なんて話は知られてるが
返答がマナー違反なんて初めて聞いたけど、誰かソース知ってる人いる?
この人の妄想かな
0534デフォルトの名無しさん
2016/06/09(木) 16:04:09.94ID:Et4Ks3FV自分がレスしたきゃするし興味無いならスルー
自治厨ってのは自分の耐性の低さを尤もらしい大義名分で誤魔化しているだけに過ぎない
自治厨や創価みたいな制裁厨は荒らしと同じゴミ
0535デフォルトの名無しさん
2016/06/10(金) 08:47:12.85ID:7xQ2IbxD返答しちゃうとマルチでいいんだ
って勘違いする奴がいるってことだろ
普通それぐらいわかると思うが...
0536デフォルトの名無しさん
2016/06/12(日) 22:53:45.89ID:T3khqEs4普通と言われても、それを実際に文章で目にした記憶ないんだよな
ソース張れるか?妄想URLじゃなくてさ。
クロスポストマルチポストという言葉が生まれたニュースネットならまだしも。
個々のスレで関連性の無い2chだと正直どうでもいい。
ていうか今ニュースネットってどうなってるんだろ。まだあるんかな?
0537デフォルトの名無しさん
2016/06/12(日) 23:23:12.75ID:Dejri5g9理解力ないってこと?
0538デフォルトの名無しさん
2016/06/12(日) 23:29:33.63ID:nN2o7Cuz0539デフォルトの名無しさん
2016/06/13(月) 02:21:55.70ID:bKXy9+E3所詮はマナーだからもう終了しろ
0540デフォルトの名無しさん
2016/06/16(木) 16:19:50.79ID:Y8ybIIT3これがダメあれがダメとダメ出しのソースが出るんだよ。
マルチポストする方に関しては検索するとボロボロ出てくるだろ。
しかしこれがマルチポストに回答する事に関しては出てこんのだよな。
これの意味するところはつまりそこまで問題ではない、問題にする人はいないってこった。
回答する気が無いならしなければいいだけ。
回答した人に対してマナー違反だ回答するな等と文句付けるのは何様?筋違いだと思うね。
ぶっちゃけ俺も気にしないし。気にする人見たら今のように珍しいなあと思うな。
0541デフォルトの名無しさん
2016/06/16(木) 16:49:06.61ID:pl2Ydjf9下らないスレチネタで議論する暇があったら面白バッチネタの一つでも書きやがれ
で、PowerShellってどうよ?
0542デフォルトの名無しさん
2016/06/16(木) 17:50:03.03ID:dWCIrllMまあ簡単な奴以外はwsh(jscript)を使うな
でも今Rubyが面白いかもって思ってる(Perlも入れたけどそっちは殆ど手付かず)
.JScriptの中からScriptControlでRubyScriptの関数をCALLするとか変態的なことを試してるところ
(.rbで作って、.js(.wsf)に埋め込むっていう非効率的な作業をやってる)
0543デフォルトの名無しさん
2016/06/16(木) 23:14:35.32ID:oJOkyOjyなんとなくバッチ組めちゃうdosコマンドに比べたら難しく感じちゃうな
ただ複数のアプリの同時起動が簡単に出来るからそういう用途ではよく使ってる
0544デフォルトの名無しさん
2016/06/17(金) 07:01:08.70ID:TQ7oR46s>>537
0545デフォルトの名無しさん
2016/06/17(金) 07:14:29.17ID:TQ7oR46s書き方とかにちょっと違和感があるけど慣れればかなり使えるって感じ
特にバッチは文字列の扱いが色々面倒だからファイル名を切った張ったするようなケースだと PowerShell の方が楽
WPF 使って GUI もいけるし
0546デフォルトの名無しさん
2016/06/17(金) 14:10:51.86ID:ZjDSffK/お前がな…
0547デフォルトの名無しさん
2016/06/17(金) 14:14:36.97ID:ZjDSffK/だが、「皆が」そうだというならお前以外の意見つまりソースを出せと。
そんなことも理解できんのね
0548デフォルトの名無しさん
2016/06/17(金) 14:45:53.78ID:kt8UtU4J本来、内容はどうであれ、マルチポストの相手をすべきではないんだよ。
マルチポストとか思うから、マナーだとか言い出すんだろうけど、
コピペの荒らしだと思えばいいんだよ。相手にするヤツがバカだろう?
0549デフォルトの名無しさん
2016/06/17(金) 15:22:57.71ID:PGPlVx2O十分このスレでの意義はあったと思うよ
元のスレのofficeじゃスレ違いだとかいってハブって追い出したくせに
こっちに来たら追いかけてきてイチャモンつけるって性格悪いな
0550デフォルトの名無しさん
2016/06/17(金) 18:35:44.26ID:oyCWF+hyそいつに関しては性格悪いなんてもんじゃないでしょ
わざわざ他スレへ出張って文句言う粘着性はガイキチ
池沼は相手にしないが吉
>>542-543
>>545
いや、おまえがスレチだろってツッコミ待ちだったんだがおまえら良い奴だな
ありがとう
既に.NET知ってる人は楽なんだろうけど一から覚えるの面倒臭くて。。
ましてやPSの為だけにとなるとなかなか重い腰が動かず
>ファイル名を切った張ったするようなケースだと
まさにこの用途なんだよね
バッチから文字列の扱いを少し便利にしてくれるくらいで良かったんだけど覚える量的に一気にハードル上がって面倒臭い
覚えてしまえば楽になりそうなのは分かってるので、ぼちぼちやってくわ
0551デフォルトの名無しさん
2016/06/17(金) 18:55:09.01ID:TQ7oR46sまあ、そう言うこと
ググって部屋のなかにうんこするなとかの書き込みが少ないからうんこするぜ
って言うのと同じ
考える力のない奴に何を言ってもしょうがない
0552デフォルトの名無しさん
2016/06/17(金) 18:58:07.69ID:TQ7oR46s対話で使えなくてもいい
将来を心配したことがない
なら vbs/jscript + wsh でもいいかも
0553デフォルトの名無しさん
2016/06/19(日) 09:59:28.72ID:rDn80OX3うんこと考えてるのは実はお前だけってな
お前さん理想と現実の区別付いてないだろ?
0554デフォルトの名無しさん
2016/06/19(日) 11:27:46.12ID:Pvc+naRU>>537
0555デフォルトの名無しさん
2016/06/19(日) 17:51:44.69ID:UjrNrWKl先週のネタいつまで引っ張ってんだよ、切り替えていけよ
ネタがないなら保守だけしてろ
0556デフォルトの名無しさん
2016/06/19(日) 20:28:17.53ID:N0SKT7vZまだこんなこと言ってる奴がいるんだなw
0557デフォルトの名無しさん
2016/06/20(月) 05:15:32.88ID:bz6tTT9I0558デフォルトの名無しさん
2016/06/20(月) 12:37:29.60ID:1rHeBxTu0559デフォルトの名無しさん
2016/06/20(月) 12:56:47.33ID:XUIKeVkP0560デフォルトの名無しさん
2016/06/21(火) 23:17:02.70ID:wIBHL76T発音はツーチャンネル?
0561デフォルトの名無しさん
2016/06/22(水) 03:22:26.83ID:UKX8/FIx書く時は2chって書くかな
0562デフォルトの名無しさん
2016/06/22(水) 08:59:59.99ID:ffHjJb8n漏れも
0563デフォルトの名無しさん
2016/06/24(金) 01:13:29.70ID:buggiI8HEテレは馴染めん
0564デフォルトの名無しさん
2016/06/24(金) 02:23:17.48ID:iovZLto/地デジは3ちゃんTVK♪というCM思い出して
違うことに気づいた。
0565デフォルトの名無しさん
2016/06/27(月) 10:51:32.41ID:IRTRDse40566デフォルトの名無しさん
2016/06/27(月) 13:44:52.16ID:cmd3G8BZhttp://el.jibun.atmarkit.co.jp/101sini/2016/06/bat.html
0567デフォルトの名無しさん
2016/06/27(月) 13:56:09.99ID:YSZG9z+3でよくね?
0568デフォルトの名無しさん
2016/06/27(月) 14:13:24.61ID:RStewB0e1度整理したから大量ってほどではないけど
ニッチな用途だとファイル名だけでは用途を思い出せないのが難点
0569デフォルトの名無しさん
2016/06/27(月) 14:35:10.14ID:N5RLWdSz0570デフォルトの名無しさん
2016/07/03(日) 21:43:03.57ID:vq6Z+j1h0571デフォルトの名無しさん
2016/07/03(日) 22:02:09.39ID:T1/0jYLy何に使うか分からんようなゴミを鯖に残してて勝手に消したら老害が何で消した?いつか使うかもしれんのに!って怒るとか
いつかって何だよって言う。たかがbatでアホかって老害SEあるあるネタ
0572デフォルトの名無しさん
2016/07/03(日) 22:37:12.83ID:CJuDkW1kアナウンス出して全て消しゃいいじゃん、というのが率直な感想
でもやりたいのは、バッチを使う(作る)人の排除みたいだから、
社長になって独裁人事するのが一番の解決なんだろうね
0573デフォルトの名無しさん
2016/07/06(水) 01:43:37.05ID:j2aYQohaバッチに限った事じゃない
不要の見極めも難しいから
消せずに残ってゴミ屋敷が現実
0574デフォルトの名無しさん
2016/07/07(木) 00:24:13.51ID:WGF782sGいらなさそうなのまとめて圧縮して1年後の日付書いてこの日まで使わなければ消すってしといた
0575デフォルトの名無しさん
2016/07/07(木) 14:56:47.42ID:TsrNo+6tうぜぇうぜぇって言うだけで自分では対処しないで放置ってのはもう…
0576デフォルトの名無しさん
2016/08/09(火) 17:07:41.16ID:j5HqbEBXhttp://srad.jp/submission/67150/
免疫力がつくまでしばらく待った方がいいのか知らん
0577デフォルトの名無しさん
2016/08/14(日) 22:50:59.47ID:r/0nUjHR0578デフォルトの名無しさん
2016/08/15(月) 00:25:59.77ID:8W38K+Qq0579デフォルトの名無しさん
2016/08/21(日) 07:59:09.76ID:zhyP4GkP最終的にはMacのポジションを目指すのだろうからそれまでに直しておけば良い
テクノロジーカンファレンスがSurfaceで埋まる日は来るか
http://www.buildinsider.net/column/arton/003
0580デフォルトの名無しさん
2016/09/06(火) 18:28:00.80ID:G35PExvahttps://osdn.jp/magazine/14/05/23/200000
多数のDOS画面でお仕事する人向け
0581デフォルトの名無しさん
2016/09/06(火) 18:51:20.42ID:rT4OuLmzcmd単独よりは少し便利になるものの、
元々の日本語の表示の不具合(端が切れる)を引き継いでるからなぁ。
cmd完全互換のまともなシェルはないものかねぇ。
0582デフォルトの名無しさん
2016/09/07(水) 18:29:47.35ID:b6UGEvRF0583デフォルトの名無しさん
2016/09/07(水) 19:12:06.44ID:eCxhE93W使える命令などに違いがあるのでしょうか?
教えてください。
0584デフォルトの名無しさん
2016/09/08(木) 00:57:15.94ID:54d0WlHM違いは無いよ
DOSの時代からWin16の時代は拡張子はBATであり、
Win32の時代からMSはCMDに変えたがったみたいだが以前としてBATが主流となってるだけ
0585デフォルトの名無しさん
2016/09/08(木) 01:30:50.71ID:MGX2ZdyU例えば OS/2 だと bat にすると DOS互換ボックスでのバッチファイル動作で
cmd にすると OS/2 ネイティブ動作
0586デフォルトの名無しさん
2016/09/08(木) 02:06:01.27ID:54d0WlHMそうだったっけ?
OS/2は殆ど使ったことない(さわりだけ)んで、拡張子batが動作したかどうか忘れちゃったんだけど
(暗黙の了解でcmdでしか使ってなかった)
0587デフォルトの名無しさん
2016/09/08(木) 02:15:48.19ID:54d0WlHMそもそもDOS互換とか存在してなかった気もする
0588デフォルトの名無しさん
2016/09/08(木) 03:45:32.33ID:Jzexm0YP基本的には同じと思っていいけど厳密には少しだけ動作に違いがある
http://stackoverflow.com/questions/148968/windows-batch-files-bat-vs-cmd
0589デフォルトの名無しさん
2016/09/08(木) 04:05:36.46ID:PAzqK7FZ.cmd ruby -x でrubyのコード埋め込む為に使用する。シンタックスハイライトをruby向けに設定。
という超ローカルな使い分けをしている
0590デフォルトの名無しさん
2016/09/08(木) 21:40:41.34ID:5x3R57hbset STR="aaa"
if STR=="aaa"(
STR = "bbb"
echo !STR!
)
echo !STR!
echo %STR%
遅延環境変数が分からないのですが、自分の環境だと全て"aaa"になります。
どこが間違っているんでしょうか?
0591590
2016/09/08(木) 21:53:39.72ID:5x3R57hb・"bar"が出て上手く行かないケース
@echo off
setlocal enabledelayedexpansion
set foo2="bar"
if %foo2% == "bar" (
set foo2 = "hoge"
echo !foo2!
)
pause
・"hoge"が出て上手く行くケース
@echo off
setlocal enabledelayedexpansion
set foo="bar"
if %foo% == "bar" (
set foo="hoge"
echo !foo!
)
pause
この2つの違いが分かりません。
0592デフォルトの名無しさん
2016/09/08(木) 21:58:24.35ID:5x3R57hbfoo2と=の間に空白があるのが原因でした。
バッチは文字列を代入する際には空白があってはいけないのですね。
set foo2= "hoge"
としたら上手く行きました。
set /a foo2 = 10
では空白があっても行けたのですが、文字列の場合はダメなんですね。
0593デフォルトの名無しさん
2016/09/09(金) 03:51:09.43ID:LpeB3e0ia=b
a = b これはダメ
こういう点が、プログラミング言語としてはクソなんだよ。
PowerShell_ise を使いな
0594デフォルトの名無しさん
2016/09/09(金) 06:34:14.46ID:Sx9RRTJOそんな違いわかりたくもない
バッチファイルでif文をトラブルなく使う - Qiita
http://qiita.com/ejiw/items/8a6ac11c117b6695b6ca
バッチファイルでif文を使っていてハマったので、ハマらないための書き方と注意点をまとめてみた
解決方法
何も考えず必ず以下の形で書く。
if 条件 ( ←(1)
call :サブルーチン名 引数 ←(2)
) else if 条件 ( ←(3)
call :サブルーチン名 引数
) else ( ←(4)
call :サブルーチン名 引数
) ←(5)
0595デフォルトの名無しさん
2016/09/10(土) 14:10:07.42ID:WyiyFmBQダブルクォート記号を意図して含めたいならそういう記述もありだろうね
だけど、純粋に文字列だけ比較したいだけなら変数名も含めてくくって、あとは判定部分で整形する方が自由度がある
set
0596デフォルトの名無しさん
2016/09/10(土) 14:14:02.54ID:WyiyFmBQSET "foo= b a r "
IF "%foo%"==" b a r " (
IF "%foo%" == " b a r " (
のようにすれば前後の空白も含めて評価されるし、この場合どちらも同じ結果が得られる
なので、>>592の「バッチは文字列を代入する際には空白があってはいけないのですね。」は誤り
変数の文字列前後、if文のイコール記号の前後の空白の有無で意図しない比較結果になり得る記述は避けたほうがいいのは自明
環境変数の遅延展開に関しては、カッコで囲んだ複文の挙動を把握した上で適切に使う
環境変数はあとから再利用する性質上、意図しない文字や空文字になってしまうのが一番怖い
別解としては、call set "foo=hoge" があり、echo;%%foo%% などのようにパーセント記号を重ねても同じ結果が得られる
こちらは setlocal enabledelayedexpansion は不要、この方法は公式とは言えないのでユーザーのお好み次第といったところ
0597デフォルトの名無しさん
2016/09/11(日) 01:07:52.20ID:4x/hjQLWsqlite3 hoge.db "SELECT * FROM TEST" > nul よりも
sqlite3 hoge.db "SELECT * FROM TEST" > "c:\Temp\hoge.txt" のほうが
出力完了までの時間が短かったんですが、出力をnulに捨てるのって
普通にファイルに吐くより遅くなるもんなんでしょうか。
0598デフォルトの名無しさん
2016/09/11(日) 01:24:31.36ID:zfXOe+JX常にそうなるの?
たまたまじゃなくて?
db読み込みの時間とかが関係してきそうな気がするし
それにwrite時間は以外に掛からないんでファイルがでかくなければnulとの差はつかない
(read時間は掛かるし実行時間にかなりばらつきが出る、また2回目以降はキャッシュからになる)
0599デフォルトの名無しさん
2016/09/11(日) 02:05:36.54ID:zfXOe+JXちょっと試してみた
確かにnulの方が時間が掛かる
そこで、sqlite3の代わりに、type xxx.txt >yyy.txtで試してみた
やっぱりファイルに書き出すよりnulの方がはっきり時間がかかる
何故なのかは分からん、スマン
0600デフォルトの名無しさん
2016/09/13(火) 21:52:06.22ID:NwZGDC4j処理しますか?(Y/N)⇒処理⇒処理完了後F3キー押すとして終了
するツールを毎日ポチらないといけないのですが
txtにYとF3を書いてリダイレクトで自動入力すれば楽にポチれる気がするんですが
F3をtxtファイルにどう書けばいいのかわかりません、助けてください
0601デフォルトの名無しさん
2016/09/14(水) 06:17:54.15ID:xpMA1gBQ0602デフォルトの名無しさん
2016/09/14(水) 08:44:57.03ID:f2EPB9Jiuwscでやれば?
0603デフォルトの名無しさん
2016/09/14(水) 17:27:36.03ID:Jy6DKzEXありがとうございます
EXECでバッチファイル起動してYとF3入力してexit⇒ENTERで終了するようマクロ組みました
タイマー起動ソフトでUWSを指定時間に実行するようにしたので何もしなくてよくなりました
ありがとうございます
0604デフォルトの名無しさん
2016/09/19(月) 03:08:13.70ID:3gpWvjZ8schtasksでstartコマンドがうまく使えません
/tr "start フルパス実行ファイル名"
※パスにはスペース無しです
0605デフォルトの名無しさん
2016/09/19(月) 03:34:12.50ID:rks5/FmOcmd内部コマンドを起動するように登録するなら
"cmd /c start xxx"
だけど、単に
/tr xxx
じゃああかんの?(xxxはフルパスの実行ファイルなんでしょ?)
0606デフォルトの名無しさん
2016/09/19(月) 04:07:56.77ID:3gpWvjZ8速いレスポンスありがとうございます
おっしゃる通りどちらもいけました!
もともとスペースありのパスで悩んで
/tr "フルパススペース混じり" …1
/tr "\"フルパススペース混じり\"" …2
上記1.2から始まり詰まってましたが
お陰様でstartの使い方がわかりました
0607デフォルトの名無しさん
2016/09/19(月) 12:05:07.29ID:mqRkSqP8その場合は第一引数に空文字列入れると良い
start "" "c:\program files〜"
0608デフォルトの名無しさん
2016/09/22(木) 20:07:59.66ID:yIBGfr99start explorer
をバッチにしてエクスプローラ再起動に使ってたんだけど
最近explorer.exeが見つかりませんってなってkillできないんだけど何でだろう
タスクマネージャからなら止められるしPID指定でも止められるんだけど
0609デフォルトの名無しさん
2016/09/27(火) 11:38:03.47ID:clgfgzqk0610デフォルトの名無しさん
2016/09/28(水) 19:18:04.93ID:zhCs69qF@echo off
set a1=%%a2%%
set a2=%%a3%%
set a3=%%a4%%
set a4=%%a5%%
call echo %a1%
call echo %a1% | more
pause
結果は
%a3%
%a4%
なぜか表示が違う
パイプを使うと変数の展開が一回増えるようだ
0611デフォルトの名無しさん
2016/09/29(木) 00:33:45.25ID:RC/Dq8j5set a=1
echo %a%|(more|set a=2)
echo %a%
0612デフォルトの名無しさん
2016/09/29(木) 00:34:51.35ID:RC/Dq8j50613デフォルトの名無しさん
2016/09/29(木) 02:15:55.37ID:HmIZKCJuecho %a1% | more
%a2%
%a3%
0614デフォルトの名無しさん
2016/09/29(木) 02:29:13.86ID:HmIZKCJucall call echo %a1% | more
%a4%
%a5%
0615デフォルトの名無しさん
2016/10/07(金) 02:33:21.18ID:E4yfrV8y上記から/cccもしくはcccを抜き出す方法は有るでしょうか?
"最後のスラッシュから末尾までを出力"
の方法がわかりません…
サクラエディタでもかまいません…
0616デフォルトの名無しさん
2016/10/07(金) 02:39:36.76ID:E4yfrV8y追記ですが
"/"の数は変動します
0617デフォルトの名無しさん
2016/10/07(金) 03:13:06.25ID:PWoZvLStset token_number=1
:start
for /f "tokens=%token_number%,* delims=/" %%a in ("/aaa/bbb/ccc") do if "%%b"=="" (
set hoge=/%%a
) else (
set /a token_number=token_number+1
goto start
)
echo %hoge%
pause
0618デフォルトの名無しさん
2016/10/07(金) 03:33:35.13ID:RDmrItg+powershell -Command
0619デフォルトの名無しさん
2016/10/07(金) 03:34:29.48ID:RDmrItg+powershell -Command Split-Path -Path /aaa/bbb/ccc -Leaf
0620デフォルトの名無しさん
2016/10/07(金) 03:44:17.59ID:273HGXTNtmp に & や % 等々が入っていない、ダメな文字が無いという楽観的な状態なら
set tmp=/aaa/bbb/ccc/ddd eee
call %tmp:/=&set tailpart=%
echo %tailpart%
0621デフォルトの名無しさん
2016/10/07(金) 10:20:31.14ID:uWLqn+Rgこれ標準エラー出力で出力するのってどうやるんですか?
0622デフォルトの名無しさん
2016/10/07(金) 10:47:05.46ID:yoIkF7ck標準出力先を標準エラー出力先と同じになるようにリダイレクトしてやるとかかな
(意図がわからんからこれで解決するのかどうかは知らんけど)
echo xxx 1>&2
例
2>errout.txt 1>&2 echo エラー(err no=111)
0623デフォルトの名無しさん
2016/10/07(金) 11:05:50.41ID:yoIkF7ckやってることはあくまで出力先を同じにしてるだけなので、標準エラー出力のみを取り扱ってるわけではないことに留意
(なお 1> の 1 は省略可能なので、 1>&2 は >&2 と書くことも可能)
0624デフォルトの名無しさん
2016/10/07(金) 11:23:31.75ID:uWLqn+Rgecho bbb 1>&2
echo ccc
で試したところ望みどおりの動作になりました
ありがとうございます
0625デフォルトの名無しさん
2016/10/07(金) 11:44:29.04ID:5wS7M9ck案1:
FOR /F "delims=" %%I IN ("/aaa/bbb/ccc") DO ECHO %%~nxI
案2:
CALL :SUB "/aaa/bbb/ccc"
GOTO :EOF
:SUB
ECHO %~nx1
0626デフォルトの名無しさん
2016/10/07(金) 12:09:19.90ID:PWoZvLSt0627デフォルトの名無しさん
2016/10/08(土) 07:09:00.83ID:sXvXMvPuset "a=/aaa/bbb/ccc\ddd"
set "b="
call :x a b
echo "%a%"
echo "%b%"
pause
goto :eof
:x
setlocal enabledelayedexpansion
set "a=/!%1!"
set b=-1
:y
set "c=!a:~%b%,1!"
if "!c!" == "/" goto z
set /a b-=1
goto y
:z
set "c=!a:~%b%!"
endlocal & set "%2=%c%"
goto :eof
0628デフォルトの名無しさん
2016/10/09(日) 20:38:11.04ID:mq9cB08l7z.exeで展開してるんだけど、終了するまえに、
次の処理に行ってしまい、その後がエラーになる。
7z.exeの終了を待つには、どうしたらいいのですか?
>hoge.txtは必要。
start /wait 7z.exe x AAA.zip -oBBB >hoge.txt
では、hoge.txtが空だし、コマンドプロンプトの窓がもう一個開くし。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0629デフォルトの名無しさん
2016/10/09(日) 21:25:06.80ID:DFuD/t4tstart /B /wait "" 7z.exe x AAA.zip -oBBB -y >hoge.txt
てやれば窓は開かないけど、多分実行結果はstart無しの場合と同じだろう
解凍するまで待って制御が返ってるように思えるけど
その後エラーが出るとするなら、多分OSのファイル遅延書き込みの所為だろうから
ウェイトを入れるなり何なり待たさないといけないと思うよ
0630デフォルトの名無しさん
2016/10/10(月) 09:40:47.22ID:UJJq0Lfaありがとうございます。
10回くらいテストして、それ「start /B /wait "" 」でいけました。
0631デフォルトの名無しさん
2016/10/12(水) 15:15:40.33ID:CXMCNpcemkvとflvを入力に使いたいです
二重ループ以外に方法ありませんかね?
0632デフォルトの名無しさん
2016/10/12(水) 15:33:04.97ID:V1BPQ8PQ自分なら2行にコピペするがw
0633デフォルトの名無しさん
2016/10/12(水) 15:35:36.60ID:CyghQ6/+他にvが付くもの無ければ
0634デフォルトの名無しさん
2016/10/12(水) 15:38:43.19ID:CXMCNpceすみません
2行にコピペするとはどういうことですか?
>>633
私も考えたのですがwmvがありました
0635デフォルトの名無しさん
2016/10/12(水) 16:07:30.74ID:aOSR32QX0636デフォルトの名無しさん
2016/10/12(水) 16:12:00.02ID:YqqdfgOM*.mkvで処理と*.flvで処理と2行for文を書くという意味じゃないかな?
for /f "tokens=*" %%a in ('dir /b *.mkv *.flv') do 〜
とか
dir /b *mkv>files.tmp
dir /b *.flv>>files.tmp
for /f "tokens~*" %%a in (files.tmp) do 〜
del files.tmp
とか色々とか色々と出来るよ
0637デフォルトの名無しさん
2016/10/12(水) 16:51:21.25ID:k+jI1aQa以下のページにあるサンプルをベースに、dirに /s をつけてサブディレクトリも
対象とするようにしました。
バッチで自動的に作成したファイルを容量チェックして削除する方法ってありますか? (DOSプロンプト活用相談室LOG)
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/delerase/4-0062.html
実行してみると、0バイト以外のファイルも条件が成立してしまい、
動作してくれません。OSがwindows10のせいでしょうか。
FOR /F %%F IN ('dir /s /B') DO ( CALL :CheckFile %%F )
EXIT /B
:CheckFile
SET FileAttrib=%~a1
IF NOT %FileAttrib:~0,1%==d (
IF not "%~z1" == "0" (
ECHO "%1" はファイルサイズが %~z1 で、0 なので削除します。
REM DEL %1
)
)
EXIT /B
==をEQUに変えてみたり、ダブルクォートをつけたりしましたが変化なしでした。
どのように直せば、0バイトのみが引っかかるようにできるか、宜しくお願いします。
なお、上記コードは、安全のためdelはREMをつけたままです。
0638デフォルトの名無しさん
2016/10/12(水) 17:01:12.97ID:k+jI1aQa>IF not "%~z1" == "0" (
これは、notがないのが正常な状態です。
なにをやっても条件が成立してしまうので、
ためしにnotをつけて、論理が反転するか試したところ、
これも全部条件が成立してしまいました。
その実験をしたときの残骸のnotが残ってしまいました。
0639デフォルトの名無しさん
2016/10/12(水) 17:10:16.64ID:CyghQ6/+のように書く。==の両側にスペース入れたらダメ
0640デフォルトの名無しさん
2016/10/12(水) 17:14:15.79ID:CyghQ6/+CALL :CheckFile %%~fF
を試してみて
0641デフォルトの名無しさん
2016/10/12(水) 17:19:24.35ID:CyghQ6/+これ必要?
dir /a-d /b /s としておけば要らない
0642デフォルトの名無しさん
2016/10/12(水) 17:32:19.00ID:k+jI1aQaFOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )
EXIT /B
:CheckFile
SET FileAttrib=%~a1
IF %~z1==0 (
ECHO "%1" はファイルサイズが %~z1 で、0 なので削除します。
REM DEL %1
)
EXIT /B
実行結果
IF 1695606 == 0 (
"F:\TEST\file.txt" はファイルサイズが 1695606 で、0 なので 削除します。
0643デフォルトの名無しさん
2016/10/12(水) 17:37:43.49ID:h3rHiOkqとやると、%hoge%でダブルクォーテーションも読み込んでしまいます
対処法教えて下さい
0644デフォルトの名無しさん
2016/10/12(水) 17:44:13.80ID:X88zouZUfor /f "delims=" %%i in ('dir /a-d /b /s *.*') do if %%~zi EQU 0 del "%%~fi"
0645デフォルトの名無しさん
2016/10/12(水) 17:46:49.24ID:tJlO+qdhか
set hoge=hage te naiyo
そもそも "" でくくらない
0646デフォルトの名無しさん
2016/10/12(水) 17:54:18.24ID:YqqdfgOM本当にそんな表示なのか?
上の IF 1695606 == 0 ( を書いてるということはbatの展開された実行ステートメントを表示してるだけじゃないのか?
正確には
IF 1695606 == 0 (
ECHO "F:\TEST\file.txt" はファイルサイズが 1695606 で、0 なので 削除します。
REM DEL F:\TEST\file.txt
)
と4行表示されただけなんじゃないの?
それと、半角空白の存在するファイル名があったらエラーになるよ
"tokens=*"とか"delims="をつけて、引数は""で囲んで渡すようにした方がいい
(さらに^とかの文字もファイル名に含まれてる可能性があるなら引数渡しは諦めて環境変数で渡すようにする)
0647デフォルトの名無しさん
2016/10/12(水) 17:56:29.96ID:CyghQ6/+これで0バイトだけechoされるはずだと思うけど
>>643
set "hoge=hage te naiyo"
0648デフォルトの名無しさん
2016/10/12(水) 18:07:46.52ID:YqqdfgOMもし何らかの理由で""を付いたままで代入しなくてはいけないのなら、その後で取ることは出来る
set hoge=%hoge:"=%
とか
set hoge=%hoge:~1,-1%
とか
まあ後者は"が付いているかどうかチェックした方がいいけど
if ^%hoge:~0,1% equ ^" set hoge=%hoge:~1,-1%
0649デフォルトの名無しさん
2016/10/12(水) 18:12:36.27ID:CyghQ6/+0650デフォルトの名無しさん
2016/10/12(水) 18:13:42.95ID:k+jI1aQaすみません、こちらの勘違いでした。教えていただいたコードで動きました。
echo off していないため、条件が成立しないコードが表示されてるのを見て、
あたかも実行されているかのように勘違いしてるだけでした。
この手のトラブルが嫌いなので対象のファイル名に空白は入っていませんでした。
完成形ですが、空白が含まれているファイル名も処理する場合は、以下で大丈夫でしょうか。
echo off
FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )
echo 処理終わり。
pause
EXIT /B
:CheckFile
SET FileAttrib=%~a1
IF "%~z1"=="0" (
ECHO "%1" はファイルサイズが %~z1 で、0 なので削除します。
DEL "%1"
) else (
ECHO "%1" はファイルサイズが %~z1 で、削除しません。
)
EXIT /B
0651デフォルトの名無しさん
2016/10/12(水) 18:31:53.33ID:k+jI1aQa最初のforから全然進んでくれないようです。
core-i5で10分待っても開始されず。ディスクの能力じゃ無く、BATのCPU消費率が上がります。
>>647さんの書き方で、大量ファイルの処理時の挙動は変化するか、これから試してみます。
大量処理に適した書き方などがあったらご教示ください。
0652デフォルトの名無しさん
2016/10/12(水) 18:44:53.26ID:YqqdfgOMそんな大量のファイルは無いので定かではないけど、多分バッファが溢れてるんじゃないかと思う
一旦ファイルに書き出したらどうだろ?
dir /a-d /s /b>list.tmp
for /f %%F in (list.tmp) do
0653デフォルトの名無しさん
2016/10/12(水) 18:59:59.00ID:CyghQ6/+0654デフォルトの名無しさん
2016/10/12(水) 19:01:10.45ID:RjRHLuROありがとうございます
出来ました
それともう一つ
エンコードの進捗状況を表示する事ってできませんかね?
12/87(ファイル)みたいな感じで
0655デフォルトの名無しさん
2016/10/12(水) 20:02:06.24ID:nxsWiPWyforfiles /s /c "cmd /c if @isdir==FALSE if @fsize==0 del @file"
0656デフォルトの名無しさん
2016/10/12(水) 20:08:20.15ID:IaZq30Xaなにかいい方法ありますか?
0657デフォルトの名無しさん
2016/10/12(水) 20:19:09.72ID:WWSUEmVofor が速いとは言わないが forfiles は輪をかけて遅いから辛いんじゃないかな
0658デフォルトの名無しさん
2016/10/12(水) 20:31:06.50ID:YqqdfgOM大昔DOSにあったansi.sysのようにエスケープシーケンスが使えたら可能なんだけどね
噂じゃwinsows10でエスケープシーケンスが使えるようになったとかの話もあるけど真偽のほどはどうなんだろ
0659デフォルトの名無しさん
2016/10/13(木) 00:46:44.28ID:cRZfvb+W以下に修正したほうがいいけど、ざっと見ただけだから他にもあるかもw
FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )
↓
FOR /F
0660デフォルトの名無しさん
2016/10/13(木) 00:49:54.35ID:cRZfvb+W↓
FOR /F "delims=" %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile "%%~fF" )
IF "%~z1"=="0" (
↓
IF %~z1==0 (
ECHO "%1" はファイルサイズが
↓
ECHO "%~1" はファイルサイズが
DEL "%1"
↓
DEL "%~1"
サブルーチンへ引数を渡す際はダブルクォート記号が過不足なく評価されているか実行前に要テストね
それと、ifの数値比較についてはヘルプ読むべし。数字以外を含むと文字列比較になるから
0661デフォルトの名無しさん
2016/10/13(木) 01:11:54.49ID:nRww2f6Nもしファイル名が "a^b.txt" だったり、 "ab%cd%ed.txt" だったりしたらエラーになると思う
0662デフォルトの名無しさん
2016/10/13(木) 02:20:45.86ID:9ieIMwqBFOR /R %%F IN (*.*) DO ( CALL :CheckFile %%~fF )
にしたらマシになる?
0663デフォルトの名無しさん
2016/10/13(木) 02:28:09.62ID:9ieIMwqB%%~fF → "%%~fF"
0664デフォルトの名無しさん
2016/10/13(木) 02:30:01.50ID:nRww2f6N本来の目的だった半角空白のことを忘れたんか
0665デフォルトの名無しさん
2016/10/13(木) 08:14:45.67ID:CLiojDhVそんなのまで対応しないといけないなら vbs とか PowerShell にした方がいいと思う
0666デフォルトの名無しさん
2016/10/13(木) 19:02:37.99ID:tpWzBOlcつうか直接に del すりゃいいだけだろ
for /r %%i in (*) do if %%~zi == 0 del "%%~fi"
ファイル名に ^ とか % とか ユニコード特有文字とか有っても問題ない
あと、==の両側にスペースがダメとか意味不明
0667デフォルトの名無しさん
2016/10/13(木) 23:49:13.04ID:BSlfrai+この場合、ファイル名がaiueohoge.txtだった場合、aiueoだけを抜き出す方法有りませんか?
%%~naみたいな演算子?でお願いします
0668デフォルトの名無しさん
2016/10/14(金) 01:11:11.25ID:Ep7xlThW無理
一旦環境変数に入れて置換でhoge.txtを消し残りを取り出す事%fname:hoge.txt=%や
%fname:~0,-8%なら可能
set fname=%%~na
echo %fname:~0,-4%
0669デフォルトの名無しさん
2016/10/14(金) 03:21:39.34ID:onADalnLset
0670デフォルトの名無しさん
2016/10/14(金) 03:24:46.91ID:onADalnLsetlocal enabledelayedexpansion
:x
if not "!fname:~%b%,1!" == "*" set /a b-=1 & goto x
endlocal & set /a b=%b%+1
for %%a in ("%fname%") do set "c=%%~nxa" & call echo "%%c:~0,%b%%%"
0671デフォルトの名無しさん
2016/10/14(金) 20:38:01.10ID:YifyNonQset
0672デフォルトの名無しさん
2016/10/14(金) 20:40:05.91ID:YifyNonQset "fname=*hoge.txt" & set b=-1
setlocal enabledelayedexpansion
:x
if not "!fname:~%b%,1!" == "*" set /a b-=1 & goto x
endlocal & set /a b=%b%+1
for %%a in ("%fname%") do set "c=%%~nxa" & HOGE "%%c:~0,%b%%%"
ここでHOGEに処理を入れ、"%%c:~0,%b%%%"をファイル名として使えばいいんですかね?
それとfor文で入力に使った*hoge.txtのだけ*hogeだけ抜き出したい場合はどうすればいいんでしょうか
0673デフォルトの名無しさん
2016/10/14(金) 22:54:24.45ID:+Ryxbx0fcall echo %%c:~0,%b%%%
は環境変数の遅延展開を使わず展開させる方法だから、別の処理で置き換えるなら、
HOGE !c:~0,%b%!
のように!記号でくくる方向で(call foo はどのコマンドでも使えるわけではないため)
ファイル名の抜き出しは、パラメーターで調整できると思う
バッチパラメーターについては「call /?」あたりから
0674デフォルトの名無しさん
2016/10/14(金) 23:02:08.75ID:+Ryxbx0f0675デフォルトの名無しさん
2016/10/14(金) 23:39:49.51ID:Ep7xlThWに>>670が示してくれただけで
>HOGEに処理を入れ、"%%c:~0,%b%%%"をファイル名として使えばいいんですかね?
そんな質問されてもファイル名として使うのかどう処理するのかとか分かる訳ねーだろ
aiueoをリネームに使うのか?何がしたいのか分からん事には答えようがない
0676デフォルトの名無しさん
2016/10/15(土) 00:10:29.36ID:GrBj6Siaset "fname=*hoge.txt" & set b=-1
setlocal enabledelayedexpansion
:x
if not "!fname:~%b%,1!" == "*" set /a b-=1 & goto x
endlocal & set /a b=%b%+1
for %%a in ("%fname%") do set "c=%%~nxa" & call :y "%%c:~0,%b%%%" "%%c%%"
goto :eof
:y
echo hoge "%~1" "%~n2"
0677デフォルトの名無しさん
2016/10/15(土) 23:20:33.46ID:DDtj3KwGWindowsのタスクで指定時間した時間になったら、バッチファイルで指定した常駐ソフトを再起動(終了→起動)させたいのですが、
taskkill /f /im app.exe
start /MIN "" "C:\app.exe"
のようにして最小化(/MIN)で起動するようにすると、そのソフトは何故かウインドウのスクロールバーが何故か消えてしまいます。
なので一旦アクティブで起動させてスクロールバーを表示させてから最小化したいのですが、方法がわかりません。
taskkill /f /im app.exe
start "" "C:\app.exe"
で起動させたあと、アクティブなapp.exeをコマンドで最小化する方法があったら教えてください。
よろしくお願いします。
0678デフォルトの名無しさん
2016/10/16(日) 06:33:42.07ID:e+WiyjQCahkなら
IfWinExist ahk_exe app.exe
WinMinimize
0679672
2016/10/16(日) 10:52:23.32ID:lNEScQ2P何をやりたいのかと言うと、youtubeから落とした動画がhoge -【DASH】.mp4とhoge - 【DASH】.m4aとなっているので、
これを
ffmpeg -i hoge - 【DASH】.mp4 -vcodec copy -i hoge - 【DASH】.m4a -acodec copy hoge.mp4
とエンコードして、
hoge【DASH】.mp4をforで検索して、その拡張子を取ったものを入力として使い、出力ファイル名として、hoge.mp4としたかったのです
0680デフォルトの名無しさん
2016/10/16(日) 17:03:52.47ID:z1QBGf3Fset /p で改行を入れない文字列を出力して
コントロールコードのBSで消す
@echo off
set bs=[BS]
set delline=%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%
for /L %%i in (1,1,10) do (
set /p x=%delline%%%i/10 <nul
timeout /t 1 >nul
)
0681デフォルトの名無しさん
2016/10/16(日) 19:44:42.76ID:l/p5e+57set "fname=* - 【DASH】.mp4" & set b=-1
setlocal enabledelayedexpansion
:x
if not "!fname:~%b%,1!" == "*" set /a b-=1 & goto x
endlocal & set /a b=%b%+1
for %%a in ("%fname%") do set "c=%%~nxa" & call :y "%%c:~0,%b%%%" "%%c%%"
goto :eof
:y
ffmpeg -i "%~n2.mp4" -vcodec copy -i "%~n2.m4a" -acodec copy "%~1.mp4"
0682デフォルトの名無しさん
2016/10/16(日) 21:03:50.48ID:cWFHk7WJコントロールコードを挿入できない人用
set bs=[BS]
↓
for /f "delims=0" %%I in ('cmd /u /c echo 〈') do set bs=%%I
0683その1
2016/10/18(火) 10:49:49.38ID:492hutXa開始になっていないものをバッチで出力したい
とりあえずSCコマンドを使ってこんなことすると
sc \\HOGE query state= inactive |find "SERVICE_NAME" >hoge.txt
下記のような起動していないサービスの名前がテキストに吐かれる
SERVICE_NAME: AeLookupSvc
SERVICE_NAME: ALG
SERVICE_NAME: AppIDSvc
SERVICE_NAME: AppleChargerSrv
SERVICE_NAME: AppMgmt
SERVICE_NAME: aspnet_state
SERVICE_NAME: AudioEndpointBuilder
SERVICE_NAME: AudioSrv
SERVICE_NAME: AxInstSV
SERVICE_NAME: BDESVC
SERVICE_NAME: Browser
(以下 略)
0684その2
2016/10/18(火) 10:50:03.97ID:492hutXasc qc [サービス名]で表示される
sc \\HOGE qc AeLookupSvc |findstr "SERVICE_NAME START_TYPE"
この2つを組合せればフルオートで起動条件がスタートアップ状態が自動でありながら
開始になっていないものを出せるはずなんだが
「SERVICE_NAME:」←これが邪魔なんだ
教えてエロい人
これが消せたら下記でフルオートできるはず
@for /F %%=a in ('hoge.txt') do (
sc \\HOGE qc %%a
)
0685デフォルトの名無しさん
2016/10/18(火) 12:27:03.23ID:6Un6ctsT0686デフォルトの名無しさん
2016/10/18(火) 12:44:29.69ID:oqQNu1fO0687デフォルトの名無しさん
2016/10/18(火) 12:46:48.12ID:oqQNu1fO0688デフォルトの名無しさん
2016/10/18(火) 12:59:57.92ID:oqQNu1fO0689デフォルトの名無しさん
2016/10/18(火) 13:04:01.66ID:492hutXaオイラが知りたいのは
sc \\HOGE query state= inactive |find "SERVICE_NAME" >hoge.txt
で出力される下記を
SERVICE_NAME: AeLookupSvc
SERVICE_NAME: ALG
SERVICE_NAME: AppIDSvc
SERVICE_NAME: AppleChargerSrv
SERVICE_NAME: AppMgmt
(以下 略)
先頭の文字列「SERVICE_NAME:」を外して出力したいというのが主旨です
AeLookupSvc
ALG
AppIDSvc
AppleChargerSrv
AppMgmt
(以下 略)
0690デフォルトの名無しさん
2016/10/18(火) 13:39:39.76ID:oqQNu1fO0691デフォルトの名無しさん
2016/10/18(火) 13:41:17.91ID:l1RYXy70バッチから呼ぶならこんな感じ。
powershell -command
0692デフォルトの名無しさん
2016/10/18(火) 13:44:58.91ID:l1RYXy700693デフォルトの名無しさん
2016/10/18(火) 13:49:59.99ID:l1RYXy700694デフォルトの名無しさん
2016/10/18(火) 13:51:45.76ID:flBcMs6Gpowershell -command "Get-Service | ?{$_.StartType -eq 'Automatic' -and $_.Status -eq 'Stopped'}"
0695デフォルトの名無しさん
2016/10/18(火) 13:52:36.16ID:UJ1l7XRjfor /f "tokens=1,2 delims=:" %%i in ('sc \\HOGE query state^= inactive') do (
if "%%i"=="SERVICE_NAME" set name=%%j
echo;!name:~1!>hoge.txt
)
0696デフォルトの名無しさん
2016/10/18(火) 17:21:44.41ID:IWtXyw3/早速試してみたのですが・・・
まずパワーシェルの方は「$_.StartType -eq 'Automatic'」これが効かないようです
(「$_.Status -eq 'Stopped'」こちらは効いてます)
バッチの方は1件目の「WwanSvc」だけで終ってしまうようです
0697デフォルトの名無しさん
2016/10/18(火) 17:24:37.38ID:XKgIhtEU0698デフォルトの名無しさん
2016/10/18(火) 17:25:51.36ID:IWtXyw3/CL:Windows7プロ SP1(32bit)6.1.7601
SV:WindowsSV 2008R2 SP1(64bit)
0699デフォルトの名無しさん
2016/10/18(火) 17:59:25.19ID:oqQNu1fO>hoge.txtと上書きしてるんじゃ?>>hoge.txtと追記になってる?
0700デフォルトの名無しさん
2016/10/18(火) 20:40:09.09ID:UJ1l7XRjミスってた
>>699の通り。695追記になってない
×echo;!name:~1!>hoge.txt
〇echo;!name:~1!>>hoge.txt
0701デフォルトの名無しさん
2016/10/18(火) 22:14:57.94ID:N6eA0nOqただ、今度は同じサービス名が8回ずつ記録されるようになってしまいました
PCがおかしいのかなとwindows7とwindows8.1、そして懐かしのWindows2000で試しても
同じように8回ずつ記録されてしまうようです
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
AdobeFlashPlayerUpdateSvc
ALG
ALG
ALG
ALG
ALG
ALG
ALG
ALG
AppIDSvc
AppIDSvc
AppIDSvc
AppIDSvc
AppIDSvc
AppIDSvc
AppIDSvc
AppIDSvc
0702デフォルトの名無しさん
2016/10/18(火) 22:41:11.76ID:UJ1l7XRjsetlocal enabledelayedexpansion
for /f "tokens=1,2 delims=:" %%i in ('sc query state^= inactive') do (
if "%%i"=="SERVICE_NAME" (
set name=%%j
echo;!name:~1!>>hoge.txt
)
)
0703デフォルトの名無しさん
2016/10/18(火) 23:32:59.96ID:N6eA0nOq成功しました
カッコの有無でなんでこんなに違うんだろうと不思議です
0704デフォルトの名無しさん
2016/10/19(水) 01:04:29.51ID:OIm1eZAK”SERVIE_NAME”がある行でサービス名を取得するまではよかったが
それが無い行でも前に取得したサービス名を出力するようになってたんだわな
1つのサービスに付いて8行情報があったから8行ずつ出力されてた…と
0705デフォルトの名無しさん
2016/10/19(水) 01:12:10.60ID:cKBmHXZY0706デフォルトの名無しさん
2016/10/19(水) 07:11:53.90ID:Jbfd2Dlj0707デフォルトの名無しさん
2016/10/19(水) 07:56:59.52ID:OiCCOICb2chのバグだろ
書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" を、\" とエスケープすれば、どうかな?
0708デフォルトの名無しさん
2016/10/19(水) 12:52:41.93ID:nMHfZfYD結果として " となるはず。
0709694
2016/10/19(水) 13:03:34.54ID:fhJbq8nW0710デフォルトの名無しさん
2016/10/20(木) 18:11:41.71ID:fyY9mWCP0711デフォルトの名無しさん
2016/10/20(木) 18:13:00.13ID:1rA0OcU3遅くなってすいません
無事動きました
ありがとうございます
0712デフォルトの名無しさん
2016/10/20(木) 19:03:20.93ID:LBhOxlVJhttp://echo.2ch.net/test/read.cgi/unix/1439563321/777
自分も確かにこのケースだった。
0713デフォルトの名無しさん
2016/11/02(水) 06:03:13.96ID:CHmLMhVd“Microsoft Flow”が正式公開。さまざまなサービスを組み合わせた自動処理が可能 - 窓の杜
http://forest.watch.impress.co.jp/docs/news/1027809.html
0714デフォルトの名無しさん
2016/11/02(水) 06:40:56.27ID:w2Q1/JQP>さまざまなアプリやサービスを組み合わせた自動処理を作成できるクラウドサービス“Microsoft Flow”を正式公開した。
>“Microsoft Flow”は“○○したら××する”といった一連の手続き(ワークフロー)をビジュアルでデザインし、自動実行できるサービス
>料金は1ユーザー1カ月あたり750回までの実行であれば無料。有償プランであれば実行回数が増える
回数制限で有料とかゴミすぎ
0715デフォルトの名無しさん
2016/11/02(水) 09:32:20.20ID:5fVzD+K50716デフォルトの名無しさん
2016/11/02(水) 23:59:36.62ID:WEv5cQ3mワークフローなんか各社から出てるじゃん。
0717デフォルトの名無しさん
2016/11/04(金) 00:14:32.57ID:0ODaAY82しかも有料って
0718デフォルトの名無しさん
2016/11/04(金) 01:47:32.80ID:DvwqGnEZ0719デフォルトの名無しさん
2016/11/10(木) 06:45:58.93ID:+oUm9x6Yhttp://www.nurgo-software.com/products/tidytabs
0720デフォルトの名無しさん
2016/11/11(金) 12:54:54.72ID:ZYU/THNy全くの初心者なのでヒントが欲しいです
目標としては、
親フォルダAの中に、子フォルダ[aaa]あああ、[aaa]いいい、[bbb]ううう
があります
�@([aaa]あああ)の[ ]内の文字(つまりaaa)を自動で取得し、その名前の新規フォルダを作成。(つまりaaaという名前の新規フォルダ)
�Aその後、親フォルダA内の[aaa]が入っているフォルダを検索する
�B �Aで検索された複数フォルダを�@で作成されたフォルダに入れる
という流れを自動で行いたいです
0721デフォルトの名無しさん
2016/11/11(金) 14:42:02.48ID:OyxHpcMK親フォルダを引数で渡すとしての一例
@echo off
pushd %1
for %%i in ([*]*) do (
for /f "tokens=1* delims=[]" %%j in ("%%~i") do >nul 2>&1 (md "%%~j"&move /y "%%~i" "%%~j")
)
popd
0722デフォルトの名無しさん
2016/11/11(金) 15:12:14.98ID:p31+l1cx最初のforは/dつけないとだめでは
0723デフォルトの名無しさん
2016/11/11(金) 15:56:59.78ID:OyxHpcMKてっきりファイルだと思い込んでたよ
0724デフォルトの名無しさん
2016/11/13(日) 18:37:37.78ID:cer+jHW2初めてバッチファイル、コマンドプロンプトを勉強して作っているのですが、HTMLページから特定のURLを抜き出してバッチファイルに代入したいのですが、その場合はWSH等で抜き出さないと出来ませんでしょうか
0725デフォルトの名無しさん
2016/11/13(日) 20:15:27.03ID:YAp+h9P5HTMLページって具体的に何?
0726デフォルトの名無しさん
2016/11/13(日) 20:16:08.95ID:vGjlz1EpPowerShell使ったら?
0727デフォルトの名無しさん
2016/11/13(日) 20:19:41.15ID:cer+jHW2OPENREC.tvという動画サイトです
ここから動画ファイルのURLを吸い出して、エンコソフトをコマンドプロンプトに直接代入したいと思いまして・・・
>>726
すみません、この手の事は不慣れで・・・
PowerShellというものを初めて知りましたので、調べてみます
0728デフォルトの名無しさん
2016/11/13(日) 23:00:08.77ID:BL+CTUiW要件についてまったく何も知らない他人に
全部手作業でやってもらうよう依頼するとしたらどう説明する?
0729デフォルトの名無しさん
2016/11/14(月) 01:02:54.70ID:csZc9y3a0730デフォルトの名無しさん
2016/11/14(月) 13:10:56.92ID:vvHHVAL2ここでは手作業を自動化するのを支援することは出来るが
手作業で出来ないor内容がわかってない人はどうしようもない
0731デフォルトの名無しさん
2016/11/14(月) 14:36:44.38ID:O1UQmJEN1.PowerShellで.NETFramework使う
2.PythonやRubyなんかのllを使う
3.C#で簡単プログラミング
さあ選べ
0732デフォルトの名無しさん
2016/11/14(月) 15:07:34.34ID:WHs7zj8Ihtmlを取得して、url文字列を抜き出して、エンコソフトにオプション渡し
ができるのか?、という問いなので、さあ答えは
0733デフォルトの名無しさん
2016/11/14(月) 15:27:55.44ID:bnBDmUvfそこのサイトは知らんけど
>動画ファイルのURLを吸い出して
なんて書いてるけど今時動画ファイル直リンなんてあるの?手段すら分かってないんじゃない?
この手の技術に明るくないのであれば既存ソフトを用いてUWSCやAHKで自動化が現実的だと思う
rtmpdumpみたいなcuiソフトがそのサイトで使えるならバッチで出来ると思うが
0734デフォルトの名無しさん
2016/11/14(月) 15:29:20.63ID:9SfC86lSURLからダウンロード、エンコって、まず手作業でどういう手順で行うのか説明してくれないと
wshやPowershellでだって出来るかどうかも答えられないよ
0735デフォルトの名無しさん
2016/11/14(月) 19:02:24.40ID:GWnO6+Yj4のperlで・・・
>>732
まさしくそういう事です
>>733
ようはライブストリーミング動画が鯖側に保存してあって、それを録画再生するようなイメージです
それを、ffmpegというcuiソフトを使いtsファイルにしています
>>734
今までは動画ページからm3u8形式の格納されてるURLをソースから引っ張ってきて、ffmpegを使いtsファイルにしていました
その一連の動作が面倒なので、動画ページのURLを貼り付けるだけで動画ページのソースからm3u8ファイルのURLを検索→ffmpegにm3u8ファイルのURLと動画ファイル名をコマンドに代入し、そのままソフトを走らせるというバッチファイルを作りたいと思っております
0736デフォルトの名無しさん
2016/11/14(月) 19:40:40.70ID:kXxSR+Dw人に聞くならまず正しい日本語で頼む
> 今までは動画ページからm3u8形式の格納されてるURLをソースから引っ張ってきて
君には動画ページとかソースが何者かがわかってるんだろうけど、他の人にはそれが何者なのか?どこから与えられるのか?とか全然わからない
0737デフォルトの名無しさん
2016/11/14(月) 20:28:41.10ID:8ZP1uHGRその動画サイトとやらを教えられない理由があるなら
先に説明しておく方が親切だよ
0738デフォルトの名無しさん
2016/11/14(月) 20:35:09.15ID:GWnO6+Yj動画ページはどこを見ても同じソースだと思うので深く考えず、URLを載せなかっただけですがやはり載せた方がよろしいでしょうか?
divタグ内に変数で各情報が載っておりますが、そこは重要ではなく>>732が仰ってる通りです
0739デフォルトの名無しさん
2016/11/14(月) 20:51:56.98ID:sZZGpXNZ普段使いのcURLというCUIなダウンローダーで試した、使いたいツールがあるならお好みでどぞ
https://curl.haxx.se/
https://bintray.com/artifact/download/vszakats/generic/curl-7.51.0-win32-mingw.7z
Win32 - GenericにあるSSL, SSH対応版ね
前提として、外部ツールの検索パスは設定済みとする
バッチファイルの引数としてURLをひとつ渡す。例: batchfile.bat https://www.openrec.tv/movie/TvWlSwoCUOI
ここから
@echo on
setlocal ENABLEEXTENSIONS
cd /D %~dp0
@rem 引数有無と引数名チェック
if "%~1"=="" goto ERROR
echo;%1|findstr /R /C:"^http" /C:"openrec" >NUL||(echo "%1" を処理できません) && goto ERROR
@rem URLのアドレスとHTMLを環境変数へ設定
set ADDR=%1
for %%I in (%1) do set HTML=%%~nxI
@rem HTMLダウンロード
curl -L --max-redirs 10 -R -O %ADDR%
@rem HTMLから文字列抽出
for /F "tokens=2 delims=<>| " %%I in ('type %HTML%^|findstr /R /C:"<title>"') do set TITLE=%%~I
for /F "tokens=2 delims=, " %%I in ('type %HTML%^|find /I "m3u8"') do set TARGET=%%~I
echo ffmpeg -c copy "%TITLE%.ts" -i "%TARGET%"
pause
exit
ここまで
0740デフォルトの名無しさん
2016/11/14(月) 20:56:46.40ID:sZZGpXNZ中略
echo ffmpeg -c copy "%TITLE%.ts" -i "%TARGET%"
pause
exit
:ERROR
echo 引数が無効のため処理できませんでした
pause
exit
ここまで
0741デフォルトの名無しさん
2016/11/14(月) 21:08:57.72ID:nGSer73d連番ファイルとか今までperlやbashでスクリプト書いてたのがアホらしい
0742デフォルトの名無しさん
2016/11/14(月) 21:15:57.14ID:sZZGpXNZ追伸、安全対策としてcurl処理のすぐ下に条件分岐も追加しておいてほしい
@rem HTMLダウンロード
curl -L --max-redirs 10 -R -O %ADDR%
if not %ERRORLEVEL%==0 goto ERROR
0743デフォルトの名無しさん
2016/11/14(月) 21:28:24.00ID:GWnO6+Yjが、一つわがままを言わせてもらうとやっぱり外部バイナリなりを使わないと出来ないですか・・・
どのPCでもすぐに使えるようにしておくと楽だなーと思ったのがきっかけだったので・・・
0744デフォルトの名無しさん
2016/11/14(月) 21:35:57.24ID:4gwDzXsTそれでも外部バイナリに頼らないでhttpダウンロードしたいっていうのなら
bitsadmin /transferって手がなくはないけど
0745デフォルトの名無しさん
2016/11/14(月) 21:37:40.26ID:sZZGpXNZbitsadmin.exe があるけど、拡張子がないサイトだと無理っぽかった、俺環かもだが
試してダメだったためcurlに書き換えた
0746デフォルトの名無しさん
2016/11/14(月) 21:38:23.41ID:GWnO6+Yjそれで、一時はWSHでjavascriptでHMTLをダウンロードしようかと考えていました
0747デフォルトの名無しさん
2016/11/14(月) 21:58:48.06ID:4gwDzXsTそれは知らなかった
そうすると後はPowerShellとか
powershell -C "$h = Invoke-WebRequest http://example.com; $h.Content"
0748デフォルトの名無しさん
2016/11/15(火) 08:29:35.25ID:bLa91iv60749デフォルトの名無しさん
2016/11/16(水) 04:24:03.14ID:tgJZOdTtサブディレクトリ含め"abc"フォルダのパスを列挙したかったんだけど
子に"abc"がある時と無い時で挙動が全く変わる
子に"abc"が無ければ望み通りの結果になるけど
子に"abc"があるとそこで dir /ad /b /s されて全てのディレクトリが列挙される
"*abc"だと"zabc"も出て来るし
"*\abc"や"C:\TEST\*\abc"は構文error
if exist "abc" で例外処理しないとダメ?
何かサクッと出来る方法があるならお願いします
0750デフォルトの名無しさん
2016/11/16(水) 05:28:34.82ID:g04DIhTd0751デフォルトの名無しさん
2016/11/16(水) 06:28:47.52ID:tgJZOdTtそれやると何故かカレントディレクトリは C:\TESTなのに (echo %cd% で確認)
ドライブ全体から検索してるのか C:\Users や C:\Program Files 配下の abcディレクトリまで表示されるんだけど Win10
0752デフォルトの名無しさん
2016/11/16(水) 09:56:14.36ID:l4m+U27Hdir /ad /s /b | findstr /r \abc$
0753デフォルトの名無しさん
2016/11/16(水) 16:58:26.02ID:tgJZOdTtdir /ad /b /s | findstr /r "\\abc$"
これで行けそうかな。ありがとう
/s スイッチの時フルパスで無ければ強制的にディレクトリ名orファイル名と見做してくれればいいのに
子にあると対象パスの省略形と見なし、無ければ検索するディレクトリ&ファイル名になるとか罠もいいところだわ
dir /ad /b /s "\abc"
これだとカレントディレクトリが無視されてドライブ全体?からabcフォルダが検索されるんだけど理由が分かる人が居たら教えて下さい
0754デフォルトの名無しさん
2016/11/16(水) 19:53:01.57ID:G/QgDslQfor /r %%i in (.) do if "%%~nxi" == "abc" echo "%%~fi"
\abc みたいに先頭に \ があるとそれはルートを示すんだよ
DOS の頃から同じ仕様なんだけど
0755デフォルトの名無しさん
2016/11/16(水) 20:29:10.66ID:G/QgDslQABC とか Abc とか abC とか有ったら /i を追加
for /r %%i in (.) do if /i "%%~nxi" == "abc" echo "%%~fi"
0756デフォルトの名無しさん
2016/11/16(水) 20:36:19.30ID:tgJZOdTtてな場合nameの末尾にスペースが入ると意図した結果にならず
dir /ad /b /s | findstr /e "\%name%" で解決出来ました
>>753
for /r とif での方が間違いが無さそうですね。ありがとう
"\abc" は、まず dir /ad /b /s "C:\abc" とドライブ省略形の対象ディレクトリと見做して
対象が無ければ検索するディレクトリ名&ファイル名として扱われている感じなのかな
0757デフォルトの名無しさん
2016/11/16(水) 22:35:57.05ID:fww2Eit8指定ディレクトリが存在してたらこの通りで他のディレクトリの下は対象外なんだが
存在しないと他のディレクトリの下へ探しにいくんだな
気をつけないといけないな
実行速度は遅いだろうが
forfiles -s -mabc -c"cmd /c if @ISDIR==TRUE echo @PATH\@FILE"
0758デフォルトの名無しさん
2016/11/17(木) 01:33:10.64ID:45hMt1B7dir .\abc /ad /b /s
カレント配下ならドット付けとくんじゃないの
0759デフォルトの名無しさん
2016/11/17(木) 01:41:34.94ID:3AVvQ2An0760デフォルトの名無しさん
2016/11/18(金) 00:23:10.73ID:MVrqW6/3for /r /d %%i in ("abc.*" "xyz.*") do if "%%~xi"=="" echo "%%~fi"
0761デフォルトの名無しさん
2016/11/18(金) 05:45:03.27ID:aprTvklxは?
0762デフォルトの名無しさん
2016/11/18(金) 07:12:41.73ID:MVrqW6/3dir /ad /b /s abc.*
で良さそう
0763デフォルトの名無しさん
2016/11/18(金) 15:43:00.69ID:MssNdFsD>>762
"abc.*"だと"abc."が最低条件になって"abc"は除外されるものだと思ってたけど"abc"も出てくるね
実際は末尾"."のフォルダは作れないから拡張子の付いているフォルダしか出ないと思ってた
なんで???"."て特殊なの?ちょっと目からウロコ
0764デフォルトの名無しさん
2016/11/18(金) 16:29:03.81ID:TqE/rt71abc. = abc
Windowsになって複数のドットも付けられるようになったが
ドット2つ使うとファイル管理領域も2倍使う結果に
0765デフォルトの名無しさん
2016/11/18(金) 16:44:12.24ID:MssNdFsDabc.==abc
となる理由が分からない
ドットが区切り記号だからファイル名(文字列)と見做さず比較の際に無視されるとかなのかな?
0766デフォルトの名無しさん
2016/11/18(金) 16:52:38.55ID:TqE/rt71ドットはその管理領域のどこにも書き込まれない
単に区分けする識別子の役割りしか持たない
つまり、管理上は、ファイル名=abc,拡張子=NULLってなってる
だからabc.とabcの見分けは付かない
エクスプローラでファイルをabc.で作成したってabcファイルが作られるだけ
0767デフォルトの名無しさん
2016/11/18(金) 17:06:48.25ID:TqE/rt71LFNではドットもそのまま入ってる
0768デフォルトの名無しさん
2016/11/18(金) 17:12:57.12ID:MssNdFsD>ドットはその管理領域のどこにも書き込まれない
>管理上は、ファイル名=abc,拡張子=NULL
>だからabc.とabcの見分けは付かない
詳しい説明をありがとうございます
納得出来ました。もうなんと言って良いのやら
ひとつ理解が深まりました。ドラクエのレベルアップの音が鳴り響いた気分です
0769デフォルトの名無しさん
2016/11/18(金) 17:24:08.15ID:MssNdFsD0770デフォルトの名無しさん
2016/11/18(金) 18:07:23.95ID:TqE/rt71ドットだけなら削除する仕様なんだろう
0771デフォルトの名無しさん
2016/11/18(金) 21:00:10.73ID:TqE/rt71md aaa
cd "aaa....."
md "abc. . . " (エクスプローラでのフォルダ・ファイル作成も同じ)
dir "abc.."
dir "abc..."(abc..とは異なる結果に)
0772デフォルトの名無しさん
2016/11/19(土) 03:25:52.98ID:JjiTnU56# すれ違いですまないが
apt-get moo #に見えてきた
echo "Enter to Exit"
read wait
0773デフォルトの名無しさん
2016/11/19(土) 04:02:30.76ID:6BFx2XsN0774デフォルトの名無しさん
2016/11/19(土) 10:40:41.73ID:I/7/X0k0英才・出木杉
・・・・板違い
0775デフォルトの名無しさん
2016/11/19(土) 11:47:06.46ID:HaGDkE41合ってるよ
短い名前(いわゆる 8.3形式)ではカレントディレクトリの "." と ".." を除いて "." は記録されない
https://ja.m.wikipedia.org/wiki/8.3%E5%BD%A2%E5%BC%8F
LFN ではそのまま Unicode で記録される
0776デフォルトの名無しさん
2016/11/20(日) 01:32:41.69ID:5hQ1kNDg一時変数の名前に使うとちょっと便利かも
0777デフォルトの名無しさん
2016/11/20(日) 08:06:59.15ID:plO26YRe0778デフォルトの名無しさん
2016/11/20(日) 22:07:31.97ID:mYrLDeuJバグの元だろ
0779デフォルトの名無しさん
2016/11/21(月) 02:59:43.79ID:bNk8tUAy0780デフォルトの名無しさん
2016/11/21(月) 18:40:20.55ID:1UsqdqxTfossBytesに11月19日(米国時間)に掲載された記事「Microsoft Replaces Command Prompt
With PowerShell As Windows 10 Default Shell」が、Windows 10のデフォルトシェルが
コマンドプロンプトからPowerShellに変更されると伝えた。Windows 10 Insider Build 14971で
すでに入れ替えが実施されたと説明がある。
Windows 10 Insider Build 14971では、これ以外にもMicrosoft EdgeでEPUB電子ブックを読む
機能や新しいPaint 3Dアプリケーションの導入などが実施されている。
(後略)
http://news.mynavi.jp/news/2016/11/21/374/
0781デフォルトの名無しさん
2016/11/21(月) 19:58:33.06ID:4eyhD8wVまあそろそろいいかなって思うわ
慣れれば PowerShell めっちゃ便利やし
0782デフォルトの名無しさん
2016/11/22(火) 16:32:55.50ID:OivDuOyCおもしろい、どうなるのだろう
0783デフォルトの名無しさん
2016/11/23(水) 04:53:34.68ID:lMEr/SWaset errorlevel=5 などバッチ内で errorlevelを自分で設定する場合は if errorlevel文は使えない
if %errorlevel% GEQ 1 などであれば可
0784デフォルトの名無しさん
2016/11/23(水) 09:54:12.77ID:pZmHnyz7最新のヤツでもマトモに動かせないのに
0785デフォルトの名無しさん
2016/11/24(木) 00:02:10.88ID:b21vlpofありがとうございます
返信遅くなりました
ただ、せっかくヒントを頂いたのですが、想像より自身のレベルに見合わないスクリプトでした。実際につくるのは先になりそうです……
0786デフォルトの名無しさん
2016/11/24(木) 00:50:33.49ID:aisAFXaT>>721-722 はヒントじゃなくて720の要件の全部だぞ
721をbatで保存してそのbatに親フォルダAをドロップすれば720の通りになる
0787デフォルトの名無しさん
2016/11/26(土) 00:47:02.26ID:61EwoExFありがとうございます!できました
>>722の方が言っていた直しが正しく行えなかっただけでした
皆さん本当にありがとうございます
自分で書けるようにもなりたいのですが、皆さんどのようにバッチファイルを学んだのでしょうか
サイトなどを回ってもなかなか進まなくて……
0788デフォルトの名無しさん
2016/11/26(土) 02:10:39.28ID:CoCq2KiGset /?
この二つ読んでわからないところをぐぐる
0789デフォルトの名無しさん
2016/11/26(土) 04:48:01.93ID:0eLSGHGVコマンド一覧を載せてるサイトを見てどんなコマンドがあるのか一通り目を通す(暗記までする必要なし)
/?でヘルプ見ながら書いて一つ一つ試す
pauseを挟みつつ期待した通りに動いてるか確認しながら書いていく
分からなければここで質問
自分の場合、リダイレクトとかエスケープとかcall set で遅延環境変数を使わない方法とかはここで教わった
何をやっているのか分からないものは必ず解読するようにすれば覚えていける
動作を理解していないとテストでは問題無く動いても本番でエラーになる事もあるからファイル操作させたりする場合は予めバックアップを取る
処理対象が大量にある場合などは1度に全てを処理せず何度かに分ける
721で難しそうなのはforのみ
最初のforで対象フォルダ("[*]*"にマッチするもの)を抽出してる
for /d %%i in ([*]*) do echo %%i
と分解してみれば分かりやすい
for /f "tokens=1* delims=[]" %%j in ("%%~i") do
delims=[] は "[" "]" の文字を区切り文字に指定
tokens=1* は1つ目のトークンを%%jに残りを%%kに
"[aaa]あああ"であれば %%jに"aaa"が %%kに"あああ"が入る
md "%%~j"&move /y "%%~i" "%%~j"
フォルダ作成&移動
"[]あああ"なんてのがあると想定していない"あああ"フォルダに移動になるから注意ね
0790デフォルトの名無しさん
2016/11/27(日) 09:52:07.02ID:mLcTWF4w同一フォルダ内にある複数ファイル
a.jpg、あ.jpg、1.jpg等を一括で001-a.jpg、002-あ.jpg、003-1.jpgに連番を付加する
batファイルを教えて下さい!
0791デフォルトの名無しさん
2016/11/27(日) 11:17:31.27ID:2v7FHJZn普通の昇順降順ではこの順番にならないけど
0792デフォルトの名無しさん
2016/11/27(日) 11:19:13.96ID:mLcTWF4w普通の昇降順でお願いします。
0793デフォルトの名無しさん
2016/11/27(日) 11:33:53.80ID:2v7FHJZn例えば、
a.jpgと001-a.jpgの二つのファイルがあったら
先に001-a.jpgをリネームして001-001-a.jpgにしないと
ファイル名が重複してリネームできなくなるし
(さらに001-001-001-a.jpgがあったりすると...)
0794デフォルトの名無しさん
2016/11/27(日) 11:57:08.03ID:mLcTWF4wこの前作ったのですが誤ってファイルを消してしまって(泣
0795デフォルトの名無しさん
2016/11/27(日) 12:22:44.82ID:2v7FHJZn正常系だけでいいのなら
@echo off
pushd %1
set n=0
for /f "delims=" %%i in ('dir /b /on *.jpg') do (
set /a n+=1
call set nn=00%%n%%
call set nn=%%nn:~-3%%
call ren "%%~i" %%nn%%-"%%~i"
)
popd
0796デフォルトの名無しさん
2016/11/27(日) 12:47:37.07ID:3PyehhaBというような努力の跡がほしいなぁ
0797デフォルトの名無しさん
2016/11/27(日) 15:20:44.02ID:V1m99halpushd "%~dp1"
set n=1001
:ARGCHK
if "%~1"=="" pause &exit /b
ren "%~1" "%n:~-3%-%~nx1"
echo.
echo "%~nx1"
echo "%n:~-3%-%~nx1"
set /a n+=1
shift &goto :ARGCHK
選択ファイルを送るやバッチにD&D。001から999まで
Winの仕様によりD&Dの際は先頭ファイルを掴まないと順番が狂うので注意
0798デフォルトの名無しさん
2016/12/04(日) 12:46:34.73ID:RTx2BH8+ありがとうございます!返信遅くなりました
とくに799の方、具体的に話していただいて本当に助かりました。
0799デフォルトの名無しさん
2016/12/04(日) 16:10:49.30ID:J7/x1rKh0800デフォルトの名無しさん
2016/12/04(日) 19:03:21.48ID:rwQpbrj50801デフォルトの名無しさん
2016/12/10(土) 00:17:50.34ID:CO5JTr10if not exist "title.txt" exit /b
for /f "usebackq delims=" %%a in ("title.txt") do (
ren "%~1" "%%~a%~x1"
shift
)
forの中でshiftが働きません
どう書けば良いでしょうか?
選択ファイルをドラッグ&ドロップしてtitle.txtの順通りにリネームしたいです
0802801
2016/12/10(土) 14:16:28.41ID:CO5JTr10@echo off
pushd "%~dp1" || exit /b
if not exist "title.txt" exit /b
:LOOP
if "%~1"=="" pause &exit /b
for /f "usebackq %SKIP%%N% delims=" %%a in ("title.txt") do (
ren "%~1" "%%~a%~x1" || (echo "%~1" "%%~a%~x1"&pause &exit /b)
goto :NEXT
)
:NEXT
if not defined SKIP set SKIP=skip=
set /a N+=1
shift &goto :LOOP
0803デフォルトの名無しさん
2016/12/10(土) 15:09:17.17ID:ga5ibtHW式展開時に変数が内容の文字列に置き換わってしまい変数の意味を失う
@echo offを取って表示させたらわかるだろう
面倒なのでヒントだけ
for %%a 〜 do (
set b=%%a
call echo %%a - "%%~1" - %%b%%
shift
)
0804デフォルトの名無しさん
2016/12/10(土) 16:20:43.39ID:CO5JTr10ありがとうございます
callで遅延展開風にする場合%で囲むと思っていたので
call ren "%%~1%" "%%~a%%~x1%" と書いていて出来ませんでした
call ren "%%~1" "%%~a%%~x1" と書けば良かったのですね
%で囲むではなく「%を重ねる」と覚えるようにします
0805デフォルトの名無しさん
2016/12/10(土) 16:27:31.21ID:ga5ibtHW%%→%になるっていうことなんだよ
(これは%を表記する方法として覚えるけど)
set a=echo hoge
call %%a%%
call call %%%%a%%%%
0806デフォルトの名無しさん
2016/12/11(日) 10:51:05.79ID:HwfbXu/f引数や変数を遅延展開するのは無理あるよ
あらかじめ環境変数をセットしたものが対象であり、どのコマンドにも適用できるわけじゃない
パーセントを前方に重ねるのはバッチ上の書式、一重囲みが環境変数、call command 二重囲みが遅延展開というように意味が異なる
よくわからなければエクスクラメーション記号にするか、カッコを使った複文を避けてサブルーチンに渡す、など別の方法をとる
0807デフォルトの名無しさん
2016/12/11(日) 15:29:30.80ID:wBKcLq5q式評価が、実行時とcallの2回実施される
一回目の式評価ではまだ変数展開が行われずに残ったままにしたい
ってのが%%にする理由
0808デフォルトの名無しさん
2016/12/11(日) 15:39:49.38ID:wBKcLq5q形式の'command'の部分、ここにも式評価が入ることが結構忘れられる
0809デフォルトの名無しさん
2016/12/11(日) 16:35:43.66ID:wBKcLq5qcommandにパイプやリダイレクト記号を書くような場合は
^| や ^>とかのように'^'を付けないとエラーになるから忘れるということは無いだろうが
忘れる場合ってのは、>>517や>>532のような場合のことで
元のように%一つにしておくと何が起き得るかは"ab%cd%ef"とかが入ってる場合を考えれば解かる
0810デフォルトの名無しさん
2016/12/11(日) 22:14:02.08ID:iHWHaBgdテキストファイルに含まれるこれらのファイル名に使えない文字を全角文字に置換したいのですが
バッチで試してみたところ"*は無理でした
バッチから使えるcuiソフトなどで良いものや何か方法があれば教えて下さい
あ/あ "abc"
など括弧のように対応する"がある場合は、あ/あ “abc”
あ/あ a"
など対応するものが無ければ、あ/あ a”
みたいに出来れば理想です
0811デフォルトの名無しさん
2016/12/11(日) 22:19:57.19ID:iHWHaBgdが何か分かり難くなってますが
左側が左ダブル引用符という下から上へコロン打ってるやつで
右側が右ダブル引用符で上から下へのコロンです
0812デフォルトの名無しさん
2016/12/14(水) 00:05:22.68ID:vS/jNHEEというのは、EdgeのURLを取得するのはかなり面倒なので
でも netstat の情報は1分以上遅延するので、できれば数秒で知りたい
0813デフォルトの名無しさん
2016/12/14(水) 00:51:13.45ID:/GnWlzD4netstatそんなに遅れるか?
名前解決に時間が掛かってるんなら-nを付けて数値のみで表示させてみては?
0814デフォルトの名無しさん
2016/12/14(水) 01:19:09.19ID:vS/jNHEEなるほど、-nなら一瞬でしたw
名前で反応したかったので、-fにしてました
0815デフォルトの名無しさん
2016/12/14(水) 01:31:44.57ID:/GnWlzD4普通名前解決に秒単位なんてかからないよ
自分のプロバイダのところのDNSサーバー使ってるか?
0816デフォルトの名無しさん
2016/12/14(水) 01:54:27.20ID:vS/jNHEE特に何もしてないので、プロバイダのDNSだと思います
普段は4つですが、ブラウザ開くと1ページでも何十個も出てきますね
よく見ると、一瞬で何十個もリストアップされる場面と、ひっかかる場面があって、相手先によるようですね
0817デフォルトの名無しさん
2016/12/14(水) 03:29:46.39ID:PdV20HuVファイル名には、半角英数字と、_ アンダーバーだけを使うこと
バグるアプリがあるから、それら以外の文字は使うな
0818デフォルトの名無しさん
2016/12/14(水) 04:28:14.68ID:/GnWlzD4良いものがあるかどうかは俺は知らんよ(人に探させずに自分で探すのがいいだろう)
PowerShellやWSHでやる分にはそれくらいは出来るだろうけど
ファイル名にはいろいろ落とし穴があるからなあ
長さ制限とか、con,com1等のデバイス名とか後につくピリオドや半角空白とか
com1. ..txt
とか作れない
0819デフォルトの名無しさん
2016/12/14(水) 17:45:01.83ID:vFnJFYnV具体的には最近のJavaインストールすると、
システムの環境変数PATHの先頭に余計なもの追加しやがるので
それを削除するスクリプト書きたいんだよね。
設定は setx 使えばいいらしいんで、参照さえできれば削除できるかなーと。
0820デフォルトの名無しさん
2016/12/14(水) 17:55:14.06ID:puNU7ctc個人的には reg export 使ってファイルでごにょるのが好み
0821デフォルトの名無しさん
2016/12/14(水) 21:30:56.66ID:PdV20HuV環境変数PATHを表示する
$Env:Path
設定は、
$str = ";C:\Program Files\Internet Explorer\"
set-item -path env:path -value "$Env:Path + $str" -WhatIf
-WhatIf を付けているので、実際には実行されないで、結果を見れる
0822デフォルトの名無しさん
2016/12/14(水) 23:47:39.26ID:vFnJFYnVさんくす
0823デフォルトの名無しさん
2016/12/15(木) 22:24:24.35ID:Jry/Bq760824デフォルトの名無しさん
2016/12/15(木) 23:46:26.73ID:Jj9qQdSY0825デフォルトの名無しさん
2016/12/16(金) 00:25:58.77ID:EPzN1wXRそろそろPowershell覚えた方がいいんかナー
0826デフォルトの名無しさん
2016/12/16(金) 03:59:28.83ID:rja7Rz9P0827デフォルトの名無しさん
2016/12/16(金) 19:20:13.39ID:UvIhWraOただ各所にトリッキーなトラップがあるのと比較演算子が -eq とか -lt とかなのがいまだに慣れない
0828デフォルトの名無しさん
2016/12/17(土) 20:01:48.32ID:rAxcOYFzPowerShellはストアアプリの駆除がメインだな
0829デフォルトの名無しさん
2016/12/18(日) 08:18:40.79ID:qKtu6SDf比較演算子がまともに使えなくなったのが痛い
PowerShellではその悪習を断ち切って欲しかった
0830デフォルトの名無しさん
2016/12/18(日) 11:49:41.76ID:djwC/OhbPowerShellでヘンテコな構文を導入したところで、
マイクソシネって言われるだけじゃん。
悪臭というなら、パス区切り文字の\だろ。
0831デフォルトの名無しさん
2016/12/18(日) 15:58:05.60ID:oHmdKz4q0832デフォルトの名無しさん
2016/12/18(日) 16:00:06.55ID:oHmdKz4q『 [ 』と『 ] 』ね。
0833デフォルトの名無しさん
2016/12/19(月) 12:20:52.68ID:H16UOEk60834デフォルトの名無しさん
2016/12/19(月) 21:24:30.96ID:j5IwDTpi0835デフォルトの名無しさん
2016/12/19(月) 22:09:00.93ID:EFgj4hJx八百屋なんて、そういうのがネタになっている商店街か、
近くに田畑があるようなところでしか見なくなったよ。
ほとんど全ての街ではスーパーでいいからな。
そう考えると、花屋は頑張っている。
未だにそれなりの数が残っているよな。
ま、スーパーの置き場所は限られているからか。
あとは客ひとりの利益率も悪くないんだろうなあ。
0836デフォルトの名無しさん
2016/12/23(金) 13:16:48.65ID:C13rqdFY0837デフォルトの名無しさん
2016/12/23(金) 13:19:26.61ID:C13rqdFY自身にマウントされてるドライブ/フォルダ名を指定してその対象がローカルドライブか否か判別できるコマンドってありますか?
『net use ドライブレター』でCIFS/WebDAVでマウントされた物かそうでないかは判断できるけど、
Dokanとかでマウントされた物も含めて、ネットワークドライブ全般を判別したいです。
(ただiSCSI/FCとかのブロックデバイスは仕方ないかなと思ってます)
よろしくお願いします。
0838デフォルトの名無しさん
2016/12/23(金) 20:54:24.61ID:QxIckOqH俺は以下の要領でVBScriptと併用してる
http://toro.2ch.net/test/read.cgi/tech/1374205515/587
>587 : デフォルトの名無しさん[sage] 投稿日:2014/06/16(月) 18:45:29.61 ID:R0cE173n [1/1回]
>>>586
> WScript.Echo CStr(CreateObject("Scripting.FileSystemObject").GetDrive(WScript.Arguments(0)).DriveType)
> ↑
>この1行をVBScriptファイルとして保存してから別途呼び出す方式にすれば、大雑把な判定なら可能。
>例えば、そのVBScriptファイルを"test.vbs"としてDドライブの種別を調べたい場合、
>コマンドプロンプト画面またはバッチファイルで以下のように実行してみる。
>cscript test.vbs d:
>すると1桁の数字が表示される。数字の意味は以下の通り。
> 1:リムーバブルドライブ(USBメモリ/SDカード/FDなど)
> 2:HDD
> 3:ネットワークドライブ
> 4:CD-ROM/CD-R/DVD-ROM/DVD-Rなど
> 5:RAMディスク
0839837
2016/12/23(金) 22:21:21.24ID:l7ZH1QCKありがとうございます。ちゃんと機能することを確認しました。
ちなみにDokanのWin-SSHFSでマウントしたドライブは、
エクスプローラーで確認するとHDDのアイコンにも関わらず
上記のVBスクリプトの出力は何故か1でした。
流石にリパース・ポイントでマウントされているフォルダの情報とか
までは拾えないですね。
ファイルシステムやパーテションの下位レイヤーに位置している
デバイスの情報までバッチで拾うのは無理があるとは思いますが。
0840デフォルトの名無しさん
2016/12/23(金) 23:59:30.85ID:QxIckOqHあとは https://technet.microsoft.com/ja-jp/scriptcenter あたりで、他に使えそうな構文がないかどうか探すしかないのでは?
ちなみに以下の1行をVBScriptファイルとして保存してから別途呼び出す方式にすれば、任意のドライブにメディアが挿入されているかどうかを判定可能。
↓
WScript.Echo CStr(CreateObject("Scripting.FileSystemObject").GetDrive(WScript.Arguments(0)).IsReady)
0842デフォルトの名無しさん
2016/12/24(土) 12:05:37.82ID:mYH1sKhw0843デフォルトの名無しさん
2016/12/27(火) 22:52:31.05ID:tD8K2H9Aびっくりして検索したら、いろいろ出た
0844デフォルトの名無しさん
2017/01/02(月) 07:34:29.54ID:Jfm6LKzZ@for /d %s in ("%ProgramFiles%\M*") do @printf """%"s""" %"s"\n" "%s" "%s"
(´-`).。oO(ワケワカラン… もう一回寝たら何かひらめくかな…)
0845デフォルトの名無しさん
2017/01/07(土) 01:17:44.86ID:mJLtkeqFこんな感じでmp4からpng形式で切り抜きたいのですが、出来ません
お願いします
0846デフォルトの名無しさん
2017/01/07(土) 01:42:13.02ID:QYFKEjsVFILENAMEを%で囲ってないからでは
0847通りすがり
2017/01/07(土) 09:57:36.05ID:YuFs6plIφ(..)メモメモ。
0848デフォルトの名無しさん
2017/01/08(日) 00:48:03.49ID:jXHP++jgありがとうございます
FILENAME=hoge hage
としたい場合はどの様にしたらいいんですかね?
どこをダブルクォーテーションで囲めばいいのか分からなくて
0849デフォルトの名無しさん
2017/01/08(日) 01:06:14.31ID:xvjZF4HS使用する状況によって "%var%" とかすれば
0850デフォルトの名無しさん
2017/01/09(月) 12:41:03.48ID:XllxQEeD初心者にはありがちか…な?
0851デフォルトの名無しさん
2017/01/09(月) 17:39:58.40ID:FdW16b/bうん
0852デフォルトの名無しさん
2017/01/09(月) 17:46:32.39ID:Vl0ZF+DQこんな感じのが動かなくてなんでじゃーってなってた
@echo off
set number=1 && echo hoge
if "%number%"=="1" echo 成功
pause
0853デフォルトの名無しさん
2017/01/21(土) 18:44:36.79ID:tXmcovE0ファイルに出力リダイレクトする時も末尾に謎スペースが入ってるーとかよくある
vbsって別ファイルじゃなくてバッチ上に書いた文で実行できなかったっけ
0854デフォルトの名無しさん
2017/01/21(土) 18:57:14.10ID:0ZiC2kwV0855デフォルトの名無しさん
2017/01/23(月) 20:40:05.68ID:D7Cv/vEJhoge 1-100まで一気にやってしまうと負荷がひどいので、3つずつ走らせたいです
FOR /F %%I IN (z,txt) do (
start /b hoge %%I
)
これではすべて同時に実行されて困ってます
0856デフォルトの名無しさん
2017/01/23(月) 20:47:18.46ID:KnzUZKpX取りあえず3つ起動して、それが終了するのを監視するとかかな
tasklist /fi "IMAGENAME eq hoge"
が無くなるまで次の起動を待つ
0857デフォルトの名無しさん
2017/01/23(月) 21:25:20.02ID:ltIH4vtAFOR /F %%I IN (z,txt) do (
start /b hoge %%I
call :hogecounter
)
goto :EOF
:hogecounter
set /a num_hoge = 0
for /f "usebackq" %%i in (`tasklist /FI "IMAGENAME eq hoge.exe"`) do set /a num_hoge += 1
if %num_hoge% GEQ 5 (
echo hoge.exe 3つ以上実行中なので待機中... ---- %date% %time% ----
ping -n 2 127.0.0.1 1>nul 2>&1
goto hogecounter
)
exit/b
0858デフォルトの名無しさん
2017/01/24(火) 12:56:00.44ID:wPNJq+TP回答ありがとうございます。とても勉強になりました
tasklistを使ってどうやって監視するのか考えていたんですが、こうやるんですね
0859デフォルトの名無しさん
2017/01/24(火) 20:29:53.92ID:/B8f83m4start
0860デフォルトの名無しさん
2017/01/24(火) 20:30:49.14ID:/B8f83m40861デフォルトの名無しさん
2017/01/24(火) 23:59:56.75ID:VxYK/9Zbrundll32 user32.dll,MessageBeep
としてるんですが、鳴る音がランダムです
音楽プレイヤーを起動することなく特定の音を鳴らしたい場合はどう書けばいいですか?
0862デフォルトの名無しさん
2017/01/25(水) 08:04:52.52ID:JylBc2Qwもし俺なら以下のようにする。
echo ^G^G^G
「^G」は実際にはコマンドプロンプト画面上で[Ctrl]と[G]を同時に押す事で入力できるアスキーコード7
(元々BEEP音を鳴らすための制御コード)を指す。だから「^G^G^G」なら、BEEP音が「ピッピッピッ」と3回鳴る。
パソコンによっては、ヘッドホンを繋ぐとBEEP音がヘッドホンからしか聴こえない機種もあるので注意。
(昔のパソコンは、ヘッドホンを繋いでいてもBEEP音は本体スピーカーから聴こえる機種のほうが普通だったけど)
0863デフォルトの名無しさん
2017/01/26(木) 02:22:00.01ID:xZjzKm01start "" /b /min sndrec32 /play /close "hoge.wav"
0864デフォルトの名無しさん
2017/01/26(木) 03:29:49.24ID:xZjzKm01■start /minの代わりにWSHを併用(タスクバーにタブが出ない)
@if(0)==(0) @echo off
::ここから@endの間にBATスクリプトを記述し、最後はgoto :eofで終わらせる
echo 初回
cscript.exe //nologo //e:jscript "%~f0" "c:\media\foo.wav"
echo 2回目
cscript.exe //nologo //e:jscript "%~f0" "c:\media\bar.wav"
goto :EOF
@end
(new ActiveXObject("WScript.Shell")).Run('sndrec32 /play /close "'+WScript.Arguments(0)+'"',0,true);
■powershellを使ってBEEPで音階を演奏する
@echo off
:: beep(周波数,再生時間)
powershell -C "(262,294,330) | % {[Console]::beep($_,200)}"
0865デフォルトの名無しさん
2017/01/26(木) 03:42:07.64ID:xZjzKm01powershell -C "(262,294,330) | %% {[Console]::beep($_,200)}"
0866デフォルトの名無しさん
2017/01/27(金) 00:39:40.64ID:igA7csKzほえーこんなんもあるんだなー
0867デフォルトの名無しさん
2017/01/27(金) 00:47:40.39ID:pF7zedh0batの書き方wikiのようなものはないんでしょうか
代表的なサンプルコードがたくさんあるサイトとか
みんな何を参考にコード書いてるの?
cmd help以外で
0868デフォルトの名無しさん
2017/01/27(金) 00:52:08.69ID:7NHk2TgNバッチ 使い方
バッチ リファレンス
0869862
2017/01/27(金) 10:21:22.88ID:01h1aWf4その方法をバッチファイルで実現するには、恐らく以下の方法が一番簡単だと思う。
(1) 黒いコマンドプロンプト画面で「echo echo 」の10文字(半角スペースを含む)をキーボードから打ち込む。
※この段階ではEnterキーをまだ押さない事!
↓
(2) キーボード上の「Ctrl」キーと「G」を好きな回数だけ同時に押す。
※例えばバッチファイルの実行によりBEEP音を2回鳴らしたい場合は2回やる。
↓
(3) そのまま「>>"」をキーボードから打ち込む。
↓
(4) 編集したいバッチファイル名をエクスプローラの画面からコマンドプロンプト画面にドラッグ&ドロップする。
※例えば"C:\temp\sample1.bat"をエクスプローラの画面からドラッグ&ドロップすると、コマンドプロンプト画面に「C:\temp\sample1.bat」の文字列が転記される。
↓
(5) そのまま「"」をキーボードから打ち込む。
※ファイル名を「"」(ダブルクォーテーション)で囲む理由は、ファイル名やフォルダ名に空白が含まれていても問題なく作業できるため。
↓
(6) ここまでの一連の操作により、コマンドプロンプト画面では以下のように見えるはず。
「echo echo ^G^G>>"C:\temp\sample1.bat"」
それを目視確認できたらEnterキーを押す。これで作業完了。
↓
(7) あとはメモ帳などのテキストエディタでバッチファイル編集を続行すれば良い。
0870デフォルトの名無しさん
2017/01/27(金) 16:42:05.37ID:o8MkOvQJおそらく、バッチの情報を1から100まで網羅してるページはネット上には無い。
ここの人たちは現役で使ってた人ばかりだから、習うより慣れろで成長してきた人
今から知りたければ、DOSが現役だった頃の20年〜30年前の参考書を読むといいよ
図書館に行けばいくらでもある。古い本でも内容は全く問題ない。
おもにPC-9801やJ-3100関連だが、コマンドの使い方や自由度については昔も今も変わってない。
会社で98のDOSを使わざるを得ないサラリーマン向けの初心者用書籍が、わかりやすい。
dateコマンドはフォーマットが若干変わったし、formatコマンドとかハードウェア制御系は
オプションが全然違うけど、書き方は同じ。そういう差異だけはネットで調べるとよい。
0871デフォルトの名無しさん
2017/01/27(金) 16:59:28.96ID:ss8+Q0ea今だとDOSのは全然参考にならないと思う
(重要なforとかsetとか)
BATの概要や各コマンドの文法はヘルプを読む
コマンドのオプション/?のヘルプでも良いけど、
Windowsのヘルプで概要から全体像を把握したほうがいい
後は、ウェブで探すことになるかな
だが、まずは自分のしたいこと、興味のある処理をどうやれば実現できるのか考えて、
googleで検索していき徐々に知識を増やすことになるだろう
読めば全部わかる教科書とかいうものは多分無いだろうしね
0872デフォルトの名無しさん
2017/01/27(金) 17:06:49.37ID:M+jB2zw00873デフォルトの名無しさん
2017/01/27(金) 17:08:36.86ID:coDtb1o30874デフォルトの名無しさん
2017/01/27(金) 17:31:38.29ID:01h1aWf4その内、NT系は従来のMS-DOSや9x系と異なる部分が多く、例えば
エスケープ・シーケンスを利用してテキストをカラフルに装飾する事もできない。
(その代わりNT系にはCOLORコマンドがあるけど用途は異なる)
このような事情も、最近のWindowsユーザーが知るのは難しいかもな。
0875デフォルトの名無しさん
2017/01/27(金) 17:46:39.61ID:ss8+Q0eaansi.sysの組み込みで使えるようになった奴ね
懐かしい(いろんなプロンプトを作って遊んでた)
まあエスケープシーケンスって聞くと印刷で使うものって感じだったけど
ところで、windows10 Threshold 2でコマンドプロンプトにANSI/VT100互換表示ができるような記事を読んだ記憶があるんだが
実際のところはどうなのかな
0876デフォルトの名無しさん
2017/01/27(金) 20:53:22.87ID:xhE2/Vp0言えてる、個人的にはここで初めて知った call の使い方
call hoge %%fuga%%
みたいなの
あとこれもここで覚えた
set /p <NUL=
と コントロールコードの 0x08 [BS] を組み合わせての進捗表示
0877デフォルトの名無しさん
2017/01/27(金) 20:57:37.23ID:ss8+Q0ea式評価はもとより内部ラベルも呼び出せない
@echoもこれしかコマンドに@は付けられなかった
0878デフォルトの名無しさん
2017/01/27(金) 21:16:38.29ID:ss8+Q0eafor /f "delims=0" %%I in ('cmd /u /c echo 〇') do set BEL=%%I
echo %BEL%
0879デフォルトの名無しさん
2017/01/27(金) 21:20:50.03ID:01h1aWf4http://www.excite.co.jp/News/it_g/20160210/Slashdot_16_02_09_0639223.html の件については俺も知らん。
何しろ現在まだWin7ユーザーで、Win10は一度も使った事がないからな。
>>877
そういやechoコマンドに@を付けられるようになったのは、MS-DOSのVer.5.0からだったっけ?
0880デフォルトの名無しさん
2017/01/27(金) 21:24:19.98ID:coDtb1o3なんじゃこりゃ
凄い
0881デフォルトの名無しさん
2017/01/27(金) 21:36:09.67ID:xhE2/Vp0すごい、どーいう仕掛け???
コマンドプロンプトのプロパティに「コンソールの新機能の詳細」↓があって
https://technet.microsoft.com/en-us/library/mt427362.aspx
読んでコンソールウィンドウの透明度の変更が
CTRL+SHIFT+Plus (+) or CTRL+SHIFT+mouse scroll up
CTRL+SHIFT+Minus (-) or CTRL+SHIFT+mouse scroll down
であることを知ったのはまだいい?として
CTRL+F
で検索ができるのを初めて知ったよ……
0882デフォルトの名無しさん
2017/01/27(金) 21:49:56.71ID:01h1aWf4おぉ、その方法で環境変数%BEL%にアスキーコード7が1つ格納されるとはな。
だから>>862と同じ仕組みの事が実現できるわけだ。
>>869の方法やVBScriptのChr関数をうまく使えない人には、面倒でも利用価値があるかもな。
0883861
2017/01/29(日) 14:25:18.42ID:ddwWtq0w音は鳴りませんでした
>>863
できました
>>864-865
できませんでした
一瞬起動するのが気持ち悪いですが>>863で妥協しますありがとうございました
0884デフォルトの名無しさん
2017/02/02(木) 16:41:44.39ID:2a/0H2Op単純にコピーコマンドではうまく行きません。
0885デフォルトの名無しさん
2017/02/02(木) 23:15:37.79ID:LhAHr7Ziバッチで全部実装するのが面倒なので俺はAutoHotkeyで整形した後
hostsへ1行ずつ追記してるけど、ちゃんと追記できてるよ
0886デフォルトの名無しさん
2017/02/02(木) 23:27:36.20ID:rUH8Ic6oユーザー権限の問題なのでは?
問題のファイルはWINDOWS\system32\drivers\etcの下にある
ここは一般ユーザー(Power Users,Users)資格では変更・書き込み不可になってるはず
0887デフォルトの名無しさん
2017/02/03(金) 11:18:52.82ID:qUN7oehHそれはNTだからじゃなくて、cmdだからだよ。
0888デフォルトの名無しさん
2017/02/03(金) 11:32:41.65ID:PzggaHL+そりゃそうだけど、BATファイルからしてみれば関係なくね?
0889デフォルトの名無しさん
2017/02/03(金) 23:21:27.20ID:qUN7oehHcommand.com起動すれば従来通り動いたはずだよ。
64bitだと動かないけど。
0890デフォルトの名無しさん
2017/02/06(月) 22:43:42.84ID:Dm4Nipmb(エクスポート)する方法としては、PowerShellインストール済の状態で
以下の3行をバッチファイル内で実行するのが俺には一番妥協できそうだ。
powershell.exe -command ("Get-EventLog Application | Export-CSV '%~dpn0_%COMPUTERNAME%_app(%DATE:/=%-%TIME::=%時点)_psh.csv' -Encoding unicode")
powershell.exe -command ("Get-EventLog Security | Export-CSV '%~dpn0_%COMPUTERNAME%_sec(%DATE:/=%-%TIME::=%時点)_psh.csv' -Encoding unicode")
powershell.exe -command ("Get-EventLog System | Export-CSV '%~dpn0_%COMPUTERNAME%_sys(%DATE:/=%-%TIME::=%時点)_psh.csv' -Encoding unicode")
以下の3行をバッチファイル内で実行する手もあるが、
時間がかかりすぎる上に英語でしか出力されないのが難点。
wmic ntevent where "(logfile='application')" list /format:CSV > "%~dpn0_%COMPUTERNAME%_app(%DATE:/=%-%TIME::=%時点)_wmic.csv"
wmic ntevent where "(logfile='security')" list /format:CSV > "%~dpn0_%COMPUTERNAME%_sec(%DATE:/=%-%TIME::=%時点)_wmic.csv"
wmic ntevent where "(logfile='system')" list /format:CSV > "%~dpn0_%COMPUTERNAME%_sys(%DATE:/=%-%TIME::=%時点)_wmic.csv"
0891デフォルトの名無しさん
2017/02/07(火) 23:49:52.03ID:OwFQ4nmk0892デフォルトの名無しさん
2017/02/08(水) 01:50:38.96ID:QE6/hL5Ucommand not found.
0893デフォルトの名無しさん
2017/02/08(水) 07:20:17.84ID:h1zz+gVtwevtutil じゃダメなの?
https://technet.microsoft.com/ja-jp/library/cc732848(v=ws.10).aspx
0894890
2017/02/08(水) 16:12:37.67ID:45vPMFEy今使ってるWin7 Pro x64マシンは4年以上前に買ったものだが、そのコマンドは初めて知った。
実際やってみると従来より処理結果が見やすい上に速いな。ありがとよ。
wevtutil qe Application /f:text /uni:true > "%~dpn0_%COMPUTERNAME%_app(%DATE:/=%-%TIME::=%時点)_weu.txt"
wevtutil qe Security /f:text /uni:true > "%~dpn0_%COMPUTERNAME%_sec(%DATE:/=%-%TIME::=%時点)_weu.txt"
wevtutil qe System /f:text /uni:true > "%~dpn0_%COMPUTERNAME%_sys(%DATE:/=%-%TIME::=%時点)_weu.txt"
0895デフォルトの名無しさん
2017/02/15(水) 04:47:51.68ID:aywwqEZo0896デフォルトの名無しさん
2017/02/15(水) 04:56:51.86ID:wUshnQbT0897デフォルトの名無しさん
2017/02/15(水) 09:59:50.17ID:7bSa3oIchttp://ash.jp/code/unitbl21.htm
> UnicodeのUCS-2の文字コード表は、UTF-16と同じです。
> UTF-16 3007 〇
0898デフォルトの名無しさん
2017/02/15(水) 12:14:52.43ID:Q79MmBL5もう一つ例を出せばはっきりするかな
for /f "delims=N" %%I in ('cmd /u /c echo 三') do set TAB=%%I
0899デフォルトの名無しさん
2017/02/15(水) 14:00:41.73ID:fyxpm6Tlその通り。半角文字「0」のアスキーコードを16進数で表すと30で、
BEEP音を出す制御コードのアスキーコードは07だからね。
0900デフォルトの名無しさん
2017/02/18(土) 09:27:34.31ID:aH8Tos2Oついにその「三」を出したかw
0901デフォルトの名無しさん
2017/02/18(土) 13:52:15.93ID:8EFqk4IF三だと、何か、あるんですか?
アホなもので、教えてください。
0902デフォルトの名無しさん
2017/02/18(土) 13:58:40.90ID:np+iCDROこの(過去)スレで初登場したオリジナルってことかな?
コード表を見ればわかるけど使える文字は結構限られてて、この「三」は0x30以外でTABとして使える珍しい部類かな
0903デフォルトの名無しさん
2017/02/18(土) 16:19:49.41ID:aH8Tos2O>>897のURLだと「三」は"4E09"になってるだろ?
んで↓のASCIIコード表だと「N」は"4E"だから、「N」で「三」を区切ると"09"つまり「HT(水平タブ)」が残るってこと。
http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html
0905デフォルトの名無しさん
2017/02/20(月) 12:38:49.83ID:Yd+dsT91WSHかpower shellを勉強したいのですが、VBA多少わかるのでWSHがよいかと思ってたのですが、これから勉強するならpower shellのほうが良いのでしょうか?
0906デフォルトの名無しさん
2017/02/20(月) 12:46:25.36ID:DNbD6mo90907デフォルトの名無しさん
2017/02/20(月) 12:59:56.69ID:o4bNBCuM実際は組合せが必要になる場面もあるだろうしbatも含めて触れやすい所からやって行こう
0908デフォルトの名無しさん
2017/02/20(月) 13:21:52.61ID:aGrUDuyU0909デフォルトの名無しさん
2017/02/20(月) 14:02:23.91ID:H64DODQY得意なものは、一つあるけれども、他のも使えますと言うのが、よろしいかと.
0910デフォルトの名無しさん
2017/02/20(月) 14:14:39.50ID:GNpZgzhH0911デフォルトの名無しさん
2017/02/20(月) 14:19:59.36ID:aGrUDuyU学習する優先順位、つまりまず最初に何から勉強していくのか
が問われている
0912鬼?
2017/02/20(月) 15:40:20.74ID:H64DODQYでも、実務上は一通り、できたほうが、よろしいかと。
0913デフォルトの名無しさん
2017/02/20(月) 18:46:18.21ID:ybI95Kssレジストリ操作が出来ると良いかと
キーは同じだけど枝が違うヤツを
変えることもあるので
0914デフォルトの名無しさん
2017/02/20(月) 20:05:53.47ID:7yJYF54k今更 WSH はないだろ
PowerShell は癖があるけど慣れれば全然楽だよ
0915デフォルトの名無しさん
2017/02/20(月) 20:22:08.30ID:ynZG7eTnttps://codezine.jp/article/detail/9124
0916デフォルトの名無しさん
2017/02/20(月) 21:44:53.54ID:D++FG3XO0917デフォルトの名無しさん
2017/02/21(火) 12:35:55.81ID:4H0MJuHoC#使うとか覚えるとかで他でも使うなら良いがPSの為だけに.Net覚えるのはコスパ悪くない?
0918デフォルトの名無しさん
2017/02/21(火) 12:44:43.11ID:jPlNYKt30919デフォルトの名無しさん
2017/02/21(火) 12:45:57.01ID:BY3mJNCyPSはMSが広めようとするも全然使われてないし
これやったら絶対いいといった決め手はない
結局はどれに興味がわくかで決めるしかないのが現状
0920デフォルトの名無しさん
2017/02/21(火) 13:05:43.90ID:jPlNYKt3結局、一通りマスターするしか、ないのよね。
決定的なもの、ひとつマスターすれば、okとは行かないのが現状。
0921デフォルトの名無しさん
2017/02/21(火) 14:15:03.94ID:y0kzTLQNテキスト処理とか WSH でやる程度のことは .NET に頼らなくてもできるよ
お陰で -split 演算子と String.Split( ) みたいに似て非なるものが色々できてしまうわけだが...
0922デフォルトの名無しさん
2017/02/22(水) 20:10:23.63ID:mAYQQSaw・hoge.bat
(以下中身)
echo これはhoge.batです
pause
・hoge(A).bat
(以下中身)
echo これはhoge(A).batです
pause
保存した後おのおののバッチファイルを右クリックして「開く」を実行する。
当たり前だがおのおののecho文の内容が表示される。
ここまではいい。
次にhoge(A).batを右クリックして「管理者として実行」をクリックする。
すると、
「これはhoge.batです」
と表示されるではないか。
末恐ろしい・・・
0923デフォルトの名無しさん
2017/02/22(水) 21:19:44.12ID:L0zJ8/8ihoge.bat を
echo,all "%*"
echo,0 "%~f0"
echo,1 "%~f1"
echo,2 "%~f2"
echo これはhoge.batです
pause
hoge(A).bat のファイル名を hoge(A)(S(D).bat
にすると最初の ( で分割されてるっぽいのが見て取れる
hoge(A).bat の ( の前に1個以上半角or全角スペースを入れてやると、
そのファイル名なら問題ないみたい
なんで???
0924デフォルトの名無しさん
2017/02/22(水) 23:00:05.19ID:mAYQQSaw0925デフォルトの名無しさん
2017/02/22(水) 23:56:41.49ID:0ijMuyIdhttps://social.msdn.microsoft.com/Forums/ja-JP/43f69d0b-1e8a-457b-8e85-57f4c06f2e56/bat?forum=windowsgeneraldevelopmentissuesja
0926デフォルトの名無しさん
2017/02/23(木) 00:16:59.94ID:OmWT2WV6レジストリいじると ( で分断されないや、勉強になります
0927デフォルトの名無しさん
2017/02/23(木) 03:57:43.76ID:5MDB4WX90928デフォルトの名無しさん
2017/02/23(木) 12:05:36.44ID:OfWDpqOlバッチに限らずWinでのこの引数関係の不具合やハマりは沢山あるが
そうしていればほぼ全て解決してただろうに
0929騙し髪
2017/02/24(金) 02:03:32.35ID:bJGVi00Esysteminfo | findstr /i /r /c:"^OS バージョン"
0930デフォルトの名無しさん
2017/02/24(金) 10:39:00.57ID:y7jxU5gN↓これで妥協するしかないのかな?
systeminfo | findstr /i /r "OS" | findstr /i /c:"バージョン"
0931デフォルトの名無しさん
2017/02/24(金) 11:34:02.28ID:YZGHPd2K何でいきがって /r なんて指定してるんだ?
0932デフォルトの名無しさん
2017/02/24(金) 11:57:48.17ID:y7jxU5gNfindstr /?
これの実行結果を読めば分かる。
要はsyteminfoコマンド実行結果の内、「OS バージョン」という文字列が
行頭にある行だけを正規表現で抽出したいというのが>>929の意図。
実際は以下のように記述するしかない感じだが…
systeminfo | findstr /i /r "^OS" | findstr /i /c:"バージョン"
ちなみに>>930は少し記述ミスがあるので無視してほしい。
また、実行結果の表記がverコマンドの場合と少し異なる点にも注目。
0933デフォルトの名無しさん
2017/02/24(金) 12:15:58.03ID:FJeAwGiZsysteminfo | findstr /b /c:"OS バージョン"
0934デフォルトの名無しさん
2017/02/24(金) 13:24:30.97ID:IrOG+H9rcmd と エクスプローラーで、半角スペースと同じように扱ったりそうじゃなかったりする。
エクスプローラーからのドロップやタブ補完なんかを行うと、半角スペースとは異なる扱いになるのに、
コマンド実行の際には半角スペースと同様の扱いをして、そのままではパスが通らないことがある。
たとえば、C:\test dir\test.txt (batやexeでもいい) があるとして、カレント・ディレクトリが C:\ の場合、
cd test dir はクォートなしで通るし、
cat test dir\test.txt も普通に実行できるけど、
dir test dir\test.txt は通らない(クォーティングが必要)。
全部クォーティングすれば問題にならないと思われるにも関わらず、
C:\test dir\test space.txt というファイルパス(全角スペースのみならず半角スペースあり)の場合、
エクスプローラーからコマンド・プロンプトへドロップした際、
先の C:\test dir\test.txt はクォーティングされないが、
C:\test dir\test space.txt だと、きちんとクォーティングされる。
色んなパターンが合って、上手く説明できないけど、
補完とかの挙動もおかしかったりするので、ちょっといじってみるとわかってもらえると思う。
0935デフォルトの名無しさん
2017/02/24(金) 18:08:43.97ID:S5p8nT+v負けた気がするけど
systeminfo | findstr /i /r /c:"^OS バ..ジョン"
0936デフォルトの名無しさん
2017/02/24(金) 18:53:46.21ID:J9Egd7AE円記号とバックスラッシュを同じにしたやつ、
全角スペースをデリミタにしたやつ、
は土下座行脚、いや、焼き土下座行脚すべき
0937デフォルトの名無しさん
2017/02/24(金) 21:47:48.07ID:y7jxU5gNそちらはどれも正常に機能するんだな。
0938デフォルトの名無しさん
2017/02/24(金) 22:06:52.03ID:cAJGTXKHMSにはもっとマルチバイト言語圏に気を配って欲しかった
0939デフォルトの名無しさん
2017/02/25(土) 04:26:31.35ID:xGmZcvF/0940デフォルトの名無しさん
2017/02/25(土) 09:03:13.40ID:5GrbAtXq0941デフォルトの名無しさん
2017/02/27(月) 23:58:11.99ID:WTG5WMstいつの間にかHDDより寿命が長くなってるんだな。びびったわw
0942デフォルトの名無しさん
2017/03/01(水) 05:48:52.22ID:AsJGDaORまずお約束の「SETLOCAL ENABLEDELAYEDEXPANSION」の記述を教えたら
それだけでウンザリされたぞ。
「%」ではなく「!」で囲まなきゃならないことを教えたらさらにウンザリされた。
やっぱりとっつきにくいよなあ
0943デフォルトの名無しさん
2017/03/01(水) 12:07:40.17ID:e1g5jWjKバッチは何度やっても覚えられない
0944デフォルトの名無しさん
2017/03/01(水) 12:53:16.16ID:SJrJxNnQ> まずお約束の「SETLOCAL ENABLEDELAYEDEXPANSION」の記述を教えたら
> それだけでウンザリされたぞ。
俺ならその時点でそんなやる気のない新人は放置する
0945デフォルトの名無しさん
2017/03/01(水) 13:11:32.18ID:ZEta6nTz教えたくは無いな。
0946デフォルトの名無しさん
2017/03/01(水) 14:45:21.65ID:XTrmDaeRSetLocal EnableDelayedExpansion
ってすればかなり反応も違ったのかも
0947デフォルトの名無しさん
2017/03/01(水) 15:21:29.24ID:XTrmDaeRC#とかだったらどんなに複雑でも必死で覚えようとするだろうが
BATだとまあそこそこ使えりゃいいんだよって感じで片手間の労力しか掛けたくないんだろう
実際使う機会なんて、ifで条件切り分けて起動アプリや引数を変える程度だろう
それ以上になるなら、簡易なツールでも作ったほうがいいとなる
あとは、何でも質問してくる新人なんて付き合ってられんだろう
学校の延長じゃないんだし、BATに限らず、まずはマニュアルやヘルプやwebで調べて自分で学習することを覚えさせるべき
0948デフォルトの名無しさん
2017/03/01(水) 15:25:56.41ID:TOh8r3Y7わけがわからんけどとりあえず書いとくおまじないってのプログラム関係の解説に多いけど
そういうの本当にうんざりする。
おまじないなんてアホな事書くぐらいならきちんと説明しとけと
0949デフォルトの名無しさん
2017/03/01(水) 19:10:44.78ID:SJrJxNnQこういう知ったかにもげんなりする
> 実際使う機会なんて、ifで条件切り分けて起動アプリや引数を変える程度だろう
そんなものに遅延展開が必要になることはほぼない
0950デフォルトの名無しさん
2017/03/01(水) 19:15:14.05ID:XTrmDaeR>>946も言ってるように、遅延展開が必要になった場面で
それでも使わなければならないのなら教えればいい
単に勉強として教えても身にはつかない
0951デフォルトの名無しさん
2017/03/01(水) 19:16:27.03ID:XTrmDaeR0952デフォルトの名無しさん
2017/03/01(水) 19:22:01.47ID:SJrJxNnQ何で俺にアンカーしてるんだ?
>>948 はまあ正しいと思うし本当に必要になったかどうかは >>942 の所の新人に聞かなきゃわからんし
0953デフォルトの名無しさん
2017/03/01(水) 20:34:12.60ID:novnWMTs用意してあげればハードル下がるんじゃないですかね?
補完が効くなら大した事じゃないだろうし
内容はたったこれだけだけど、右クリック→新規作成 にバッチファイルの雛形を追加してから随分楽になった>俺
@setlocal
@echo off
prompt $g
title %~n0
cd /d %~dp0
for /f "usebackq delims=" %%i in (``) do (
)
color 07
timeout 6
goto :EOF
:adminchk
whoami /GROUPS|find "High" 1>nul 2>&1
if errorlevel 1 (
color 4e
echo,このバッチファイルは 管理者権限 で実行してください.
echo,何かキーを押下するとバッチファイルを終了します.
pause 1>nul
color 07
exit
)
exit/b
今回なら 1行目に enabledelayedexpansion を↓追加したやつで
0954デフォルトの名無しさん
2017/03/01(水) 20:35:34.84ID:novnWMTs0955デフォルトの名無しさん
2017/03/01(水) 21:10:31.50ID:9330vN7gちゃんと動けば問題ないが、大抵どこかがおかしいのに自信満々で隠してる
0956デフォルトの名無しさん
2017/03/01(水) 21:57:06.50ID:novnWMTs0957デフォルトの名無しさん
2017/03/01(水) 23:08:51.35ID:yR2oLnRjめちゃくちゃ便利って思うバッチの恩恵がないと
覚えるキッカケにならないと思う
あとはキッティングとかやらないと必要にならない
0958デフォルトの名無しさん
2017/03/01(水) 23:22:58.59ID:kitmjsdZデバッグした後であれば、表示されて煩わしい部分(コメントとか)隠すぶんにはいいんでないの?
何のコマンドを実行しているかは、その説明をechoしたり、echo on を直前に記述したっていいわけだし。
0959デフォルトの名無しさん
2017/03/02(木) 03:25:05.16ID:BRCb1ETqpilder on
Mazinger Go
@echo off
0960デフォルトの名無しさん
2017/03/02(木) 05:28:42.72ID:pdyDswRTrem title "name"
goto :main
comment
USING: this.bat "hoge" ["foo" ["bar"...]]
何のバッチかとか使い方とか引数や変数の説明
基本的にREMは使わない
:mein
echo 俺は全部こんな感じ
0961デフォルトの名無しさん
2017/03/02(木) 11:37:11.71ID:T2bzQ343デバッグもしづらいし
その点でVBSは良かった
文法は糞だけど
0962デフォルトの名無しさん
2017/03/02(木) 17:09:23.49ID:3Z7pahnd「:mein」は、「main」?
0963デフォルトの名無しさん
2017/03/02(木) 17:10:26.85ID:3Z7pahnd「:mein」は、「:main」?
だ。
0964デフォルトの名無しさん
2017/03/02(木) 18:22:16.37ID:s+qRP6Bf複雑?
お前さんの知能が足りんだけじゃね? w
.cmd のエスケープの方がトリッキーだろ、正式なドキュメントもないし
0965デフォルトの名無しさん
2017/03/03(金) 05:02:41.69ID:WTPXL6BV0966デフォルトの名無しさん
2017/03/03(金) 12:31:28.29ID:1c3U0vHrエスケープすることで可能(forのオプションは囲むことは必須ではないため)
http://stackoverflow.com/questions/7516064/escaping-double-quote-in-delims-option-of-for-f
http://otnx.jp/CMD/コマンド別/for/
0967デフォルトの名無しさん
2017/03/03(金) 12:34:06.93ID:1c3U0vHr0968デフォルトの名無しさん
2017/03/03(金) 13:12:34.59ID:WTPXL6BV囲まなくてもよかったんですね。
勉強になりましたありがとうございます。
0969デフォルトの名無しさん
2017/03/05(日) 12:48:27.31ID:4ixcbh2y0970デフォルトの名無しさん
2017/03/05(日) 12:50:43.60ID:4ixcbh2y0971デフォルトの名無しさん
2017/03/05(日) 13:58:00.83ID:7VmbrbTL0972デフォルトの名無しさん
2017/03/06(月) 09:55:26.77ID:cTPfG0tg次期大型アップデート、Windows 10 Creators Updateの実像 - PowerShellが標準に、Linux環境も強化したWindows 10 Creators Update:ITpro
http://itpro.nikkeibp.co.jp/atcl/column/17/022400047/030100004/
0973デフォルトの名無しさん
2017/03/06(月) 19:59:20.47ID:ZhaNpIEG0974デフォルトの名無しさん
2017/03/06(月) 20:25:53.65ID:ajpZLJuxむしろ危ないのはWSHの方
0975デフォルトの名無しさん
2017/03/07(火) 10:57:03.69ID:yt35hC5o塩田さんの記事か。
少し、ひっかかるものがあるけど。
0976デフォルトの名無しさん
2017/03/07(火) 11:34:23.30ID:NGhUJ85m記事を読む限りはcmd環境も維持されるみたいね
なんとなく安心
0977デフォルトの名無しさん
2017/03/08(水) 16:42:00.84ID:yjHW4J+N0978デフォルトの名無しさん
2017/03/08(水) 16:42:42.42ID:yjHW4J+N0979デフォルトの名無しさん
2017/03/08(水) 16:43:19.20ID:yjHW4J+N0980デフォルトの名無しさん
2017/03/08(水) 16:44:30.11ID:yjHW4J+N0981デフォルトの名無しさん
2017/03/08(水) 16:44:57.54ID:yjHW4J+N0982デフォルトの名無しさん
2017/03/08(水) 20:25:28.66ID:22c2SBHyできるソフトはあるが、内部コマンドで
0983デフォルトの名無しさん
2017/03/10(金) 20:40:22.23ID:f4ZS1b200984デフォルトの名無しさん
2017/03/10(金) 22:27:00.13ID:yR7vM1Ksひろし、ごはんだよ
0985デフォルトの名無しさん
2017/03/11(土) 05:16:21.18ID:fFh0REPG0986デフォルトの名無しさん
2017/03/11(土) 11:23:33.97ID:0VclosvMミハル
0987デフォルトの名無しさん
2017/03/11(土) 13:48:33.39ID:2LSSeyH1【.cmd】 バッチファイルスクリプト %12 【.bat】
http://echo.2ch.net/test/read.cgi/tech/1489207631/
あとヨロシク
0988デフォルトの名無しさん
2017/03/11(土) 13:55:01.66ID:+iqzxRFD0989デフォルトの名無しさん
2017/03/11(土) 20:19:37.53ID:+iqzxRFD0990デフォルトの名無しさん
2017/03/11(土) 20:55:16.00ID:a53QpxuN0991デフォルトの名無しさん
2017/03/12(日) 05:37:51.15ID:59Ox3raF服部嵐雪
0992デフォルトの名無しさん
2017/03/12(日) 05:51:14.15ID:FQp4yzuc0993デフォルトの名無しさん
2017/03/12(日) 11:27:49.81ID:1iqHgo3mshutdown /r /f /t 0 ←Windowsを即再起動(※現在セーフモードならセーフモード,通常モードなら通常モードで再起動)
0994デフォルトの名無しさん
2017/03/12(日) 11:35:19.11ID:1iqHgo3m0995デフォルトの名無しさん
2017/03/12(日) 12:15:48.13ID:eYHcL9Aw0996デフォルトの名無しさん
2017/03/12(日) 13:02:15.60ID:59Ox3raF少監阿氏奥島
0997デフォルトの名無しさん
2017/03/12(日) 18:55:33.66ID:t+BguLGS0998デフォルトの名無しさん
2017/03/12(日) 20:22:26.13ID:1iqHgo3m0999デフォルトの名無しさん
2017/03/12(日) 20:24:39.74ID:1iqHgo3m次スレ乙
1000デフォルトの名無しさん
2017/03/12(日) 20:54:33.04ID:1iqHgo3m10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
life time: 746日 1時間 44分 34秒
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。