板検索:
【.cmd】 バッチファイルスクリプト %11 【.bat】 (858)
まとめビュー
1
デフォルトの名無しさん[sageteoff]   投稿日:2015/02/25 19:09:59  ID:5hx8q1nT.net(2)
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %10 【.bat】

それ以前の過去スレ
%9  【.cmd】 バッチファイルスクリプト %9 【.bat】
%8  【.cmd】 バッチファイルスクリプト %8 【.bat】
%7  【.cmd】 バッチファイルスクリプト %7 【.bat】
%6  【.cmd】 バッチファイルスクリプト %6 【.bat】
%5  【.cmd】 バッチファイルスクリプト %5 【.bat】
%4  プログラム板の別スレッドへ
%3  プログラム板の別スレッドへ
%2  プログラム板の別スレッドへ
%1  プログラム板の別スレッドへ


2
デフォルトの名無しさん[]   投稿日:2015/02/25 19:46:08  ID:v67AOmy/.net
< `∀´>ニダー

3
1[sage]   投稿日:2015/02/25 20:30:42  ID:5hx8q1nT.net(2)
今回はスレタイに[転載禁止]と表示させないため、"sageteoff"を>1のメール欄に入れてます。
("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/...

4
デフォルトの名無しさん[sage]   投稿日:2015/02/26 21:20:03  ID:rvCGpWQW.net
最近作ったバッチ cdif.bat
環境チェック用に

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
コメント2件

5
デフォルトの名無しさん[sage]   投稿日:2015/02/28 13:23:16  ID:Vf0Nycmv.net
転載禁止で何か不都合があるんですかね
コメント1件

6
デフォルトの名無しさん[sage]   投稿日:2015/02/28 16:21:11  ID:YYADq1Ex.net(2)
>5
見た目がうざい

転載禁止は嫌儲が運動した結果の出来事

2015年3月3日以後に Spyle 以外の専ブラが使えなくなるのも嫌儲が運動した結果。

嫌儲に手を貸す必要はない。

そもそも転載禁止と表示しても、法的措置どころか苦情すら入れてないのが現実。
何の効力もない。

7
6[sage]   投稿日:2015/02/28 16:26:28  ID:YYADq1Ex.net(2)
ちなみに僕は >1 ではないけど、自分が立てるときは非表示にしてるよ。

8
デフォルトの名無しさん[sage]   投稿日:2015/02/28 16:56:20  ID:M5P8h0pv.net(3)
>4
存在チェック手を抜くと完走しないどころか、場合によっては泣き見るよ
pushd D:\temp || mkdir D:\temp &amp;&amp; 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

9
デフォルトの名無しさん[sage]   投稿日:2015/02/28 17:01:28  ID:M5P8h0pv.net(3)
なんか文字化けしてるんで訂正。一行目はアンド記号2つね
pushd D:\temp || mkdir D:\temp && pushd D:\temp
コメント1件

10
デフォルトの名無しさん[sage]   投稿日:2015/02/28 17:13:03  ID:/zEhZlSp.net
>9
2chではしたらばやまったりと違い、普通に&って書けばいいよ
if not exist app1.exe goto :eof
コメント1件

11
9[sage]   投稿日:2015/02/28 17:35:28  ID:M5P8h0pv.net(3)
>10
教えてくれてありがとう、確かに化けないね
書き込む環境によるのかな?Vimエディタのchaliceプラグインから書いた
次からは気をつけるよ

>4
もうひとつ訂正。app1.exeはdiff.exeに読み替えてほしい
win8, 8.1は知らないけど7proには無かったので
コメント1件

12
デフォルトの名無しさん[sage]   投稿日:2015/03/01 01:13:03  ID:3pqosVHZ.net
>11
ありがとうございます。
windows標準に diff.exe が無いのをうっかりしていました。
入手するか、似た機能のスリーソフトが必要でした。
diff.exe はgnu フリーソフトです。
コメント1件

13
デフォルトの名無しさん[sage]   投稿日:2015/03/01 09:21:11  ID:lUru30LD.net
何でもかんでも小文字で書いてるようでは、な…w

14
デフォルトの名無しさん[sage]   投稿日:2015/03/01 10:40:56  ID:auZLsY4i.net
小文字と半角が区別できない人がいると聞いて
コメント1件

15
デフォルトの名無しさん[sage]   投稿日:2015/03/01 18:14:23  ID:iMUnkbvv.net
>12
表示とエラーレベル確認だけならFCコマンドがあるよ

16
デフォルトの名無しさん[sage]   投稿日:2015/03/02 17:20:43  ID:uyLNdg9p.net
>14
中学出たらまた来いやド素人


17
デフォルトの名無しさん[sage]   投稿日:2015/03/07 12:52:17  ID:z12PK9QI.net
突然で悪いですが
「shutdown -m」って一度に複数のPCを選択することは出来るのでしょうか。

shutdown -m \\○○ \\△△ ってするのですか?

分かるかたはお願いします。

18
デフォルトの名無しさん[sage]   投稿日:2015/03/07 14:47:08  ID:CawHWVdd.net
for %%a in (
\\○○
\\△△
) do (
shutdown -m %%a
)

19
デフォルトの名無しさん[sage]   投稿日:2015/03/14 01:24:35  ID:3WQ81uoz.net(2)
バッチ中で
echo 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
と表示されます、なぜでしょうか?

20
デフォルトの名無しさん[sage]   投稿日:2015/03/14 02:15:45  ID:nzf6iyBd.net
%%→%
%j 2 l% →環境変数と見なされて消えてる?
%m→m
多分こんな感じ
コメント1件

21
デフォルトの名無しさん[sage]   投稿日:2015/03/14 02:28:40  ID:3WQ81uoz.net(2)
>20
ありがとうございます。
パズルのつもりで考え、同じ結論になりました。

echo 0 n%%%%p 1 q%%%r 2 s%%t 3 u%v 4
の場合
%r 2 s% が消え、%t 3 u% が消えるようです。

22
デフォルトの名無しさん[sage]   投稿日:2015/03/16 10:51:59  ID:n6rD9DBv.net
@cd /d "%~f1" && cmd /k prompt $g $t (%username%@%computername%) "$p"$_$g
EXIT

23
デフォルトの名無しさん[]   投稿日:2015/03/21 11:58:32  ID:2zhIHOyA.net(2)
jpgをbpgに一括変換したくて

echo off

for %%FILE in (*.jpg) do (
bpgenc.exe %%FILE%~nI.jpg -o %%FILE%~nI.bpg

pause

こんな感じで作ってみたんですが
何分初心者なもんでエラーで動きませんでした
jpgがあるフォルダでbatを実行すると
そこのフォルダに同じ名前のbpgが出来るように出来ませんか?
コメント2件

24
デフォルトの名無しさん[sage]   投稿日:2015/03/21 12:29:07  ID:JFP+1Mfc.net(2)
>23
forの%変数は、一般の環境変数とは別物で%a〜%z,%A〜%Zの52個しか使えない
書くなら、以下のようになるけどbpgencの仕様を知らないので動作するかどうかは不明
(カレントにbpgencや*.jpgがあるとして)

for %%I in (*.jpg) do (
bpgenc.exe %%I -o %%~nI.bgp
)

25
デフォルトの名無しさん[sage]   投稿日:2015/03/21 12:34:03  ID:JFP+1Mfc.net(2)
>23
間違い訂正と一応ファイル名の半角空白対策で""で括った方がいいね
for %%I in (*.jpg) do (
bpgenc.exe "%%I" -o "%%~nI.bpg"
)
コメント1件

26
デフォルトの名無しさん[]   投稿日:2015/03/21 13:43:28  ID:2zhIHOyA.net(2)
ありがとうございました

27
デフォルトの名無しさん[sage]   投稿日:2015/03/22 20:30:08  ID:MzKPDq1O.net
ディレクトリを指定する時に
"C:\Windows"と書くか"C:\Windows\"のように最後に\を付けるのはどっちが正しいんでしょうか?
全てのファイルを指定したい時も*.*と書くのか*だけでもいいんでしょうか?
コメント2件

28
デフォルトの名無しさん[sage]   投稿日:2015/03/22 22:15:52  ID:MRoLQSW+.net
ディレクトリエントリと認識させるなら前者
ディレクトリパスと認識させるなら後者
どちらか正しいかは関係ない(個人の手法により変わる)

29
デフォルトの名無しさん[sage]   投稿日:2015/03/23 00:27:47  ID:LkjS11eT.net
個人の手法と言うよりアプリによるかと。
下手なことせずMS謹製APIを(正しく)使ってるアプリは大体柔軟に解釈してくれる。
一方で、独自実装かつ手抜きだとそのアプリのルールに従わないと駄目。

30
デフォルトの名無しさん[sage]   投稿日:2015/03/23 03:17:53  ID:8SvXlaBo.net
Windowsでは"*.*"と"*"は同じ結果になるようだが
DOSだと"*"は"*."の意味で解釈されたような気がするが・・・
よく覚えてないが違ったかな
コメント1件

31
デフォルトの名無しさん[sage]   投稿日:2015/03/23 07:56:45  ID:vmjZ2UK4t
scって書き込み反映遅いのね

32
デフォルトの名無しさん[sage]   投稿日:2015/03/23 07:50:10  ID:Zh4Tlzc4.net
>27
xcopyコマンドは末尾に\を付けると対話モードにならなくて済むから
\を付けるのがベター

33
デフォルトの名無しさん[sage]   投稿日:2015/03/24 21:50:49  ID:15EAIg4V.net
>27
オブジェクトとして扱うか 場所として扱うか

34
デフォルトの名無しさん[sage]   投稿日:2015/03/26 11:42:29  ID:TtvSKEog.net(3)
バッチファイルでテキストファイルの中にある(" ")を(改行)に置き換えたいのですがどうしたらよいでしょうか
自力でここまで頑張ってみましたがわかりません
for /f "tokens= delims=""" %%i in (.filelist) do (
if "%%i" EQU "\n" (
(echo %%i\n)>> .filelist.tmp
)
move .filelist.tmp .filelist
コメント1件

35
デフォルトの名無しさん[sage]   投稿日:2015/03/26 14:29:43  ID:eQva/kB3.net
>34
● 空白が連続して並んでいる場合、空白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
コメント1件

36
デフォルトの名無しさん[sage]   投稿日:2015/03/26 14:57:07  ID:TtvSKEog.net(3)
>35
中身が
"ho ge" "fuga" "bar"みたいな感じなんで1行だけなのでそれだとダメなんですよね
batは諦めたほうがいいですか?

37
デフォルトの名無しさん[sage]   投稿日:2015/03/26 15:10:34  ID:TtvSKEog.net(3)
別の書き方でやりたいことできてしまったので答えてもらわなくていいです
ありがとうございました

38
デフォルトの名無しさん[sage]   投稿日:2015/03/29 23:08:04  ID:brTyAs26.net
if 文で大小を調べる場合、
数字以外の文字があっていても無視してくれるらしい


@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

39
デフォルトの名無しさん[sage]   投稿日:2015/03/30 18:13:52  ID:7Wq+AZOx.net
趣旨はわかるけどすべて置換しても手間は変わらないような
方法は人それぞれだけど

set x=%~t1
for %%I in (/ " " ^:) do call set x=%%x:%%~I=%%
set g=%x:~2%
echo %g% %1
コメント1件

40
デフォルトの名無しさん[sage]   投稿日:2015/04/01 01:00:08  ID:AO10ro0D.net
>39
そんな方法があるのかと思いましたが
call
in (/ " " ^:)
がよくわかりません
??

41
デフォルトの名無しさん[sage]   投稿日:2015/04/07 18:10:05  ID:jQXYCPe4.net
http://d.hatena.ne.jp/YOSHIYUKI/20120731/1343735856

上記サイトを参考にバッチファイルを作ったのですが、

%rtmp% --rtmp "rtmpe://fms2.uniqueradio.jp/" --playpath "aandg2" --app "?rtmp://fms-base1.mitene.ad.jp/agqr/" --stop %dur% --live -o %out%

この部分は何を指しているのでしょうか?
コマンドプロンプトでテストをすると
「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています」
との表示が出るのですがどうしたらよいのか解りません

初心者なので噛み砕いて説明していただけるとありがたいです
よろしくお願いします

42
デフォルトの名無しさん[sage]   投稿日:2015/04/07 18:23:55  ID:tPergwIj.net
ネットラジオ受信してるのかな
コメント1件

43
デフォルトの名無しさん[sage]   投稿日:2015/04/07 21:40:29  ID:ms0ReaQq.net
最初の%rtmp%が受信用のプログラムrtmpdumpのパスを指定してるんだろうけど、それ以降の部分はそのプログラムのオプションだからそっちのヘルプなりを見るしかないな
コメント1件

44
デフォルトの名無しさん[]   投稿日:2015/04/08 21:33:07  ID:C3eEupG0.net
>42>43
ありがとうございます
rtmpdumpのヘルプがどこにあるのかすらわからない状況ですが、これから頑張ります

45
デフォルトの名無しさん[sage]   投稿日:2015/04/09 07:03:12  ID:teaLGODa.net
>44
ググったら https://rtmpdump.mplayerhq.hu/ でWindows版のzipファイルをダウンロードできたが、
その中に入ってる rtmpdump.1.html を適当な翻訳サイトで和訳するしかなさそうだな
つーか質問する前に、それを一通り読んだ?
日本語の解説サイトも幾つか見つかったから、それも一通り読んでおけば質問の手間が一気に省けたのでは?

あと、同梱の README.txt によると http://slproweb.com/products/Win32OpenSSL.html から
Win32 OpenSSL v1.0.2a Light も予め入手〜インストールしておくほうが良さそうだな
こちらは問題のバッチと直接関係なさそうだが…
コメント1件

46
デフォルトの名無しさん[sage]   投稿日:2015/04/09 20:47:41  ID:ds7brpvM.net
0からの距離、絶対値を求めるにはどうしたらいいのでしょうか?
コメント1件

47
デフォルトの名無しさん[sage]   投稿日:2015/04/09 21:48:31  ID:56Kz/Tqn.net
>45
ありがとうございます
rtmpdumpの2.4をダウンロードしたときには入っていなかったようなので確認できていなかったみたいです

ですがやり直してみてうまくいったので無事バッチファイルは作成できました
みなさんありがとうございました

48
デフォルトの名無しさん[sage]   投稿日:2015/04/10 07:48:39  ID:1r0Sjsp4.net
>46
バッチファイルはそういう用途には使えない(使わない)
コメント1件

49
デフォルトの名無しさん[sage]   投稿日:2015/04/10 08:53:04  ID:xkkjlCYH.net
>48
絶対値をわざわざ「0からの距離」と書いてる時点で、靴下臭さが漂う釣り

50
デフォルトの名無しさん[sage]   投稿日:2015/04/10 11:49:51  ID:KlyCEozYg
if 文だとつまらんので

rem v=-2147483647〜2147483647
set /a "a=v-(v>30&2)*v"
echo %a%

51
デフォルトの名無しさん[sage]   投稿日:2015/04/10 18:17:04  ID:OSkAW5mv.net
一応計算はできるが、元の数値はどうやって与えるのか、結果をどのように通知するのかを規定してもらわないとなんとも

52
デフォルトの名無しさん[sage]   投稿日:2015/04/11 01:45:05  ID:TrV790b8.net
ネットにつながっているかどうか調べるバッチを作ってみた

@echo off
set errorlevel=
arp -a|findstr "物理アドレス" >nul
if %ERRORLEVEL% == 0 goto ok
echo 未接続、
exit /B 255
:ok
echo 接続中
exit /B 0

pingを使うのを使っていたがうまくいかない時があるので、
arpに変更したらうまくいった

53
デフォルトの名無しさん[sage]   投稿日:2015/04/11 06:44:22  ID:fyKqFsgJ.net
糞バッチはいらないです

54
デフォルトの名無しさん[sage]   投稿日:2015/04/11 08:01:29  ID:/PBMBHvW.net
どこで聞けばいいのかわからないので、すみませんがここに失礼します
相応しいスレがあって、教えて頂ければそちらに移動します

DOS起動のUSBメモリを作成してブート
目的のexeファイルを実行し終えて再起動した場合に、コマンドでどのようにすればいいのでしょうか?
shutdown -rと打ち込むと「Bad command or filename - "shutdown".」と表示されてしまいます
電源ボタン長押しの強制終了は、HDDのSMART情報に電源断による磁気ヘッド退避回数が1カウントされてしまい
なんか嫌なのです・・・
コメント1件

55
デフォルトの名無しさん[sage]   投稿日:2015/04/11 14:23:00  ID:5Lnp57nw.net
>54
DOSで電源断するプログラムをUSBにコピーしておきそれを指定するとか?
フリープログラムでそういうのはあったと思うので捜して使えるものを選択する
ちょっと検索してみたらFreeDOSにはfdapmとかがあるようだ
昔のMS-DOSにもver.6の頃にはpoffコマンドがあったような気もするけど
メーカー独自コマンドだったかも

また、SMARTの値は気にすることもないだろ
それこそMS-DOS時代ならスイッチでの電源断しかなかったわけだし
これでHDDがどうにかなってたらそれこそ大問題だった(まあSMARTの仕組み自体無かったけど)

56
デフォルトの名無しさん[sage]   投稿日:2015/04/11 15:00:26  ID:2fqMRu3m.net
shutdownというコマンドは実体がexeファイルである、という解説を加えた方が良いかと。
ちなみにwin9xの緊急用ディスク(だったっけ?)には入ってた気がする。

57
デフォルトの名無しさん[sage]   投稿日:2015/04/11 16:01:15  ID:Wkw29TQd.net
Ctl+Alt+Del ってここでは使えないんだっけ?

58
デフォルトの名無しさん[sage]   投稿日:2015/04/11 16:08:40  ID:ZafMUMT0.net
Ctrl+C?

59
デフォルトの名無しさん[sage]   投稿日:2015/04/13 02:52:48  ID:d+oF06mH.net
for文で複数のPCへファイルチェックしてると
dos窓にはプロセスが使用中とエラーログがながれてますが
実行結果テキストはそのPC内容が空白になります
このプロセスエラーを表示させるにはどうしたら
いいのでしょうか?
コメント1件

60
デフォルトの名無しさん[sage]   投稿日:2015/04/13 06:51:07  ID:lOTy3Gtt.net
1>stdout
2>stderr

61
デフォルトの名無しさん[sage]   投稿日:2015/04/13 11:41:44  ID:PhEs3M2y.net
>59
https://support.microsoft.com/ja-jp/kb/110930/ja
いろいろあるから調べてね
ちなみにforのinで使う場合はエスケープ記号も忘れずに

62
デフォルトの名無しさん[]   投稿日:2015/04/14 10:36:28  ID:N5fdZKD9.net(2)
すみません。初心者ですがご教授願います。

forfiles /P C:\Users\Owner\Desktop\test /S /D -1000 /C "cmd /c del /Q C:\Users\Owner\Desktop\test\@file"

というバッチをつくりました。更新日1000日以前のファイルを削除するのですが、
ファイル名が"backup"から始まる物のみ削除したい場合はどのように記述したらよいでしょうか?
コメント1件

63
デフォルトの名無しさん[sage]   投稿日:2015/04/14 12:14:07  ID:+cu4u0lD.net
forfiles /P C:\Users\Owner\Desktop\test /S /D -1000 /C ^
"cmd /c echo C:\Users\Owner\Desktop\test\@file|findstr "^backup"&&del /Q C:\Users\Owner\Desktop\test\@file""

64
デフォルトの名無しさん[]   投稿日:2015/04/14 13:06:46  ID:N5fdZKD9.net(2)
>63
早速ありがとうござました。

65
デフォルトの名無しさん[sage]   投稿日:2015/04/14 13:48:29  ID:ZcIa+N/O.net
forfilesに/m backup*つければいいんじゃないの?

66
デフォルトの名無しさん[sage]   投稿日:2015/04/14 23:10:10  ID:iRGvGEKT.net
call [〜.bat]
if 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の記述は省いています。
どなたか原因がわかる方が居たらお願いします。
コメント1件

67
デフォルトの名無しさん[sage]   投稿日:2015/04/15 05:47:48  ID:qbvA5Mq5.net
@ECHO OFF
: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

68
デフォルトの名無しさん[sage]   投稿日:2015/04/15 14:31:47  ID:I1xT3eb5.net
>66
・条件分岐後に変な改行入れないでください
・A1なんてコマンド誰も知りません
・そもそもサブルーチンに移行できていません
 ただ次行以降を実行しているだけです

提示したバッチ全体の構文がおかしいです
根本から見直してください

69
デフォルトの名無しさん[sage]   投稿日:2015/04/15 18:56:17  ID:3mk21zLe.net
原因もクソもわかんねぇんだったら、1行ごとにpauseコマンド入れてデバッグすりゃいいんじゃねw

70
デフォルトの名無しさん[sage]   投稿日:2015/04/15 19:14:08  ID:iV7zdKJV.net
>callしたバッチ内のexit /b 0の手前で処理が止まっており

これが本当だったらそのbat内の処理が悪いんだろ

71
デフォルトの名無しさん[]   投稿日:2015/04/16 13:55:23  ID:PKlW+mXs.net
またまたお世話になります。

forfiles /P E:\HDD\backup /M *camdata* /S /D -10 /C "cmd /c rd /S /Q E:\HDD\backup\@file"

USB外付けHDDに監視カメラのデータを保存しています。
保存期間10日を過ぎたものはタスクスケジューラで削除していこうと思い、
上記バッチを実行すると該当データは削除できるのですが、その後に

ディレクトリ名が無効です。
ディレクトリ名が無効です。
ディレクトリ名が無効です。




とエラーがループして出てしまいます。
>62-65
のデスクトップでのテストでは、エラーになりませんでした。
ご指導ねがいます。

72
デフォルトの名無しさん[sage]   投稿日:2015/04/16 19:05:59  ID:dl3K38JP.net
forfiles /P E:\HDD\backup /M *camdata* /S /D -10 /C ^
"cmd /c if @isdir==TRUE (rd /S /Q @path) else (del @path@file)"
コメント1件

73
デフォルトの名無しさん[sage]   投稿日:2015/04/17 00:25:16  ID:w/dpiMO4.net
バッチファイルはプログラミングしづらいだろ?
WSH(VBScript, JScript)か、PowerShell でも使ったら?


Windows PowerShell
コマンド & スクリプティングガイド
五十嵐貴之(いからしたかゆき)、2015/3/25

74
デフォルトの名無しさん[sage]   投稿日:2015/04/17 07:57:13  ID:x1OzcVcc.net
自分はParl使ってるわ

75
デフォルトの名無しさん[sage]   投稿日:2015/04/18 13:07:53  ID:PKb7WJB3.net
下らない質問で悪いけど
コマンドプロンプトってターミナルエミュレーターかシェル
どっちの事を指して使われてる言葉なの?
コメント1件

76
デフォルトの名無しさん[sage]   投稿日:2015/04/18 13:10:24  ID:sjW3inIo.net
>75
コマンドプロンプト

77
デフォルトの名無しさん[sage]   投稿日:2015/04/18 20:15:04  ID:3vDqFDHY.net
ターミナルエミュレータに相当する物は別に存在する。
ProsessExprorer系のツールでプロセス観察してみるとよく分かるよ。

78
デフォルトの名無しさん[sage]   投稿日:2015/04/19 02:00:49  ID:0O9OZvk2.net
>72
forfilesなんて、昔はなかった
いつからなんだろう
古いサイトだと解説していない

79
デフォルトの名無しさん[sage]   投稿日:2015/04/19 14:25:40  ID:YOn0sVc9.net
Windows上でtarファイルの展開を行うバッチファイルを作成したいのですが、
フリーソフトのTAR.exeを使用して、
[フルパス]TAR.exe xvf [tarファイル名(フルパス)] -C [展開先ディレクトリ]で実行しても、
エラーで展開先にうまく解凍出来ません。
展開先の指定方法についてどなたかご教授願います。
コメント2件

80
デフォルトの名無しさん[sage]   投稿日:2015/04/19 14:51:37  ID:9oYjIFcR.net
エラー貼りましょう

81
デフォルトの名無しさん[sage]   投稿日:2015/04/19 14:58:02  ID:ZbwKHW2Q.net
とりあえず-xvfじゃないのか?
コメント1件

82
デフォルトの名無しさん[sage]   投稿日:2015/04/19 16:15:39  ID:5HhODAvd.net
>81
xvf の x はオプションじゃなくてコマンドだから "-" はいらない

>79
そのフリーソフト -C オプションサポートしてるんか?

83
デフォルトの名無しさん[sage]   投稿日:2015/04/19 17:36:35  ID:uCqT+TY7.net
-Cって展開先を指定するオプションじゃなくて作業前にカレントディレクトリを変更するオプションだから
存在しないディレクトリ指定してエラーになってるとかそういうオチでは

84
デフォルトの名無しさん[sage]   投稿日:2015/04/19 23:32:53  ID:6LHr2UmH.net
>79
本筋とはちと関係ないけど、tarって未圧縮の単なる書庫ファイルだからtgz(tar.gz)に
したらどないでっしゃろ

85
デフォルトの名無しさん[]   投稿日:2015/04/21 22:22:35  ID:k+lIUh1M.net
☆ 日本の核武装は絶対に必須ですわ。☆
http://www.soumu.go.jp/senkyo/kokumin_touhyou/index.html

☆ 日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、改憲の参議院議員が
3分の2以上を超えると日本国憲法の改正です。皆様方、必ず投票に自ら足を運んでください。
私たちの日本国憲法を絶対に改正しましょう。☆

86
デフォルトの名無しさん[sage]   投稿日:2015/04/28 09:18:46  ID:AL7JlJvX.net
Windows7でディレクトリへのシンボリックリンクってどうやって消すんですか?

> mklink /d c c:\
c <<===>> c:\ のシンボリック リンクが作成されました

> del c
D:\c\*、よろしいですか (Y/N)? y

のように質問された上にy押した後も消えてません

87
デフォルトの名無しさん[sage]   投稿日:2015/04/28 09:39:19  ID:l73V3plJ.net
普通にエクスプローラから消せばいいのよ

88
デフォルトの名無しさん[sage]   投稿日:2015/04/28 09:43:27  ID:8AGhJBnr.net
シンボリックリンクだろうがジャンクションだろうがディレクトリ消すならならrdだろ
コメント1件

89
デフォルトの名無しさん[sage]   投稿日:2015/04/28 17:42:15  ID:Az6wvvs4.net
del はファイル削除、 * でなくて *.* でも?
フォルダごと消すなら >88

90
デフォルトの名無しさん[sage]   投稿日:2015/04/30 12:53:11  ID:ViywK5A0.net
rdでいけました
ありがとうございます

91
デフォルトの名無しさん[]   投稿日:2015/05/04 18:32:55  ID:hzJehWEx.net(2)
最近、バッチ童貞を卒業しました。
ディレクトリにある全てのファイルをhoge.exeにドラック&ドロップするパッチを作ろうとしています。
>25を参考に作っていましたが、hoge.exeが複数立ち上がってとんでもない状態になってしまいました。
hoge.exe foo1 foo2 ...
が実行できるパッチはどのように書けば良いでしょうか?
よろしくお願いいたします。

92
デフォルトの名無しさん[sage]   投稿日:2015/05/04 19:01:55  ID:tr24rDGI.net
start "" /wait "hoge.exe" foo1 foo2
でどや?

93
デフォルトの名無しさん[sage]   投稿日:2015/05/04 19:11:29  ID:vdCrn8hY.net
hoge.exe %*

94
デフォルトの名無しさん[]   投稿日:2015/05/04 20:18:58  ID:hzJehWEx.net(2)
cd /d "E:¥aaa"
for %%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)

95
デフォルトの名無しさん[sage]   投稿日:2015/05/05 00:56:28  ID:cn76hmxd.net
setlocal EnableDelayedExpansion
set FILES=
cd /d "E:\aaa"
for %%x in (*.*) do set FILES=!FILES! "%%~x"
hoge %FILES%
コメント1件

96
デフォルトの名無しさん[sage]   投稿日:2015/05/05 03:50:23  ID:jBh84Fwc.net
引数で渡せる文字列って制限なかったっけ?
任意フォルダの全ファイルを一度に羅列して渡すのはできるだけ回避したほうが良くないかな
コメント1件

97
デフォルトの名無しさん[]   投稿日:2015/05/05 12:12:24  ID:h/qL4+vG.net
>95
ありがとうございます
すごい
ずっと悩んでいたから感激です
ほんと助かりました

>96
拡張子でしていしておきました
アドバイスありがとうございます

98
89[]   投稿日:2015/05/06 18:36:51  ID:kduajoAs.net(2)
93の方法で上手くいったのですが、欲が出てきてしまいました。
サブフォルダにあるファイルについてもできないか試していましたが、うまくいきませんでした。
試したのは
setlocal EnableDelayedExpansion
set FILES=
for /R "E:¥aaa" %%x in (*.bbb) do set FILES=!FILES! "%%~fx"
hoge %FILES%
です。%%~xを%%~fxや%%~$PATH:xに変えてみましたが、だめでした。
何かいい方法は無いでしょうか?

99
89[]   投稿日:2015/05/06 19:36:01  ID:kduajoAs.net(2)
hoge.exeが使ってはいけない文字を使っていたようでした
ファイル名、ファルダ名を変えたらうまくいきました

100
sage[]   投稿日:2015/05/07 02:20:57  ID:kCRc77b6.net(4)
なんちゃってインストーラーを作成したく下のように書いたのですが、管理者として実行するとcmdが一瞬開いた後閉じてしまいます。
調べてみたのですがどうしたらいいか分りませんでした。どうやったら上手くいくのかどなたかご教示して頂けないでしょうか?
その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

101
デフォルトの名無しさん[sage]   投稿日:2015/05/07 02:30:30  ID:VKPrOxig.net
@echo off

@echo on

exit

pause

にしてチェックしてみるとか
コメント1件

102
デフォルトの名無しさん[sage]   投稿日:2015/05/07 08:06:10  ID:VSUD10fG.net(2)
pause入れて一行ごとに確かめるしかないでしょうなあ
コメント1件

103
デフォルトの名無しさん[sage]   投稿日:2015/05/07 11:09:54  ID:KWH/KWxF.net
C:ドライブ以外に置いてあると引っかかりそうなのは
cd %~dp0

cd /d %~dp0

cd \Windows\SysWOW64

cd /d C:\Windows\SysWOW64
コメント1件

104
デフォルトの名無しさん[sage]   投稿日:2015/05/07 16:36:18  ID:96jPVZUT.net
エラーとは関係ないけどバッチからregsvr32実行するなら/sオプション付けないと
「成功しました」ってメッセージボックス出てそれ閉じるまでバッチの動作止まっちゃうね
コメント1件

105
sage[]   投稿日:2015/05/07 22:31:45  ID:kCRc77b6.net(4)
>101,>102 試してみたのですが変わらず一瞬で閉じてしまいました。

>103 C:ドライブ上ですら上手くいかないので最初は付けていたのですが外しました。

>104 /s は付けないほうが成功しましたと出るので、成功できてることが確認できていいかなと思いまして付けてませんでした。

自己解決しました。ファイル名だと動かなくなくことは知っていたのですが、どうやらフォルダ名も半角の括弧があると、バッチを右クリックで管理者として実行してもバッチとして認識されないようでした。
基本的なところが間違っていたようです。

色々とお騒がせしてすいませんでした。


ダブルクリックだと半角括弧あっても動くのに・・・

106
デフォルトの名無しさん[sage]   投稿日:2015/05/07 22:59:18  ID:VSUD10fG.net(2)
じゃあそれcmd.exe壊れてるんじゃね
一行ごとにpause入れて止まらんとか聞いたことないぞ

107
sage[]   投稿日:2015/05/07 23:15:37  ID:kCRc77b6.net(4)
そうなのでしょうか?
PCが2台あるのでregsvr32で試したのですが両方が同じ結果でした。
フォルダ名に半角括弧の( を付けて、管理者権限が必要なコマンドが入ったものを試していただけないでしょうか?
)だけだとなぜかうまくいきました。

108
デフォルトの名無しさん[sage]   投稿日:2015/05/07 23:24:22  ID:yEqXNtFT.net
"("を含むパス上にあるbatファイルを、「管理者として実行」で正常実行できない
https://social.msdn.microsoft.com/Forums/ja-JP/43f69d0b-1e8a-457b-8e85-57f4c06f...
コメント1件

109
sage[]   投稿日:2015/05/07 23:44:02  ID:kCRc77b6.net(4)
>108 ありがとうございます。OS入れ直しかと思ってた。

110
デフォルトの名無しさん[sage]   投稿日:2015/05/08 00:08:07  ID:0odcB8A0.net
一般的にシステムを作るときには、
パス・ファイル名には、半角英数字と、
_ アンダーバーだけを使う

日本語、空白、/ \ などは、
外人が作ったアプリや他のOSで、バグを起こす

外人は日本語のことまで考えて、
アプリを作っていないため
コメント3件

111
sage[]   投稿日:2015/05/08 00:43:49  ID:1YMiCyWS.net
>110肝に銘じます

112
デフォルトの名無しさん[sage]   投稿日:2015/05/08 01:22:21  ID:DmYJm/wo.net
>110
> 日本語、空白、/ \ などは、
> 外人が作ったアプリや他のOSで、バグを起こす

逆になるべく日本語フォルダ、ファイル名にしておけば
海外製ウィルスが動作しなくなるかな
コメント1件

113
デフォルトの名無しさん[sage]   投稿日:2015/05/08 09:58:38  ID:5fQ7r8Aw.net
>112
イカタコとかは無理じゃね

114
デフォルトの名無しさん[sage]   投稿日:2015/05/08 16:37:33  ID:U2au088Y.net
そもそもウイルスが壊してくるのはWindows内だったりするからいみないんだよなあ

全部日本語の窓互換OS開発すればありかもしれない

115
デフォルトの名無しさん[sage]   投稿日:2015/05/08 22:38:18  ID:KwMVu8yd.net
>110
Program Files(x86)とかいう名前をつけたのは外人だろ?

116
デフォルトの名無しさん[sage]   投稿日:2015/05/12 23:56:25  ID:McgsoQJk.net
ドライブの空き容量を簡単に調べる方法はありますか。
dirを使えば最後に出ますが。

117
デフォルトの名無しさん[sage]   投稿日:2015/05/13 00:19:46  ID:IRvX1zB3.net
fsutil volume diskfree c:
コメント1件

118
デフォルトの名無しさん[sage]   投稿日:2015/05/13 00:44:59  ID:++gYyXti.net
>>117
ありがとうございます。

FSUTIL ユーティリティには管理者特権が必要です。
でしたが。

119
デフォルトの名無しさん[sage]   投稿日:2015/05/13 01:05:56  ID:7VTqgTSP.net
wmic logicaldisk c: get freespace
コメント1件

120
デフォルトの名無しさん[sage]   投稿日:2015/05/15 21:00:38  ID:FSXq3hA5.net(2)
行の最後が\記号の場合、その\記号を削除する方法を
探しています。

E:\の場合はE:にしたいのです。
理由は、aria2c -dオプションでドライブ指定[E:\]の場合正常に動作せず、
[E:]で動作する。ためです。

よろしくお願いします。
コメント1件

121
デフォルトの名無しさん[]   投稿日:2015/05/15 21:37:19  ID:G1rKhc+A.net
>120
Googleでバッチファイル、テキストファイル、置換のキーワードでヒットするサイトを参考にしたら?
コメント1件

122
デフォルトの名無しさん[sage]   投稿日:2015/05/15 21:58:52  ID:XJBM+btE.net
「行の最後」って何なのか分からないけど、仮に環境変数に入れた文字列だとすると
set x=E:\
if "%x:~-1%" equ "\" set x=%x:~0,-1%
コメント1件

123
デフォルトの名無しさん[sage]   投稿日:2015/05/15 22:00:53  ID:j/48pAYL.net

124
デフォルトの名無しさん[sage]   投稿日:2015/05/15 22:30:21  ID:FSXq3hA5.net(2)
>121
>122
>123

ありがとうございました。

125
デフォルトの名無しさん[sage]   投稿日:2015/05/16 00:42:02  ID:O4uFm57f.net
>119
ありがとうございます。表示できました。

wmic というコマンドは知りませんでした。
wmic /? でみると巨大なコマンドなのに。

126
デフォルトの名無しさん[sage]   投稿日:2015/05/18 19:51:05  ID:a89GM3eE.net(3)
for文の/Fオプションである
"delims="と"tokens=*"の違いがわかりません
どちらも区切りなしで全てが対象の気がするんです
どのように使い分けてるんでしょうか?

127
デフォルトの名無しさん[sage]   投稿日:2015/05/18 20:11:44  ID:a89GM3eE.net(3)
例えば文字列の長さ取得するvbsをbat内で取得する時、こんな感じだと思いますが
for /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の違いが解んないです

128
デフォルトの名無しさん[sage]   投稿日:2015/05/18 20:35:07  ID:/17k7IVe.net
出力が
"c:\program files\aaa\bbb.exe"
みたいな空白を含み両端が""で囲まれている時に
%%iだと"c:\program files\aaa\bbb.exe"になり
%%~iだとc:\program files\aaa\bbb.exeになるという違いがあるから
受け取るのが数値を表した文字列の場合はどっちも一緒
コメント1件

129
デフォルトの名無しさん[sage]   投稿日:2015/05/18 22:47:45  ID:clhkHSwG.net
for /f "tokens=*" %i in (" hoge") do echo %i
コメント1件

130
デフォルトの名無しさん[sage]   投稿日:2015/05/18 23:43:20  ID:a89GM3eE.net(3)
>128
ちょっと確認とれないけど、言ってる意味はわかりました
ありがとうございます
>129
スペースの有無で結果が変わりますね
違いがわかりました。ありがとうございます

131
デフォルトの名無しさん[sage]   投稿日:2015/05/20 17:18:51  ID:/oDHFiER.net(4)
条件に当てはまる複数のフォルダの移動を行いたいのですが上手く行きません。
ご助力をお願いいたします。

目的:任意フォルダ配下のサブフォルダから、行頭にの”[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% でも構文エラーが出ます。
ワイルドカードの記述がよく判っておりません。

132
デフォルトの名無しさん[sage]   投稿日:2015/05/20 17:26:51  ID:/oDHFiER.net(4)
× set path_moto=%d_moto%\[aaa]*  /* 移動の対象フォルダ*/
○ set path_moto=%d_moto%\[AAA]*  /* 移動の対象フォルダ*/

失礼しました。上記レスには他にも誤字がありますがご勘弁願います。
コメント2件

133
デフォルトの名無しさん[sage]   投稿日:2015/05/20 17:41:33  ID:Wa0xSOyJ.net(2)
>132
実行したとき、コマンドプロンプトにどういうメッセージが出てたのか分からないので想像になるが
多分半角空白が含まれるフォルダ名のところでエラーが出てるんじゃない?
%%f -> "%%~f"

%d_moto%と%d_saki%には半角空白が含まれる可能性がないとするなら上の変更でいいと思う
あと、パス名ファイル名に大文字小文字の区別はないので>132の上も下も全く同じ
コメント1件

134
デフォルトの名無しさん[sage]   投稿日:2015/05/20 19:23:26  ID:/oDHFiER.net(4)
>133 レスありがとうございます。
for /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、アドミン&管理者モードで実行しています。
コメント1件

135
デフォルトの名無しさん[sage]   投稿日:2015/05/20 19:39:25  ID:Wa0xSOyJ.net(2)
>134
ちゃんと説明しなかったけど、まあこう書けばヘルプ見て分かると思ったんだけど
for /d %%f in (%path_moto%) do move "%%~f" %d_saki%

for /?
pause /?
コメント1件

136
デフォルトの名無しさん[sage]   投稿日:2015/05/20 20:21:43  ID:/oDHFiER.net(4)
お手数をおかけしました。ヘルプ確認もしなかった事をお詫びいたします。

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した際に行尾に\を入れていなかったためか、
%%~f ではコンソール画面が強制終了してしまいましたので、%%fにしております

ご回答とお付き合い頂き、ありがとうございました。
コメント1件

137
デフォルトの名無しさん[sage]   投稿日:2015/05/20 21:09:45  ID:RmJGSs4fi
バッチにC言語みたいな注釈いれるなよ
まさかそのまま実行したのか?

138
デフォルトの名無しさん[sage]   投稿日:2015/05/21 08:17:34  ID:xGT/OYAlF
>136
> %%~f ではコンソール画面が強制終了してしまいましたので、%%fにしております

>135 をよく見ろ。2個とも %%~f にしたら駄目だ

139
デフォルトの名無しさん[]   投稿日:2015/05/22 18:53:43  ID:dDrrBwBt.net(2)
ファイル名にファイルの更新日時を付けてやろうと
set I="F:¥hoge¥test.txt"
set tem1=%~tI
set tem2=%tem1:"/"=%
set tem3=%tem2:" "="-"%
set tem4=%tem3:":"=%
rename %I% test%tem4%.txt
としてみたのですがうまくいきませんでした。
何かいいアイデアをお願いします。

140
デフォルトの名無しさん[sage]   投稿日:2015/05/22 19:08:31  ID:H1v/SBhd.net(2)
for %%i in (%I%) do set temI=%%~tI

141
デフォルトの名無しさん[sage]   投稿日:2015/05/22 19:09:49  ID:H1v/SBhd.net(2)
修正(変数Iなんか使うから間違えた)
for %%i in (%I%) do set temI=%%~ti
コメント2件

142
デフォルトの名無しさん[sage]   投稿日:2015/05/22 19:57:31  ID:rsRBQIIs.net
set I="F:\hoge\test.txt"
call :x %%I%%
goto :eof
:x
set "tem1=%~t1"
set "tem2=%tem1:/=%"
set "tem3=%tem2: =-%"
set "tem4=%tem3::=%"
rename "%~f1" "%~n1%tem4%%~x1"
コメント1件

143
デフォルトの名無しさん[]   投稿日:2015/05/22 20:29:14  ID:dDrrBwBt.net(2)
>141, >142
すげー
あんなに悩んでたのに一瞬で解決するなんて
ありがとう
コメント1件

144
デフォルトの名無しさん[sage]   投稿日:2015/05/23 01:08:59  ID:idOG0Vl/.net
>143
ご参考
大量にある、下位階層まで変更したい場合、
Flexible Renamer というフリーソフトもある
コメント2件

145
デフォルトの名無しさん[]   投稿日:2015/05/23 09:30:59  ID:sl1qWZ50.net

146
デフォルトの名無しさん[sage]   投稿日:2015/05/23 09:45:09  ID:EIZIQejy.net
>144
> 大量にある、下位階層まで変更したい場合

>141 の応用 (for /r) でいいだろ

147
デフォルトの名無しさん[]   投稿日:2015/05/30 17:32:47  ID:KPmzF3IM.net
指定日時まで一定間隔で繰り返すバッチはこれで大丈夫ですか?

: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
コメント2件

148
デフォルトの名無しさん[sage]   投稿日:2015/05/30 17:43:26  ID:KWAqrQi+.net
そういうのは俺ならタスク(スケジューラ)を使うけど
jt.exeとかschtasksとか

149
デフォルトの名無しさん[sage]   投稿日:2015/05/30 19:41:05  ID:h+FcqRuX.net
>147
LOOP部分だけど、それだと指定日時に一致しない場合は延々ループし続ける
AよりBが小さいのようにGEQやLEQなどの比較演算子のほうがよさそう
if %YYYYMMDDHHMMSS% LSS 20150531000000 (
数値比較の場合はダブルクォートは外したほうがいい
コメント1件

150
デフォルトの名無しさん[sage]   投稿日:2015/05/30 20:49:16  ID:elL7Ij3fn
>149
高々32ビット整数しか演算出来ないのに
そんなの、まともに比較出来ると思うのか?

151
デフォルトの名無しさん[sage]   投稿日:2015/05/30 20:55:20  ID:NQWNmwnG.net(2)
高々32ビット整数しか演算出来ないのに
そんなの、まともに比較出来ると思うのか?

152
デフォルトの名無しさん[sage]   投稿日:2015/05/30 21:09:00  ID:NQWNmwnG.net(2)
試してみろ

if 20150530999999 LSS 20150531000000 echo aho
if "20150530999999" LSS "20150531000000" echo baka

153
デフォルトの名無しさん[sage]   投稿日:2015/05/31 01:38:25  ID:jBtv10qY.net
>147
日時判定のif文を二段階にしたら
最初年月日で、次に時分秒で

154
デフォルトの名無しさん[sage]   投稿日:2015/05/31 03:52:31  ID:6BGakI3g.net
ダブルクォートを外さなければ問題ないんじゃね
数字だけだと数値比較、それ以外は文字列比較
32ビット整数を超える数値なら文字列比較で

155
デフォルトの名無しさん[sage]   投稿日:2015/05/31 04:52:13  ID:ntMrQIQA.net
:LOOP
  if "%date%"=="2015/05/31" goto NEXT
  start "hoge" /wait "hoge.bat"
  ping localhost -n 600 > nul
  goto LOOP
:NEXT

でよくね
厳密にやりたかったら日時型すらないバッチなんぞ捨ててしまえ

156
デフォルトの名無しさん[sage]   投稿日:2015/06/02 11:53:10  ID:kNAcHIfI.net(2)
特定のフォルダ配下の空のフォルダだけを抽出して処理したいのですが上手く行きません。

特定のフォルダ配下の子フォルダの中身にはどんなファイル、孫にあたるサブフォルダ(※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毎)

(つづく)

157
デフォルトの名無しさん[sage]   投稿日:2015/06/02 11:56:57  ID:kNAcHIfI.net(2)
set dir_path=d:\temp
set 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では困難でしょうか?正解コーデングのご呈示をお願い申し上げます。
コメント2件

158
デフォルトの名無しさん[sage]   投稿日:2015/06/02 19:30:38  ID:KyjHTQN8.net(3)
>157
eeeの本処理(退避場所に移動させる)って言うけど
eeeはファイルのフォルダも無い空のフォルダだよね?
退避させる意味あるの?

159
デフォルトの名無しさん[sage]   投稿日:2015/06/02 21:40:21  ID:KyjHTQN8.net(3)
@echo off
pushd 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

160
デフォルトの名無しさん[sage]   投稿日:2015/06/02 21:48:29  ID:KyjHTQN8.net(3)
訂正
call :sub "z:\test" proc1 → call :sub . proc1
call :sub "z:\test" proc2 → call :sub . proc2

161
デフォルトの名無しさん[sage]   投稿日:2015/06/02 23:07:01  ID:mV5sXZYH.net
全角空白 + 半角空白
または
半角空白 + 全角空白

2ch推奨NGワードなので避けませう

162
デフォルトの名無しさん[sage]   投稿日:2015/06/03 00:33:22  ID:PtFxkubO.net
>157 サブフォルダ名に半角空白を許す変更(行数の制限のため複数コマンドを1行に詰めてる所あり)
@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

163
デフォルトの名無しさん[sage]   投稿日:2015/06/03 07:12:21  ID:WCFfLif6.net
cd /d "d:\temp"
set "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
本処理
コメント1件

164
デフォルトの名無しさん[sage]   投稿日:2015/06/04 21:39:02  ID:E36uiKc8.net
>163
3行目
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

165
デフォルトの名無しさん[sage]   投稿日:2015/06/06 19:29:25  ID:iCqfzRte.net(2)
自分で環境変数のpathに追加したコマンドはbatファイルでは使えませんか?
firefoxのアドオンをつくろうと思い、アドオンのインストールを自動化するために
以下のbatファイルを作成しました。

@echo off
:loop
jpm xpi
wget --post-file=@helloworld-0.0.1.xpi http:/localhost:8888/
sleep 5000
goto loop

しかし、次のようなメッセージがループします。
"'jpm'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。"
"'wget'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。"
"'sleep'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。"

jpm,wget,sleepはコマンドプロンプトからだと3つともちゃんと動きます。なのでbatでは自分で追加したコマンドは
ダメなのかと思ったので質問しました。

環境はwindows 7 Home Premium 64bit sp1です。

166
デフォルトの名無しさん[sage]   投稿日:2015/06/06 20:59:24  ID:hSodQv/B.net
> 自分で環境変数のpathに追加したコマンドはbatファイルでは使えませんか?
使える。キミが何か間違っているが、必要な情報を提示していないので、それ以上の事は不明。
コメント1件

167
デフォルトの名無しさん[sage]   投稿日:2015/06/06 21:36:49  ID:iCqfzRte.net(2)
>166
僕が怪しいかなと思う部分を上げてみます。

1,batファイルはコマンドプロンプトでコマンドが期待通り動いた作業ディレクトリに置いています。

2,環境変数のPathに追加したというのは、システムのプロパティ→詳細設定→環境変数で設定していました。
ログインしているユーザーの環境変数のPathにjpm,sleeepのパスを、システム環境変数のPathにwgetのパスを設定していました。

3,パスの書き方は、コマンドの実行ファイルがあるディレクトリのフルパスをコピーして";"で区切っています

3,ログインしているユーザーは管理者


バッチファイルの先頭で「SET PATH=%PATH%;追加パス」を追加したら一応動いたのですが、
必要ではないんじゃないかとなんとなく思って気になってしまいます。

168
デフォルトの名無しさん[sage]   投稿日:2015/06/07 00:35:36  ID:TwcY/oci.net
いい加減XPもなくなっただろうし
timeoutが市民権を得てもいいと思うんだけどなー

169
デフォルトの名無しさん[sage]   投稿日:2015/06/07 01:59:54  ID:uKDfTV9k.net
batファイルの最初に
echo %path%
を入れてデバッグしよう

sleep → timeout

170
デフォルトの名無しさん[sage]   投稿日:2015/06/07 03:08:07  ID:u7+f65Ad.net
>2,環境変数のPathに追加したというのは、システムのプロパティ→詳細設定→環境変数で設定していました。

これ設定しても既に動いてるプロセスには即反映されないから
プロセスを再起動したり、一旦ログアウトしないといけないこともある
そこら辺で混乱があったのかもな

SET PATH=%PATH%;追加パス

SET PATH=追加パス;%PATH%
の方が良かったりすることもある
ファイル名がぶつかったとき呼び出したいものが呼び出せないこともあるから

バッチ実行時の最終的なパスがどうなってるのか確認したかったら
@echo off
path&pause
:loop
とかやっとくといい

171
デフォルトの名無しさん[sage]   投稿日:2015/06/07 15:23:50  ID:MMVoxWft.net(2)
>168
>169
>170
アドバイスありがとうございます。
>170さんの言うとおり、パソコンを再起動したらちゃんとpathが反映されました。
みなさんのアドバイスを参考にして、あと、短いけどなるべく使いまわせるように役割ごとにばらそうと考え
最終的にこういう風にしました。
====auto_addon_install.bat=====
@echo off
call confirming_path.bat
:loop
call jpm_xpi.bat
wget --post-file=@helloworld-0.0.1.xpi 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
==================
これからアドオンをつくってみようと思います。ありがとうございました。

172
デフォルトの名無しさん[sage]   投稿日:2015/06/07 16:49:41  ID:LTwn0E2k.net
呼び出す子バッチ側は exit /B で終了させないと親バッチへ戻ってこないよ
処理結果を確認する意味で終了コードを利用してもいいかもね
call jpm_xpi.bat
if ERRORLEVEL 1 (echo Exit Status %ERRORLEVEL%) &amp; pause &amp; goto :EOF
wget 以下略
====jpm_xpi.bat====
@echo off
jpm xpi
if %ERRORLEVEL%==1 exit /B 1
if %ERRORLEVEL%==0 exit /B 0
コメント2件

173
デフォルトの名無しさん[sage]   投稿日:2015/06/07 20:59:15  ID:MMVoxWft.net(2)
>172
そうだったのですか。
確かにpath確認用のconfirming_path.batをした後に、親バッチへ戻ってきていませんでした。
しかし、jpmの仕様なのか、confirming_path.batをコメントアウトしただけで,jpmの方は親バッチへ戻ってきしまいました。
僕がjpmを別のbatに移そうと思ったのは、メインのバッチファイルでjpmを実行するとjpmを実行した時点で処理が終了してしまうからです。
もしかしてこれが、jpmのバッチファイルがexit /Bを使わずに親バッチへ戻ってくることとなにか関係があるのでしょうか。

終了コードの書き方も参考にさせて頂きます。

174
デフォルトの名無しさん[sage]   投稿日:2015/06/11 06:24:09  ID:zvXhuG+H.net
dir /s /b | grep AAA | xxx

ここでxxxは過去に出力したログを検索してヒットしたら出力しない、
何度この行を実行しても常にユニークな出力しかされないということをやりたいんですが
うまい方法ないですか

175
デフォルトの名無しさん[sage]   投稿日:2015/06/11 08:30:10  ID:o9tryPI0.net
>172
ありがとうございます。引数渡しもあるのですね。
勉強になりました

176
デフォルトの名無しさん[sage]   投稿日:2015/06/15 18:12:46  ID:GJ2N2cUz.net
set /A を使うと計算できますが、
ゼロから始まる数字は10進でなく8進法扱いされおかしな結果になります。
ゼロが何個も続く可能性のある数字文字列から最初のゼロを取る
簡単のやり方を教えて下さい。
コメント2件

177
デフォルトの名無しさん[sage]   投稿日:2015/06/15 19:34:37  ID:PeZ0fZ8f.net
>176
簡単な方法は知らんが、愚直な方法としては %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
コメント2件

178
デフォルトの名無しさん[sage]   投稿日:2015/06/15 20:03:52  ID:IzyZ+arn.net
>176

set "a=0123"
set /a "b=1%a%*2-2%a%"
echo "%a% --> %b%"
コメント1件

179
デフォルトの名無しさん[sage]   投稿日:2015/06/15 22:25:16  ID:C49nk280.net
for /f "tokens=* delims=0" %i in ("%a%") do set /a a=%i-0
コメント2件

180
デフォルトの名無しさん[sage]   投稿日:2015/06/16 01:55:22  ID:xfn3wJg6.net
>177-179
ありがとうございます。
勉強になりました。

>178さんはすぐに意味がわかりませんでしたが、やってみて納得、
set "a=0123" のように "" で囲めるのは初めて知りました。

>179さんはエラーが出ますが、

181
デフォルトの名無しさん[sage]   投稿日:2015/06/16 05:24:35  ID:kBkkj2GI.net(4)
バッチなら %i を %%i にする
>179 の -0 と /a は不要
コメント1件

182
デフォルトの名無しさん[sage]   投稿日:2015/06/16 17:38:49  ID:fIwvDifY.net
>177の下のはダメなので取り消し

>181
とっちゃダメ
コメント1件

183
デフォルトの名無しさん[sage]   投稿日:2015/06/16 20:07:51  ID:kBkkj2GI.net(4)
>182
不要だよ

184
デフォルトの名無しさん[sage]   投稿日:2015/06/16 20:35:30  ID:kBkkj2GI.net(4)
ああ、a=0 の場合か
でも a が空だと不味いぞ

185
デフォルトの名無しさん[sage]   投稿日:2015/06/16 21:06:14  ID:kBkkj2GI.net(4)
これなら a が空でもOKかな
for /f "tokens=* delims=0" %%i in ("%a%-0") do set /a a=%%i
バッチじゃなくて直接入力だと "%a%" に展開されるのでNG

186
デフォルトの名無しさん[sage]   投稿日:2015/06/26 06:01:05  ID:sKB1AmZZ.net
PS講座にしろよw

Tech TIPS:バッチファイルの基本的な使い方 - @IT
http://www.atmarkit.co.jp/ait/articles/1506/26/news026.html

187
デフォルトの名無しさん[sage]   投稿日:2015/06/27 23:07:54  ID:5TA1TjZr.net
あるディレクトリ(サブディレクトリ含む)以下の特定の拡張子(.jpgや.pngなど)を
一括でコピーしたいのですが、xcopyやrobocopyでどのように記述すればいいのでしょうか?
ヘルプを見ると、除外するオプション(/EXCLUDE)は記載されていましたが
この方法だと指定するのが多くなりすぎて不便で困っている状態です
ご教示よろしくお願いします
コメント1件

188
デフォルトの名無しさん[sage]   投稿日:2015/06/28 12:19:29  ID:Mckk18LI.net
>187
robocopy /s コピー元 コピー先 *.jpg *.png

189
デフォルトの名無しさん[sage]   投稿日:2015/06/28 16:57:40  ID:hilWFqBu.net
for %%i in (jpg gif png) do echo copy *.%%i dest\

190
182[sage]   投稿日:2015/06/29 22:19:20  ID:xFjGO25h.net
遅れましたがアドバイスありがとうございました

191
デフォルトの名無しさん[sage]   投稿日:2015/06/30 09:40:16  ID:T2wiUbpe.net(2)
メモ帳を起動してフォーカスが外れたら勝手に終了させるってどうやったらいいですか
コメント1件

192
デフォルトの名無しさん[sage]   投稿日:2015/06/30 10:23:04  ID:T2wiUbpe.net(2)
"ウインドウからフォーカスが外れたら"です
補助ツールの起動用として汎用的に使いたいと思ってます

193
デフォルトの名無しさん[sage]   投稿日:2015/06/30 12:20:24  ID:28t7zSj6.net

194
デフォルトの名無しさん[sage]   投稿日:2015/07/01 01:32:24  ID:MjkDd52T.net
>191
そういう処理はバッチファイル向きじゃないのでAutoHotkeyとかのツール使った方がいいと思う

195
デフォルトの名無しさん[]   投稿日:2015/07/02 17:26:26  ID:UInPCaD/.net
batで、%1に[秘]が含まれていたらaaa.exeを実行する
ってどうやって書けばいいですか?

196
デフォルトの名無しさん[sage]   投稿日:2015/07/02 18:15:40  ID:W1iwlrdH.net
find のerrorlevel

197
デフォルトの名無しさん[sage]   投稿日:2015/07/03 02:00:44  ID:DFRnLTHh.net
echo;%1 | find "[秘]" > nul && aaa.exe
じゃね?

198
デフォルトの名無しさん[sage]   投稿日:2015/07/03 19:45:25  ID:UldOsxiv.net
set x=%1
if not %x:秘=%' == %1' aaa.exe

199
デフォルトの名無しさん[sage]   投稿日:2015/07/04 07:18:12  ID:vLkJmuOy.net
必要に応じてクイック起動からコマンドプロンプトを起動しているのですが、
起動のたびに指定のバッチファイルを自動で実行させる方法ないですか。
コメント2件

200
デフォルトの名無しさん[sage]   投稿日:2015/07/04 12:58:13  ID:qSlQKSp6.net
>199
実行したいバッチファイルの最終行に「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

201
デフォルトの名無しさん[sage]   投稿日:2015/07/04 13:08:57  ID:s7zvO/Zm.net
>199
コマンドプロンプトのショトカットを右クリックし、プロパティを開いて
リンク先が〜cmd.exe"になってるところを、"〜cmd.exe" /K "バッチフルパス.bat"
って書き換えればいいんじゃね?

202
デフォルトの名無しさん[sage]   投稿日:2015/07/05 22:30:41  ID:CaTht0J/.net
windows8.1で Bluetoothを PCの設定の変更 PCとデバイス Bluetooth OFFにする ONにする
と言う バッチ処理教えて  時々 Bluetooth機器が阿保になるので

203
デフォルトの名無しさん[]   投稿日:2015/07/09 00:33:36  ID:x+M3PwTo.net
hoge1.bat、hoge2.batを同時に動かしてこの2つが終了した後にコマンド1を動かそうと思っています。
それで.
start hoge1.bat
start hoge2.bat
コマンド1

start /w hoge1.bat
start /w hoge2.bat
コマンド1
を試してみましたがダメでした。
何かいいアイデアはありませんか?
よろしくお願いします。

204
デフォルトの名無しさん[sage]   投稿日:2015/07/09 01:33:00  ID:EFIo5QkZ.net
hoge1|hoge2

205
デフォルトの名無しさん[]   投稿日:2015/07/11 23:54:44  ID:zNJDNBRR.net
パイプがどうしてそうなるのですか?

206
デフォルトの名無しさん[sage]   投稿日:2015/07/12 00:31:32  ID:JwgGsFih.net(2)
パイプは「同時に起動して」標準出力と標準入力を繋げる機能なのは分かるよね。
そしてつなげた標準入出力は別に使う必要は無いわけで。
コメント1件

207
デフォルトの名無しさん[sage]   投稿日:2015/07/12 00:34:11  ID:JwgGsFih.net(2)
書き忘れたけど礼を言うなら>204にね。

208
デフォルトの名無しさん[sage]   投稿日:2015/07/12 12:41:45  ID:yyKtP/0V.net
バッチでできるかわからないのですが
windows8.1でBluetoothキーボード、マウスを使用しています
しばらく使用しないとキーボードが自動的に休止になってしまい
以降 Bluetoothを一旦OFFして再度ONしないと接続ができません。
これをマウスで操作すると5,6回の操作が必要です
バッチでBluetoothをOFF ONするようなコマンドは作れるんでしょうか?
コメント2件

209
デフォルトの名無しさん[sage]   投稿日:2015/07/12 14:06:18  ID:leLDDrPp.net
>208
対象のハードウェアIDを調べてdevcon.exe使えばバッチから可能かも
簡単に書くと、事前にデバイスマネージャーでBluetooth機種のハードウェアIDを調べる
devcon.exe disable "対象のBluetooth機種のハードウェアID"
devcon.exe enable "対象のBluetooth機種のハードウェアID"
みたいな流れね
ハードウェアIDがわからないならあきらめろん
コメント1件

210
デフォルトの名無しさん[sage]   投稿日:2015/07/12 14:09:25  ID:cZduJ3g5.net
>208
詳しくないが、DevConが必要らしい

211
デフォルトの名無しさん[sage]   投稿日:2015/07/12 14:39:15  ID:ZoJlZfIr.net(2)
DevConって管理者権限必要なんだけどキーボードもマウスもBTならOFFにした後
ONにするときにUACのダイアログを操作するデバイスなくない?

212
デフォルトの名無しさん[sage]   投稿日:2015/07/12 15:40:00  ID:ZoJlZfIr.net(2)
あ、バッチファイル自体を管理者で実行すればいいのか。
206は無視してください…

213
デフォルトの名無しさん[]   投稿日:2015/07/12 16:00:47  ID:PO2rWK+p.net
>206
ありがとうございます
そういことか
ごっちゃな出力でパニクってました
パイプを順次に起動してと思い込んでいました

214
デフォルトの名無しさん[sage]   投稿日:2015/07/13 02:19:24  ID:oxguYBiy.net
Win10インスコ時のProgramFiles(x86含む)を除いてProgramFilesの移動、ジャンクションするbatどうすれば

http://www.natzworks.com/digital/entries/2010/000263.html
だとWinインスコ時のも移動させちゃうからアプリストアなど動かない

215
デフォルトの名無しさん[sage]   投稿日:2015/07/13 13:24:27  ID:ck7CB2gy.net(2)
>209
動かん 先ずは止めてみようと思い
C:\User\i386\devcon.exe disable "HID\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002056e_PID&102d&Col01"
pause
exit
と打ったが 止まらん 
ハードウェアIDが間違ってるの?詳細の一番上の一行だけど
コメント1件

216
デフォルトの名無しさん[sage]   投稿日:2015/07/13 13:53:24  ID:RWTt7ci0.net(2)
>215
記号類で引っかかってるのかも
^& のように ^ 記号でエスケープしたらどう
コメント1件

217
デフォルトの名無しさん[sage]   投稿日:2015/07/13 21:54:00  ID:ck7CB2gy.net(2)
>216
この表現わからない。

218
デフォルトの名無しさん[sage]   投稿日:2015/07/13 22:54:36  ID:RWTt7ci0.net(2)
ハードウェアIDの後半のいくつかのアンド記号のこと
}_VID&0002056e_PID&102d&Col01

}_VID^&0002056e_PID^&102d^&Col01
のように ^ 記号でアンド記号をエスケープする案を示した
バッチファイルからみてアンド記号はコマンド扱いなの

※ 文字化け対策のため & 記号を全角文字表記したので、実際には半角に直して

それと無関係なもの止めるとまずいからハードウェアIDの確認方法も書いておく
大まかな方法だけどコマンドプロンプトから実行して、該当するか確認して
devcon hwids *| find /I "HID"

219
デフォルトの名無しさん[sage]   投稿日:2015/07/13 23:24:19  ID:9jM/hgDM.net
HIDって分かっているなら
devcon findall HID\*

devcon find HID\*
とか
devcon hwids HID\*
の方が見当つけ易いんじゃなかろうか

220
デフォルトの名無しさん[sage]   投稿日:2015/07/14 00:05:27  ID:xh4YNKiw.net
存在確認だけだから方法はなんでも
バッチ処理前提だから
devcon hwids *|find /I "HID"|find /I "0002056e"|find /I "102d"
if ERRORLEVEL 1 goto ERROR
if ERRORLEVEL 0 goto BEGIN
みたいに段階的にフィルタして絞り込む形もとりえるかなと
安全でやりやすい方法ならなんでもいいの

221
デフォルトの名無しさん[sage]   投稿日:2015/07/14 04:06:21  ID:ayHDk+Pv.net
64 ビット版 Windows では完全には機能しません。 とあるが…

ここに64ビット版があるらしい
試してみてくれ

http://delphintipz.blogspot.com/2012/07/disable-failed-no-devices-disabled.ht...

222
デフォルトの名無しさん[sage]   投稿日:2015/07/14 08:33:00  ID:TwNFk+SS.net(2)
cmdでAというフォルダ名を打ち込んだら
(コマンド名) "C:\Program Files\A" " D:\Program Files\A "←Aを代入
を実行してくれるbatって書けますか

223
デフォルトの名無しさん[sage]   投稿日:2015/07/14 09:05:32  ID:gam5IC3n.net(2)
書けます
コメント1件

224
デフォルトの名無しさん[sage]   投稿日:2015/07/14 12:17:36  ID:TwNFk+SS.net(2)
>223
サンプルか参考batアドバイス宜しく
コメント1件

225
デフォルトの名無しさん[sage]   投稿日:2015/07/14 13:11:19  ID:gam5IC3n.net(2)
>224
これでいいんじゃない?
set /p a=
command "c:\Program File\%a%" "c:\Program File\%a%"

226
デフォルトの名無しさん[sage]   投稿日:2015/07/21 07:37:07  ID:7WzjAJ7x.net
こんな処理ってどう書けばいいですか

process_stdin.bat

:loop
 if 標準入力がEOFなら goto :eof
 標準入力から1行ゲットして%line%に保存
 echo [%line%]
goto loop

>dir | process_stdin
[aaa.txt]
[bbb.txt]
[ccc.txt]
コメント1件

227
デフォルトの名無しさん[sage]   投稿日:2015/07/21 15:14:00  ID:J1lfUMsK.net

228
デフォルトの名無しさん[sage]   投稿日:2015/07/22 01:02:41  ID:StAbR0Ko.net
bat内でsetを書くときは、最初に setlocal、最後にendlocal で囲んでいたが、
通常の使い方だとendlocal は必要なかった
.batが終わると endlocalなしでもbat内変数は消える
(setlocalは必要)

以上、今日の発見でした。

229
デフォルトの名無しさん[sage]   投稿日:2015/07/22 02:32:17  ID:QnUh7Wvk.net
CALLされることを想定したらendlocalやっといたほうがいいんじゃないの?

230
デフォルトの名無しさん[sage]   投稿日:2015/07/24 19:24:15  ID:dL+uOqe7.net
明示的に使う場面は多くはないな
shiftやメニューの頭に戻ってのループ処理、親への環境変数の継承くらいか
クリアするのが主目的で、別な値を再設定して別の目的で使用とかは混乱の元だからしない

231
デフォルトの名無しさん[sage]   投稿日:2015/07/24 20:24:24  ID:+KpXt6+t.net
サブルーチンの再起呼び出しには絶対必要だけどね

232
デフォルトの名無しさん[sage]   投稿日:2015/07/24 22:44:30  ID:YYoMYHtn.net
DOS窓の内容をファイルにするのに、よい方法はありますか?
今のやりかたは
DOS窓で右クリ→編集→すべて選択→エディタでctrl-V
もっと簡単にできる方法があれば教えて下さい。
コメント1件

233
デフォルトの名無しさん[sage]   投稿日:2015/07/26 18:02:41  ID:YJ+DIjqN.net(3)
サブディレクトリを含む、ファイル名の一覧を出力したい
フォルダは除きたい

▼入力
dir /a-d /s /b

上記から、ファイルのパス部分を削除したい

for /f "delims=" %%a in ('dir /a-d /s /b') do @set x=%%a

変数に代入
ここから
ファイル名のみ取り出す方法がわかりません
なにか、いい案ないでしょうか
コメント1件

234
デフォルトの名無しさん[sage]   投稿日:2015/07/26 18:07:54  ID:YJ+DIjqN.net(3)
>232
|clip
>test.txt
コメント1件

235
デフォルトの名無しさん[sage]   投稿日:2015/07/26 18:38:20  ID:9oxiKXd0.net
>233
ファイル名のみってのが、カレントディレクトリまでのパス部分を削除したい、
じゃなくて本当にファイル名の一覧だけでいいなら
for /r %%i in (.) do @dir /a-d /b "%%~i" 2>nul 1>>list.txt
みたいな
コメント1件

236
デフォルトの名無しさん[sage]   投稿日:2015/07/26 18:52:45  ID:mOMjtGtu.net
出力時にファイル名だけにすりゃいいんでない?
for /f "delims=" %%a in ('dir /a-d/s/b') do echo %%~nxa
コメント1件

237
デフォルトの名無しさん[sage]   投稿日:2015/07/26 19:59:32  ID:YJ+DIjqN.net(3)
>235,>236
どちらの方法でも出来ました。
本当に助かりました。ありがとうございます!!

238
デフォルトの名無しさん[sage]   投稿日:2015/07/27 23:53:38  ID:T6/asWdF.net
>234
ありがとうございます。
前もって保存すると決まっている時は、clipなどを使えるのですが
いろいろやっていて、後で保存する必要が出た場合に簡単な方法があればと思いました。
長くかかる、再現しないなどでもう一度やれない場合です。
コメント2件

239
デフォルトの名無しさん[sage]   投稿日:2015/07/28 02:43:47  ID:+/z/OnI4.net
>238
直接コマンドプロンプト使うんじゃなくてConEmuみたいなの使ってログ取りオプション有効にして作業するとか
コメント1件


240
デフォルトの名無しさん[sage]   投稿日:2015/07/28 03:19:58  ID:tjBt9FXm.net(2)
>238
DOS 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%

241
デフォルトの名無しさん[sage]   投稿日:2015/07/28 03:33:41  ID:tjBt9FXm.net(2)
ちょっと訂正
@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%

242
デフォルトの名無しさん[sage]   投稿日:2015/07/29 01:55:10  ID:we/S8MTT.net(3)
初歩的な質問になってしまって申し訳ありません。
処理したいファイルをD&Dでバッチファイルに放り込んで処理。
なんてのはよくあると思いますが、この「バッチファイルに特定のファイルを放り込む」

243
デフォルトの名無しさん[sage]   投稿日:2015/07/29 01:55:42  ID:we/S8MTT.net(3)
途中送信してしまいました。
この、「特定のファイルをバッチファイルに放り込む」
なんて動作はどのように実現スレばいいのでしょうか?

244
デフォルトの名無しさん[sage]   投稿日:2015/07/29 02:41:38  ID:Mm94swUw.net
手でやれよw

245
デフォルトの名無しさん[sage]   投稿日:2015/07/29 03:39:06  ID:ObQZT/sF.net
foo.batにbar.txtをD&Dするのは引数1にbar.txtを記述するのと同じ
foo.bat bar.txt

246
デフォルトの名無しさん[sage]   投稿日:2015/07/29 04:08:32  ID:BtTeVh+H.net
それとも引数%1〜%9の事を言ってるのか?

247
デフォルトの名無しさん[sage]   投稿日:2015/07/29 04:15:58  ID:we/S8MTT.net(3)
ありがとうございます、助かりました。

248
デフォルトの名無しさん[sage]   投稿日:2015/07/30 01:06:22  ID:OBXU0hZ1.net
すいません、文字列抽出について質問させてください。

ファイルの中から特定の文字列を抜き出して、それらを結合するバッチを考えています。
凡例として以下のような内容のファイルから、特定文字列「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("がヒットしてから次に")"がヒットするまでの文字列を抜き出して変数に
格納する」という操作が、私なりに考えてみたもののわかりませんでした。

知恵をお貸しいただけないでしょうか。よろしくお願いします。
コメント1件

249
デフォルトの名無しさん[sage]   投稿日:2015/07/30 02:40:47  ID:vXeGU9RJ.net
>248
1char毎に分解してやれば出来ないことはないだろうけど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("++"));
コメント1件

250
デフォルトの名無しさん[sage]   投稿日:2015/07/31 01:23:28  ID:k8QkrhUe.net
>239
ありがとうございます。
ConEmu、DOS process LOG writer 調べてみます。

251
243[sage]   投稿日:2015/08/02 10:42:10  ID:KSbBJgW9.net
>249
遅くなってしまい申し訳ありません、レスありがとうございます。
ただ、個人的にはバッチのみを使って実現したいので、もう少し
足掻いてみようと思います。

252
デフォルトの名無しさん[sage]   投稿日:2015/08/02 17:51:00  ID:vXJ+TZnT.net
Windowsで使えるsedやgrepなどを導入するしかないな
スクリプトも使わず正規表現な置換処理するのは無理があり過ぎる

253
デフォルトの名無しさん[sage]   投稿日:2015/08/02 19:33:22  ID:KXoO9TBV.net
文字を分解して取り扱うにはbatはダメ文字というハードルが高くて挫折するから
まあ無駄な足掻きはやめたほうがいい

それと言語のコメントの判定はかなり厄介
#だって、 a="#"の場合はコメントじゃまずいだろうし
例えばエスケープを\とする場合、\#もコメントじゃなくなるだろうし
/* */で囲まれた中はコメントだとか、別の複数のコメントの記述があったり
複数行に跨ってコメントを許したりしてたら
もうそれこそ正規表現じゃ無理で簡単な言語解析のレベルになってしまう

254
デフォルトの名無しさん[sage]   投稿日:2015/08/09 10:30:39  ID:SNWYDjIy.net
コマンドプロンプトでのバッチの質問です。
フォルダを作成して、その中にbatファイルだけを入れて実行しています。
エラーレベルが!ERRORLEVEL!と表示されたり 9009と表示されます。
aaaaa.exeは実際にはありません。
setlocal enabledelayedexpansion
for /f %%i in ('dir /b /od *.*') do (
aaaaaa.exe
echo "エラーレベル" !ERRORLEVEL!
)
将来的には、フォルダ内のファイル数毎に、直前のコマンドの成否でバッチを書きたいです。
aaaaaa.exeがないので、0以外のエラーコードが返ってくると認識しています。
どこの書き方(理解)が間違っているか教えてください。
コメント3件

255
デフォルトの名無しさん[sage]   投稿日:2015/08/09 18:28:50  ID:Wo1alMTP.net(2)
forは実行前の解釈時点で展開されるので
for文に入る前のerrorlevel値が表示される
aaaaaa.exeの復帰値が反映されるのはfor文を抜けた後になる
コマンドプロンプトから実行してるのなら
初回実行時と2回目以降繰り返して実行した時の表示は上記の理由により変わってくる
コメント1件

256
デフォルトの名無しさん[sage]   投稿日:2015/08/09 18:45:19  ID:Q+5Xwfkz.net(2)
サブルーチンにして判定をcall echo でやるほうがわかりやすいかな
終了コードの変化を比較するため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
コメント1件

257
デフォルトの名無しさん[sage]   投稿日:2015/08/09 18:45:50  ID:Wo1alMTP.net(2)
>254
あれ、遅延環境変数展開の場合なのか
それなら正常にaaaaaa.exeの復帰値が正常に表示されるはずなんだけど?
そうなる理由はわかりません、ごめん
ちなみに9009は「ファイルがありません」エラー
コメント1件

258
デフォルトの名無しさん[sage]   投稿日:2015/08/09 18:54:25  ID:Q+5Xwfkz.net(2)
>254
251のは空のnotepadが開くよ
対象を開くなら以下な感じで引数指定ね
start "" notepad.exe "%~1"
コメント1件

259
デフォルトの名無しさん[sage]   投稿日:2015/08/10 11:54:29  ID:ma04BZuz.net
>255>257>258
レスありがとうございます。
>256 
スクリプト書いていただきありがとうございます。
:SUB側にcall echo %~1と書いて、ファイル名が取得できるのが確認できました。
知らないパラメータが多いですが、調べながら試しています。
助かりました。
コメント1件

260
デフォルトの名無しさん[sage]   投稿日:2015/08/10 23:31:07  ID:hLG0BCKw.net(2)
>259
例示した call echo %%環境変数%% は環境変数展開のバリエーションの一つであって、
call echo call引数の展開 のようなcallの使い方は適切ではないです
>254の質問時に echo "エラーレベル" !ERRORLEVEL! がうまく展開されないとのことだったので
forのカッコから外に出した上で別の展開方法を例示しただけで通常であれば !環境変数! でいい
call引数の値をechoするだけなら echo %~1 で用が足りる
call echo や call set などの使用法はアンドキュメントだし無理に使う必要もないけど
興味があるならぐぐって調べてほしい

261
デフォルトの名無しさん[sage]   投稿日:2015/08/10 23:38:50  ID:hLG0BCKw.net(2)
通常であれば !環境変数! でいい 、と書いた意味はわかると思うけど、
存在しない実行ファイルを指定しているのは通常ではないですよ、という意味ね

for /f %%i in ('dir /b /od *.*') do (
notepad.exe %%i
echo "エラーレベル" !ERRORLEVEL!
)
のように存在する実行ファイルを指定すれば問題なくERRORLEVEL取れるから

262
デフォルトの名無しさん[sage]   投稿日:2015/08/11 00:00:00  ID:wwdlJScr.net(2)
存在しない実行ファイルを指定するのが悪い、と言っている訳ではないので誤解なきように
コマンド検索パス上にあると思ったらなかったり、cd変わってて失敗するケースもあるだろうし
テストで意図的にやってるのは理解してますので

263
デフォルトの名無しさん[sage]   投稿日:2015/08/11 04:00:44  ID:oWV7al3f.net
どういう場合に9009じゃなくて!ERRORLEVEL!と表示されるのか説明しないの?
コメント1件

264
デフォルトの名無しさん[sage]   投稿日:2015/08/11 08:08:17  ID:kidrm6pf.net
はい

265
デフォルトの名無しさん[sage]   投稿日:2015/08/11 12:57:41  ID:wwdlJScr.net(2)
>263
結果に違いがあった点については、質問者がデバッグ中に質問内容以外のこともしたのだと予想してる
その点が気になるなら質問者から聞いてほしい

9009 はcmd.exeが返したerrorlevelであって、存在しない実行ファイルからの
errorlevelは返るはずもないから、文字列がそのまま返ってくる
echoコマンドの正しい処理だから別に不思議はないが、なにをやって違いが出たのかは質問者しか知りえない
おそらくはこんな感じで微調整しながらやってて、考えがまとまらないまま質問したと予想する

aaaaaa.exe
echo "エラーレベル" %ERRORLEVEL%

aaaaaa.exe
echo "エラーレベル" !ERRORLEVEL!

まったく同一のコマンドであれば相違点は出ないはずだが、異なるのであれば違うことをやっていたのは自明
カッコの中で処理してるからややこしくなってるのではなく、異なる処理をしたにもかかわらずひとつの質問に丸めてることが原因と予想する
簡単に言うと、環境変数の遅延展開を知る前と知った後とで違いをごっちゃにしているだけ、情報がすべて出てないだけ

266
デフォルトの名無しさん[sage]   投稿日:2015/08/11 23:25:41  ID:84vLNAhy.net
詳しくないけど、返り値で何とかしようとして

p = subprocess.Popen(cmdline, shell=True, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

my $pid = open3 $writer, $reader, 0, "$cmd"

の存在を知ったとき、あの時間はなんだだったのかと愕然とした。

267
デフォルトの名無しさん[]   投稿日:2015/09/06 00:59:23  ID:YCgB583p.net(3)
http://d.hatena.ne.jp/kazuki-kido/20070803/1186159519
ここに記載されてるbatの振り分けキーワードを、
そのフォルダにあるファイルのファイル名末尾4桁(+拡張子)で自動取得し、その名前でフォルダを作成
そこに移動させるにはどうしたら良いでしょう?

xxxx0013.xxx(4桁列までの文字は数十種類、拡張子は数種、ファイル数は数千)
のファイルを4桁文字列前の文字列のフォルダに振り分けたいのです

よろしくお願いします
コメント1件

268
デフォルトの名無しさん[]   投稿日:2015/09/06 01:08:43  ID:YCgB583p.net(3)
訂正です
(4桁数列までの文字は数十種類(文字数様々)、拡張子は数種、ファイル数は数千)

よろしくおねがいします

269
デフォルトの名無しさん[sage]   投稿日:2015/09/06 01:35:39  ID:LDb64vsE.net
エラー出たらここに飛ばすようにしてるんですが
他に何か表示しておくといい情報ってありますか?
できればエラー発生行なんかがあるといいんですが見当たらないようです

:error
echo !!!!!!!!!!!!!!!!!!!!
echo エラー発生。ENTERで終了。
echo バッチファイル:[%~f0]
echo 引数:[%*]
echo ERRRORLEVEL:[%ERRORLEVEL%]
echo !!!!!!!!!!!!!!!!!!!!
pause>NUL
goto :eof
コメント1件

270
デフォルトの名無しさん[sage]   投稿日:2015/09/06 05:37:24  ID:a7Z2ulaD.net
>267
for /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
コメント1件

271
デフォルトの名無しさん[sage]   投稿日:2015/09/06 06:36:51  ID:YCgB583p.net(3)
>270
ありがとうございます!
最初の方の説明を今更間違ってることに気づいたのですが、最後の説明の方で組んでいただいたようで、ちゃんと希望道理の作動をしました
すごく助かりました

ありがとうございました

272
デフォルトの名無しさん[sage]   投稿日:2015/09/06 18:32:12  ID:Ir/JiN9v.net
>269
> できればエラー発生行なんかがあるといいんですが見当たらないようです
エラー検出したところで、実行してるコマンドとか渡した引数の情報を適当な変数に入れて、エラールーチンで表示すれば?
まあ、バッチであまりここら辺に凝るのはおすすめしないけど

273
デフォルトの名無しさん[sage]   投稿日:2015/09/10 00:20:16  ID:0fmkCSIW.net(4)
コマンドプロンプトのコマンドって、穴が酷くね?
コマンド指定でまさかダブルクォートが「一組」しか使えんとは。

for /f %%i in ('"%hoge_exe%" ^| find "piyo"') do echo %%i
これすらパースできないときた。
(%hoge_exe% は半角空白込のフルパスだから「"」を抜けない)

こんなの Linux系なら楽勝なのに…
コメント3件

274
デフォルトの名無しさん[sage]   投稿日:2015/09/10 00:26:56  ID:0fmkCSIW.net(4)
あと、Vista だと xcopy のヘルプで非推奨になってたのが 7 でそれが取れたんだ?
ミラーリング以外なら robocopy じゃなくて xcopy で良いってことか?

意味が分からん。

275
デフォルトの名無しさん[sage]   投稿日:2015/09/10 00:54:28  ID:v5ofxYj/.net
>273
うん
仕様がぼろぼろで旧式の骨董品
でも代わりがないから使うしかない

優秀な人は多いはずだが、みんな陽の当たるソフト担当になり、、

276
デフォルトの名無しさん[sage]   投稿日:2015/09/10 01:16:35  ID:D73GyhwT.net
骨董を使うのが嫌ならWSHやPowerShell使えば良いだろ。
コレはワビサビを愉しみながら使うモノだ。

277
デフォルトの名無しさん[sage]   投稿日:2015/09/10 01:26:44  ID:rVL3fJUt.net(2)
>273
確かに先頭と末尾に"があるとペアと認識するようだな
'call "%hoge_exe%" ^| find "piyo"'
'""%hoge_exe%" ^| find "piyo""'
のように書くと回避できた
コメント1件

278
デフォルトの名無しさん[sage]   投稿日:2015/09/10 03:08:07  ID:SFXMkCA1.net
空白が実行ファイル名に含まれてるんじゃないならバッチ内で一時的にパス追加しちゃうのが楽そう
コメント1件

279
268[sage]   投稿日:2015/09/10 21:38:41  ID:0fmkCSIW.net(4)
>277
ごめん。駄目だった。
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 (

もう訳が分からない…閉じかっこがイカンのだろうか…

>278
pushd . して実行ファイルのとこに cd /d して終わったら popd で回避した…
コメント1件

280
デフォルトの名無しさん[sage]   投稿日:2015/09/10 22:23:16  ID:rVL3fJUt.net(2)
>279
推測のとおり閉じ括弧だね

setとforの間に
set imjpuexc_path=%imjpuexc_path:)=^^)%
を入れるか、または
set imjpuexc_path=C:\Program Files ^^(x86^^)\Common Files\microsoft shared\IME14\IMEJP\imjpuexc.exe
とすれば通るだろうが、カレントパス変更の回避策の方が良いね
コメント1件

281
◆dPizytaM5k [sage]   投稿日:2015/09/10 22:47:59  ID:W0FLNmLq.net
call :run "%CommonProgramFiles(x86)%\microsoft shared\IME14\IMEJP\imjpuexc.exe"
goto :eof
:run
for /f "usebackq delims=" %%i in (`%~fs1 getkanainput ^| find "a"`) do (echo %%i)
exit /b
コメント1件

282
268[sage]   投稿日:2015/09/10 23:32:42  ID:0fmkCSIW.net(4)
>280
ありがとう。
Linux系だと「引用符の中は別世界」という了解があるのだが、バッチはそうではないみたいね…。
find の前のパイプにキャレットが要るのも、「特殊文字は空気が読めない」ってことでFAということか…。
バッチスクリプトにシェル変数の概念が無い、とこないだ知った初心者ですわ。

>281
おお、そんな手があったとは。凄い。
参考にさせていただきます。

283
デフォルトの名無しさん[sage]   投稿日:2015/09/11 02:02:59  ID:8iQOGves.net
バッチの引数を逆から処理する方法みっけ

for %%I IN (%9 %8 %7 %6 %5 %4 %3 %2 %1) do (
)

284
デフォルトの名無しさん[sage]   投稿日:2015/09/12 17:25:17  ID:PURjqYJ9.net(2)
start /wait /b command
start /b /wait command
オプションの順序で挙動が異なるぜみたいなこと外人が言ってますがどっちを使えばいいですか?
/waitが先だと間違いなんですかね?

285
デフォルトの名無しさん[sage]   投稿日:2015/09/12 22:56:10  ID:cTPbZ0nl.net
ソースだせよ
コメント1件

286
デフォルトの名無しさん[sage]   投稿日:2015/09/12 23:33:28  ID:PURjqYJ9.net(2)
>285さん、わかりづらくてすみません
http://ss64.org/viewtopic.php?id=628
http://superuser.com/questions/355341/windows-start-wait-b-not-wor...
http://stackoverflow.com/questions/29925764/start-wait-b-not-exiting-p...
とかを読んで思ったんです
「start /wait /b」で「すべての言語」にしてググると他にも海外フォーラムが引っかかりましたがどれが元ネタかはわかりません
これは「バグ」だとか「順序が違うと機能しない」みたいなことが書いてあるので、実際のところどうなんだろうと思いお尋ねしました。

287
デフォルトの名無しさん[sage]   投稿日:2015/09/19 18:16:48  ID:rJvITlaV.net(2)
すみませんbatファイル実行後に作成されるゴミについて質問させて下さい

D:\デスクトップ\testフォルダ内にあるサブフォルダ全てからbackupフォルダを検索して削除したくて

C:\Users\ore>cd ../../
D:
cd D:\デスクトップ\test
for /R %%d in (backup) do rd /s /q "%%d"

として実行するとtestフォルダ内にcdというゴミファイルが出来てしまいます
ゴミファイルを作成しない様にするにはどうすれば良いでしょうか?
コメント1件

288
デフォルトの名無しさん[sage]   投稿日:2015/09/19 18:52:57  ID:kEgCjcR8.net(2)
pushd D:\デスクトップ\test
for /r %%d in (*desktop*) do rd /s /q "%%d"
if exist cd (del cd&&echo 0||echo 1) else (echo -1)
popd
コメント1件

289
デフォルトの名無しさん[sage]   投稿日:2015/09/19 20:11:26  ID:rJvITlaV.net(2)
>288
ゴミが出なくなりました
ありがとうございます

290
デフォルトの名無しさん[sage]   投稿日:2015/09/19 21:24:39  ID:qCXEI70o.net(2)
わけがわからん
>287でファイルcdが作られるとは思えんのだが?

291
デフォルトの名無しさん[sage]   投稿日:2015/09/19 21:31:23  ID:CQxRgVL+.net
>290
1行目を良く見給へ
コメント1件

292
デフォルトの名無しさん[sage]   投稿日:2015/09/19 21:36:13  ID:qCXEI70o.net(2)
>291
あれそのままbatの中身だったんか?
おれはプロンプト表示かと思ってた
コメント1件

293
デフォルトの名無しさん[sage]   投稿日:2015/09/19 23:26:27  ID:kEgCjcR8.net(2)
>292
ぶっちゃけ作られるのはおかしい。
ただcdが作られるならcdではなくpushdで移動した方が良いし
また質問されるのもスレ汚ししたくないからcd削除で二重に提案した

それと*desktop*は間違えで*backup*が正しいんだけどうまくいってるんだろうか?
コメント1件

294
デフォルトの名無しさん[sage]   投稿日:2015/09/20 00:43:15  ID:OUcPf0J5.net
>273
確かに、よくもまあうまく動かせたもんだ
C:\Users\ore>cd ../../
どこからのコピーかは知らんが、↑をそのままbatに書くような人間がねえ

295
デフォルトの名無しさん[sage]   投稿日:2015/09/20 00:46:26  ID:PEdhYvSo.net
>293
一応それぞれの意味は調べてやったつもりではありましたのでちゃんと変更しました

あの中身は元々Cドライブで実行していたものなのですがちょっと個人理由でDドライブで実行したくなったのです
その際は元が

@echo off
cd C:\Users\ore\Desktop\test
for /R %%d in (backup) do rd /s /q "%%d"

で問題なかったので試行用にエコー消してDドライブに移動するのを追加しただけ、のつもりでした
お蔭さまで無事解決しましたしこれ以上はスレ汚しにもなるかと思われますのでご報告までに
改めてありがとうございました

296
デフォルトの名無しさん[]   投稿日:2015/09/26 20:40:09  ID:sjK3MFI2.net(2)
質問させてください。かなり初心者なので申し訳ないのですが。

バッチファイルから、PDF印刷するツールをつくりましたが、不具合があります。
解決方法を教えて頂けないでしょうか。


現象:
PDFファイルをコマンドラインから印刷する際、印刷中のファイルを非表示とする引数 /h を使用しているにも関わらず、
印刷中のファイルが画面上に数秒表示されてしまう。


発生条件:
ツールと関係なくユーザがAdbobe ReaderからPDFファイルを開き、ウインドウを最大化した上でAdobe Readerを終了。
そののち、ツールを使用してコマンドから印刷すると、引数 /h があるにも関わらず印刷中のファイルが画面上に数秒表示されてしまう。

なお、ウインドウの最大化を解除して上でAdobe Readerを一旦終了させ、そのあとにツールを使って印刷すると印刷対象ファイルは画面上に現れなくなる。
しかし毎回、ツールを使うユーザにこの操作をやってもらうのは負担なので、コマンドの書き方を変えることでバグが出ないようにしたい。


コマンド:

START ACRORD32.EXE /p /h /l %%f

・forを使用した繰り返し構文の中に上記のコマンドを入れており、%%fの変数は事前に変数に格納したファイルパスとファイル名となります
・各引数については、/p は印刷の実行、/h はウインドウの最小化、/lは印刷ダイアログの非表示
コメント1件

297
デフォルトの名無しさん[sage]   投稿日:2015/09/26 22:30:11  ID:HzL2ulcE.net
バッチの不都合じゃなくてソフトウェアの問題だろ
問題が分かってるのにこのスレに書き込むとは
初心者って怖いな
見たくないなら/min使え
コメント2件

298
デフォルトの名無しさん[sage]   投稿日:2015/09/26 23:03:22  ID:vRcULbaf.net
>296
こっちの環境は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"
で殺せるけど
コメント2件

299
デフォルトの名無しさん[]   投稿日:2015/09/26 23:03:27  ID:sjK3MFI2.net(2)
>297
そうですね、バッチというよりはAdobeの問題なのでしょうが、コマンドの書き方で問題を解決したく、質問しました。

/minを試してみます。
どうもありがとうございました。

300
デフォルトの名無しさん[]   投稿日:2015/09/27 00:50:27  ID:fyu1n2iR.net
>298
2回呼び出してやれば最大化が解除できたのですか?
さっそく試してみます。
どうもありがとうございます。

301
デフォルトの名無しさん[]   投稿日:2015/09/27 02:06:33  ID:NGGi3SIL.net
発想を自由にスレッド作成、投稿、ソーシャルブックマークなど
使い方はお好みで。

ニューススレッドを追加! RSS配信の記事を一覧で表示!

http://fluid.twolineprj.com/twoline/entry

ご意見をぜひ投稿してください。

302
デフォルトの名無しさん[]   投稿日:2015/09/27 19:51:17  ID:0MtmseWf.net
>297

/minを試してみたのですが、Adobe Reader に対しては有効になりませんでした。
なおためしに、notepadやexcelに対して/minを使ってみた場合には、普通に最小化して起動してくれました。

なぜAdobeに対してはだめなのでしょうか…



>298
2回呼び出しをやってみたのですが、最大化の解除はできませんでした。
Readerのバージョンが違うからだと思いますが…
コメント2件

303
デフォルトの名無しさん[sage]   投稿日:2015/09/27 20:52:07  ID:cWKfNT9F.net(2)
>302
そのソフトを買ったメーカーにそれぞれ聞け
コメント1件

304
デフォルトの名無しさん[sage]   投稿日:2015/09/27 20:52:50  ID:cWKfNT9F.net(2)
>303
ごめんなさい、そのソフトのメーカーに聞け、の誤りです

305
デフォルトの名無しさん[sage]   投稿日:2015/09/27 23:56:06  ID:S+VayHQk.net
>302
あれダメだった?
初回読み込み時に表示されるの?それとも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のプロセスの方なので
終了しても最大化は解除はされない(この部分は誤解を与えたかもしれない)

306
300[sage]   投稿日:2015/09/28 00:02:40  ID:pVReont5.net(2)
ひとつ言い忘れてた
こっちの検証環境はXPなので32bit環境です

307
デフォルトの名無しさん[]   投稿日:2015/09/28 21:17:36  ID:XtRLoMNV.net
rmdirについて質問があります。
長文失礼いたします

rmdirコマンドで削除したフォルダの成功、失敗の判定として以下の処理を実行しています。

if exist フォルダ名 (
echo 失敗
) else (
echo 成功
)

rmdirコマンド実行時に指定したフォルダを開いていない状態だと問題なく成功とでますが、開いている状態だと指定したフォルダは削除されるのにも関わらず、失敗と出力されます。

上記、判定処理の前にTIMEOUTコマンドで1秒ウェイトを入れると問題なく成功と出力されます。

私の推測では、rmdirコマンドは、開いているフォルダを閉じてから削除コマンドが実行されているための遅延と考えているのですが、この原因についてご存知の方ご教授頂ければ幸いです。

よろしくお願い致します。
コメント2件

308
デフォルトの名無しさん[sage]   投稿日:2015/09/28 21:52:33  ID:pVReont5.net(2)
>307
他がファイル/フォルダをオープンしていると、削除が拒否されずに保留されることがある
これは他プログラムがどのようにオープンしているのかによって違ってくる
FILE_SHARE_DELETE(削除共有)フラグ付きでオープンしているものを削除しようとすると
エラーにはならずに保留される(クローズ後に削除される)
コメント1件

309
デフォルトの名無しさん[sage]   投稿日:2015/09/28 22:33:43  ID:ynPwQZO2.net
>307
つかerrorlevel使えば?
コメント1件

310
デフォルトの名無しさん[]   投稿日:2015/09/28 22:37:43  ID:ywrXX2XI.net(2)
>308

ご回答ありがとうございます。

削除処理の遅延により判定処理に、削除が間に合わず削除失敗と出力されてしまう可能性があるようですね。

この場合、削除処理が終了するまで次の判定処理に進まないような処理が必要になると思うのですが、いい方法などありましたらご教授お願い致します。
コメント1件

311
デフォルトの名無しさん[]   投稿日:2015/09/28 22:42:03  ID:ywrXX2XI.net(2)
>309
ご回答ありがとうございます。

削除コマンドrmdirでは、失敗でもERRORLEVELにエラーは設定されないようなので、削除指定したフォルダの有無で判定をしています。

312
デフォルトの名無しさん[sage]   投稿日:2015/09/29 00:01:30  ID:bgSeuQIx.net(2)
>310-311
なら、逆の発想で dir で行けば?
コメント1件

313
デフォルトの名無しさん[sage]   投稿日:2015/09/29 00:39:57  ID:8SFmbeyJ.net(3)
@rem findの終了コードが0ならエラー
rmdir "フォルダ名" 2>&amp;1|find /V "" &amp;&amp; echo 失敗

「ERRORLEVELを返さないコマンドのエラー判定」あたり参考
コメント1件

314
デフォルトの名無しさん[sage]   投稿日:2015/09/29 00:43:01  ID:8SFmbeyJ.net(3)
文字化けすまそ、半角アンド2つで
find /V "" && echo 失敗

315
デフォルトの名無しさん[sage]   投稿日:2015/09/29 00:49:47  ID:8SFmbeyJ.net(3)
すまそ、ほかにも化けてた
rmdir "フォルダ名" 2>&1|find /V "" && echo 失敗

316
デフォルトの名無しさん[sage]   投稿日:2015/09/29 01:06:12  ID:bgSeuQIx.net(2)
>313-315
いくつか理由はあるが、とてもそれが有用なノウハウだとは思えない。

317
デフォルトの名無しさん[]   投稿日:2015/09/30 21:24:53  ID:lqNGdTXz.net(4)
>312-316
ご助言ありがとうございます。

原因特定できず、とりあえずウェイトを設定して経過観測することにしました。

また続けてご質問があります。
rmdirコマンドで削除するフォルダの中にあるフォルダやファイルが開いているとエラーになりますが、これをエラーとせず削除指定したフォルダを消すためにはどうしたら良いでしょうか?

個人的には、rmdirコマンド実行前に、exploerをtaskkillで終了させ再起動させる処理が案としてありますが、並行して何か処理が走る可能性を考慮してなるべく実行中のタスクを落とさずrmdirコマンドを正常終了させたいです。

よろしくお願いします。
コメント2件

318
デフォルトの名無しさん[sage]   投稿日:2015/09/30 21:32:01  ID:RUmQvCwV.net
>317
裏では何が走ってるのか判らないので諦めたほうがいい
例えば、インデックスサービス、ウィルススキャン、IMEなど
コメント2件

319
デフォルトの名無しさん[sage]   投稿日:2015/09/30 22:01:54  ID:SiaxX88C.net
>317
並行処理には色々あるから、どういうシチュエーションを想定しているかが分からない以上答えようが無い。
一般論としては >318 の言う通り。

320
デフォルトの名無しさん[]   投稿日:2015/09/30 22:19:02  ID:lqNGdTXz.net(4)
>318.314

ご回答ありがとうございます。

裏で走る処理の想定は、完全に把握することはできない状態で、313さんが仰る通りです。

今回は、諦めて削除対象が掴まれていたらエラーにする処理にします。

321
デフォルトの名無しさん[]   投稿日:2015/09/30 22:31:46  ID:lqNGdTXz.net(4)
続けてのご質問失礼します。

Windowsサーバー2008 でバッチファイルを直叩きすると必ず管理者権限で実行されると耳にしたので、調べているものの参考文献が見つかりません。

実際にWindowsサーバー2008の環境でバッチを叩く権限が私にはなく、動作確認ができない状態のためご存知の方いらっしゃいましたら、参考URLやご助言頂ければ幸いです。

よろしくお願い致します。
コメント1件

322
デフォルトの名無しさん[]   投稿日:2015/09/30 22:45:30  ID:lqNGdTXz.net(4)
>321

自己解決できました。

管理者権限は、UAC設定によりバッチ実行時に管理者以外のユーザーが実行した場合は、昇格ダイアログや管理者ユーザーのパスワード入力ダイアログが表示された後に管理者権限で実行されるようです。

323
デフォルトの名無しさん[sage]   投稿日:2015/10/01 15:59:29  ID:feh5z6YX.net
特定ディレクトリ内にあるファイルの中から、
作成日が新しい順で10件だけ表示する、という方法はありますか?

324
デフォルトの名無しさん[sage]   投稿日:2015/10/01 22:27:35  ID:GOCfcoes.net
@echo off
setlocal
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
コメント2件

325
デフォルトの名無しさん[sage]   投稿日:2015/10/01 22:50:13  ID:SNj2dVz3.net
>324
作成日と言ってるから、
dir /a-d /o-d /tc /b
でしょう
あとファイル名に&や^なんかが使われてると・・・

326
320[sage]   投稿日:2015/10/02 00:42:34  ID:CZzG8B2R.net(2)
文句だけじゃなんだからダメ文字を回避する方法

@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とか使うことは可能だがダメ文字が・・・)

327
318[sage]   投稿日:2015/10/02 01:12:11  ID:2daHSNuh.net
>324-326
ありがとうございます。
詳細なソート方法は分かったんですが表示するファイル数を限定出来なかったのでとても助かります。

328
デフォルトの名無しさん[sage]   投稿日:2015/10/02 01:46:43  ID:xI4RFHCV.net
フリーソフトの tail や head を手に入れてもできる

dir /a-d /o-d /b | head -10
dir /ad /od /b |tail -10
など

329
デフォルトの名無しさん[sage]   投稿日:2015/10/02 04:08:29  ID:ywG60DzM.net
@echo off
setlocal
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
コメント2件

330
デフォルトの名無しさん[sage]   投稿日:2015/10/02 13:30:43  ID:Q66dAmly.net
バッチファイル自身が管理者権限で実行されているかどうかを判断するための
ポイントを教えて下さい。

今は次のいい加減なチェック方法しています、set で環境変数に
FPS_BROWSER_APP_PROFILE_STRING   (←Windows10)
FPS_BROWSER_USER_PROFILE_STRING   (←Windows10)
SESSIONNAME
の3つor1つが無いのが管理者権限で実行されているバッチ

これだと、何かのはずみで自前で設定しちゃう(ってる)と明らかにダメな判定基準なので
何かもっと頼れる判断方法を知りたいのです。

Windows10 と Windows7 です。
コメント1件

331
デフォルトの名無しさん[sage]   投稿日:2015/10/02 16:31:13  ID:CZzG8B2R.net(2)
>329
引数で渡さずに環境変数で渡すようにしないと
a^b.txt

332
デフォルトの名無しさん[sage]   投稿日:2015/10/02 17:03:45  ID:2DuVHDsa.net(2)
>330
whoami /GROUPS|find "High" >NUL||(echo バッチファイル自身が管理者権限で実行されていません) && goto RUNAS
とか (アンド記号は半角で)
判定はMandatory Labelから
コメント2件

333
デフォルトの名無しさん[sage]   投稿日:2015/10/02 17:34:44  ID:c57yEoAI.net
>329 行番号で代用すれば、わざわざcallする必要ないと思う

@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
)

334
デフォルトの名無しさん[sage]   投稿日:2015/10/02 17:39:55  ID:0pgpzEB+.net(2)
>332
ありがとうございました、スッキリうまくいきました。
勉強になります。
コメント1件

335
デフォルトの名無しさん[sage]   投稿日:2015/10/02 18:54:09  ID:2DuVHDsa.net(2)
>334
http://scripting.cocolog-nifty.com/blog/2010/01/post-f725.html
この辺を参考にしただけ
管理者権限か否かの判定のみなら>332で用は足りると思うけど、念のため追記
コメント1件

336
デフォルトの名無しさん[sage]   投稿日:2015/10/02 20:04:45  ID:0pgpzEB+.net(2)
>335
重ねてありがとうございます。

その記事の次の
waitfor hoge /t 秒
もポイント高かったです。
timeout 使うとエラーになって用をなさないことが時々あったので
ping を使ってたんですが waitfor という方法があったとは。

『コマンドラインから、UACダイアログを出さずに「管理者として実行」する。』
などでの SchTasks も何かもう目からウロコ。

337
デフォルトの名無しさん[sage]   投稿日:2015/10/05 19:28:34  ID:SpCxBh4Z.net
PUSHD 作業フォルダ
〜いろんな作業〜
POPD

というバッチで、たまにカレントが作業フォルダのまま終了してしまうことがあります。
もちろん、作業自体に強制終了、GOTO :EOF等はしていません。
終了後POPDを手入力しても戻らないのでシェル自身が忘れてしまっているようです

最初に%CD%を保管しておいて、POPD後戻っていなかったら強制的にCDで戻るように
するようにしようかと思っているのですが、
もう少しスマートな方法とかあります?
コメント3件

338
デフォルトの名無しさん[sage]   投稿日:2015/10/05 21:41:49  ID:bTT+ZGiB.net
>337
ホントに?

339
デフォルトの名無しさん[sage]   投稿日:2015/10/06 02:00:18  ID:mXRqVUnf.net
>337
echo on
して本当に popd してるのか確認したのか?

340
デフォルトの名無しさん[sage]   投稿日:2015/10/06 02:23:23  ID:QJFP7AtV.net(2)
>337
なんか変なことしてるところがあると思うよ
それを見つけた方がいいけど
別の環境保存方法ということでは
setlocal〜endlocalで挟む
それが別のbatであるなら、callで呼ばずにstart /b /waitで呼ぶ
とかかな

341
デフォルトの名無しさん[sage]   投稿日:2015/10/06 03:03:04  ID:QJFP7AtV.net(2)
別のbatでもstartを使わずにcallでも大丈夫な方法もあった
call|call hoge.bat

342
デフォルトの名無しさん[sage]   投稿日:2015/10/07 19:03:48  ID:nsjlsK3x.net
イベントでスクリプトを実行するアプリでログオンさせたいんですが、
powershellのスクリプトでログオンて出来ますかね?

ググったのですが参考になる情報を見つけられませんでした。
ヒントを教えて頂けないでしょうか。

343
デフォルトの名無しさん[sage]   投稿日:2015/10/07 19:43:48  ID:RUI9/d0r.net
スレタイ読めカス

344
デフォルトの名無しさん[]   投稿日:2015/10/24 10:57:16  ID:p7rCtkQ8.net(2)
教えてください。
バッチからIME辞書登録を行いたいのですが、方法はありますでしょうか。

フリーソフト等を使わず、windowsの標準機能のみで行う方法がありましたらご教示ください。

345
デフォルトの名無しさん[sage]   投稿日:2015/10/24 11:13:55  ID:fZHdxrwJ.net
テキストファイルから一括等登録はできるけどバッチが絡む余地はなさそう
この操作手順を自動化するにはAutoHotKey的なツールを使うしかない
無理やりやるならVBSでSendなんちゃら使いまくるくらいか

複数の単語を一括で登録するには
https://support.microsoft.com/ja-jp/kb/881925
コメント1件

346
デフォルトの名無しさん[]   投稿日:2015/10/24 22:36:15  ID:p7rCtkQ8.net(2)
>345 回答ありがとうございます。
そのsendなんちゃらってなんでしょうか。
ヒント頂けないでしょうか。
お手数ですいません…
コメント1件

347
デフォルトの名無しさん[sage]   投稿日:2015/10/24 23:39:00  ID:mJxFzgC6.net
>346
SendKeysのことだと思うけど…
たぶんあなたには無理だと思うから、
諦めるか条件を緩める手段をとったほうが良いかと

348
デフォルトの名無しさん[sage]   投稿日:2015/10/25 21:17:07  ID:CKwhkT15.net
imjpuexc?

349
デフォルトの名無しさん[sage]   投稿日:2015/10/26 00:24:08  ID:zhu5kfAS.net
imjpuexcは辞書をファイルを使用するかどうかを登録するだけで単語登録できないような

350
デフォルトの名無しさん[sage]   投稿日:2015/10/26 01:43:05  ID:kwhrPFGj.net
フリーソフト使えば出来るんだし、そもそも何故batじゃなけりゃいけないのか
使用目的を明らかにしてくれれば別の解決方法もアドバイスできるかもしれないのに

351
デフォルトの名無しさん[sage]   投稿日:2015/10/26 10:35:38  ID:g04VwT0z.net
事件の香りがするクンクン

352
デフォルトの名無しさん[sage]   投稿日:2015/10/26 10:44:57  ID:+1zm0ysr.net
別途ソフトを使わずに且つ可能な限り省力化したいという意図と読み取れるが
例えば(会社等で)使用する全ての端末に同じ単語を辞書登録させたいとかそんな感じだろうか
そういったことであれば自分で辞書ファイルを作ってしまえばいいんじゃないかね
その辞書を使用する登録はimjpuexcでできるから、これならバッチファイルも一緒に作って
セットで各端末に配布して実行するだけまで省力化できそうだが

353
デフォルトの名無しさん[sage]   投稿日:2015/11/24 00:49:21  ID:K+m1Fn13.net(2)
質問です
ドラッグアンドドロップしたディレクトリ配下を見ていき
ディレクトリ内がファイルだけの場合はそのディレクトリをその場所に圧縮し、圧縮後に削除
という処理を作りたいのですが

ディレクトリ内がファイルだけか?という判定がうまくいかず
DIRで/a:dとしてもカレントがカウントされてERRORLEVELが常に0になってしまい
助けていただけませんか
コメント4件

354
デフォルトの名無しさん[sage]   投稿日:2015/11/24 01:57:14  ID:E5eNrkbC.net
/a-d

355
デフォルトの名無しさん[sage]   投稿日:2015/11/24 03:42:46  ID:ZLe33KjQ.net
>353
set err=0
for /f %%a in ('dir /ad /b') do set err=1
set err
set err=
コメント1件

356
デフォルトの名無しさん[sage]   投稿日:2015/11/24 04:04:14  ID:DOEe32Zv.net
>353
何がしたいのかいまいちよく分からないんだが、

指定された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

357
デフォルトの名無しさん[sage]   投稿日:2015/11/24 19:52:42  ID:K+m1Fn13.net(2)
>355-356
ありがとうございます。言葉が足らず申し訳ありません

サブDirの下に潜っていき、その潜った先がファイルだけの構成なら
そいつを圧縮するということを行いたいのです

フォルダ構造を保ちながら、ファイルがまとまっているフォルダだけ圧縮していく
ということを実現しようとしています。

358
デフォルトの名無しさん[sage]   投稿日:2015/11/24 23:26:24  ID:uLTusmQs.net
dir +d と dir -d で二回errorlevelを判定したらどうなのだろう

359
デフォルトの名無しさん[sage]   投稿日:2015/11/26 21:08:59  ID:Xx7BS4XN.net(2)
>353
Info-ZIP の zip.exe を使用した例

cd /d

360
デフォルトの名無しさん[sage]   投稿日:2015/11/26 21:11:45  ID:Xx7BS4XN.net(2)
>353
Info-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%"

361
デフォルトの名無しさん[]   投稿日:2015/12/02 18:49:05  ID:uZhzBB52.net(3)
質問です。
virtualbox(PC/ATエミュ)にms-dos6.22(english)をインストールしました。
起動後にECHO %PATH%で環境変数PATHを表示させようとしましたが、
%PATH% とタイプした文字が置換されずに帰ってきてしまいます。

自分で環境変数を設定しても同様です。

---------------------------------
C:\ SET VAL=OK

C:\SET
(中略)
VAL=OK <--セットされている

C:\ECHO %VAL%
%VAL% <--置換されない
---------------------------------

これって仕様でしょうか。環境変数を参照するにはどうしたらいいでしょうか?

362
デフォルトの名無しさん[sage]   投稿日:2015/12/02 20:00:00  ID:G6CksgA0.net
echo "%ABC%"

ダブルクォーテーションで囲めば、どうなる?
コメント1件

363
デフォルトの名無しさん[]   投稿日:2015/12/02 21:32:16  ID:uZhzBB52.net(3)
>362
同じです。

C:\ECHO "%VAL%"
"%VAL%"

364
356[]   投稿日:2015/12/02 23:38:35  ID:uZhzBB52.net(3)
理由わかりました。
COMMAND.COMの仕様です。
バッチファイルに記述して実行すると置換されます。
WIN9xあたりまではそういう仕様かもしれません。

365
デフォルトの名無しさん[sage]   投稿日:2015/12/02 23:45:06  ID:l4g7T0Fa.net
command.com懐かしいな
cmd.exeになってからコマンドライン直書きでも展開されるようになったような
コメント2件

366
デフォルトの名無しさん[sage]   投稿日:2015/12/03 06:14:24  ID:rFz6rQx1.net
ダッセーPROMPTw

367
デフォルトの名無しさん[sage]   投稿日:2015/12/03 23:14:20  ID:351ZeN4c.net
>365
記憶がごっちゃになってもうどっちがどっちだったかわからん

368
デフォルトの名無しさん[sage]   投稿日:2015/12/04 02:45:09  ID:K5fLtIai.net
>365
そうだったっけ?
全然そんな記憶無いんで、普通に直打ちで変数展開されてたと思う

369
デフォルトの名無しさん[sage]   投稿日:2015/12/04 04:22:29  ID:p/GS1A93.net
win95のcommand.comで直接echo %PATH% してみたけどちゃんと展開された

370
デフォルトの名無しさん[sage]   投稿日:2015/12/07 06:23:17  ID:DQwTbvQ5.net
質問です。終了判定の順番についてなのですが
プログラミング的というかバッチ的なセオリーというのがもしあれば教えて下さい
失敗した場合
 ・ループ goto :LOOP
 ・リトライ上限回数による終了 exit /b 1
成功した場合
 ・途中終了によりリスタート exit /b 2
 ・正常終了 exit /b 0
とあってそれぞれどのような順でも出来ます
頻度の高い順や短い処理の順にした方が余計な判定をしなくて済みますが
大差ない場合等はその順序に何かセオリーがあったりしますか?

371
デフォルトの名無しさん[sage]   投稿日:2015/12/09 01:33:29  ID:DMnL3no7.net
フォルダを指定するとそれ以下の階層の指定したファイルを他のソフトに橋渡ししたいのですがどのように学べば作れますかね?

372
デフォルトの名無しさん[sage]   投稿日:2015/12/09 03:34:34  ID:xJXhqdvp.net
> それ以下の階層の指定したファイル
どういう指定?拡張子?for /r で出来ると思う

373
デフォルトの名無しさん[sage]   投稿日:2015/12/10 03:14:00  ID:VBAMhbiJ.net
2つの日付(年月日時分秒)を引数としてその差を秒で返すバッチをお願いします
"20000101000000" "20040404_044444"とか"2000/01/01_00:00.00"とか引数の形式はお任せ
引数のエラーチェックは無しでOK。閏日は必要。閏秒は無視
コメント1件

374
デフォルトの名無しさん[sage]   投稿日:2015/12/14 22:34:22  ID:A58wbYtQ.net
@echo off
rem 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
コメント4件

375
デフォルトの名無しさん[sage]   投稿日:2015/12/15 00:46:59  ID:o42ChFzI.net
ついでに秒差から年月日時分秒を逆算するバッチ
@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 ここに >374 の :a2 と :a3 をコピペ
コメント3件

376
デフォルトの名無しさん[sage]   投稿日:2015/12/15 04:37:32  ID:DyLWSAr/.net(2)
>374-375
こんなに短く書けるものなのですね
ifやらforやら使って閏日判定して足したり最初から全部秒に直して計算してたりとアホな事してました
とても参考になりました。ありがとうございました
:a3 2行目 a=m+9 が良く分かりません。その後は閏日を追加する計算で3行目が月31日計算の補正だと思うのですが
暇があって気が向いた時で良いですので :a3,2行目と3行目の解説をお願いしたいです

377
デフォルトの名無しさん[sage]   投稿日:2015/12/15 05:13:05  ID:DyLWSAr/.net(2)
a=m+9 は3月起点にする為ですよね
48ヶ月(4年)毎に+1日,1200ヶ月(100年)毎に-1日(4年毎の打ち消し),4800ヶ月(400年)毎に+1日
なるほどです
コメント1件

378
デフォルトの名無しさん[sage]   投稿日:2015/12/16 20:07:03  ID:fy5f41q6.net
@echo off
rem 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みたいにスマートに書ける頭良い奴羨まし

>377
>a=m+9 は3月起点にする為
それが分かるなら分かりそうなものだが3行目もそれと同じ
3月なら-3日、15ヶ月なら-6、同じように5月、7、10、12と西向く侍越えてたら日を引いてる

379
デフォルトの名無しさん[sage]   投稿日:2015/12/17 09:52:29  ID:pa9hyiSF.net
>374
フェアフィールドの公式でもっと簡略化できる

: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

逆算では>375の:a5の代替となる公式は知らないなあ
コメント2件

380
デフォルトの名無しさん[sage]   投稿日:2015/12/17 14:48:37  ID:ZSvcUJP0.net
せっかくなんで、誰でも思いつく変換テーブルを使った奴も

: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
コメント1件

381
デフォルトの名無しさん[sage]   投稿日:2015/12/17 22:03:19  ID:6xd5GL4Z.net
>379
>380
名人芸みたい
set /a で , を使えるのは知らなかった

382
デフォルトの名無しさん[sage]   投稿日:2015/12/18 20:41:02  ID:5v+P6SwD.net
>フェアフィールドの公式
理解するのに少し時間がかかったけどひとつ賢くなりました。ありがとう

383
デフォルトの名無しさん[sage]   投稿日:2015/12/19 23:36:20  ID:hIm+VLiM.net
>379
>374は差分を取ってるだけだから定数部分は要らない
簡略化したいなら(y-1)はyでいいし、-63も不要だな
でもそうすると>375で使えなくなるけど

384
デフォルトの名無しさん[sage]   投稿日:2015/12/20 01:39:29  ID:ZqBWpEZf.net
@echo off & setlocal
call :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

385
デフォルトの名無しさん[sage]   投稿日:2015/12/21 08:37:29  ID:h62kjpL5.net
370の:a5が全く分からん。eは0年3月から400年周期が何回あるか?で合ってる?
通日から年月日求める式の解説してるサイトとかあったら教えて欲しい
コメント1件

386
デフォルトの名無しさん[sage]   投稿日:2015/12/21 09:39:16  ID:M1iYKpBu.net(4)
@echo off & setlocal enabledelayedexpansion
call :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

387
デフォルトの名無しさん[sage]   投稿日:2015/12/21 10:07:38  ID:M1iYKpBu.net(4)
>385
> 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年周期での値

> 通日から年月日求める式の解説してるサイトとかあったら教えて欲しい

私も知りたい
コメント1件

388
デフォルトの名無しさん[sage]   投稿日:2015/12/21 10:32:14  ID:M1iYKpBu.net(4)
>387>375の:a5の事です
2chは2種類あるんで、>>を付けないと番号が変わることがある
コメント1件

389
デフォルトの名無しさん[sage]   投稿日:2015/12/21 16:40:51  ID:xEP90Lc1.net(3)
俺が判った範囲での数値

d=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>)
コメント1件

390
デフォルトの名無しさん[sage]   投稿日:2015/12/21 16:48:15  ID:xEP90Lc1.net(3)
d+305=0年3月1日からの日数
 ↓
d+1+305=0年3月1日からの日数
に訂正

391
デフォルトの名無しさん[sage]   投稿日:2015/12/21 16:55:52  ID:xEP90Lc1.net(3)
d+1=1年1月1日を基点とした日数
これは明らかに間違ってるんで削除

392
デフォルトの名無しさん[sage]   投稿日:2015/12/21 17:00:54  ID:M1iYKpBu.net(4)
>388
よく考えるとシフト演算式の>>の右側の数値が勝手に変わったりするんだな
やだなあ

393
デフォルトの名無しさん[sage]   投稿日:2015/12/22 23:27:20  ID:GbSBVwIU.net
> 通日から年月日求める式の解説してるサイトとかあったら教えて欲しい
俺も
誰か概要でも良いので解説お願いします
コメント1件

394
デフォルトの名無しさん[sage]   投稿日:2015/12/23 11:08:49  ID:aiQM95lL.net
echo aaa >> C:\test.log

rem input.txtには3行書かれている
FOR /F

395
デフォルトの名無しさん[sage]   投稿日:2015/12/23 12:48:25  ID:dDv8KSpn.net(3)
>393
躓いてるのは、
30,91,183,244,305,372の数値の意味だろ?
>389で解説されてるじゃん

396
デフォルトの名無しさん[sage]   投稿日:2015/12/23 15:53:35  ID:dDv8KSpn.net(3)
簡単に要点のみ解説すると、
全部の月を31に補正して計算するってこと 1年は31*12=372日になる

3月以降の場合、+3日
11月以降の場合、+1日
9月以降の場合、+1日
6月以降の場合、+1日
4月以降の場合、+1日

例えば、7月3日だったとしよう
すると、+3+1+1=+5日が加算され、31*7 あまり 3日という風に算出する

397
デフォルトの名無しさん[sage]   投稿日:2015/12/23 16:15:56  ID:dDv8KSpn.net(3)
月の説明がズレたけどわかるよね?
(d+244)/12 が5月以降
(d+183)/12 が7月以降

ってことね

398
デフォルトの名無しさん[sage]   投稿日:2015/12/23 18:34:12  ID:2AzhQbBP.net
もはやバッチスレじゃなくなってる

399
デフォルトの名無しさん[sage]   投稿日:2015/12/24 10:50:25  ID:Hd7uli2y.net
複数のアプリケーションをバッチで順番に起動してインストールしています。
しかし起動してきたsetup.exeなどの「同意する」「次へ」などは手動でやっています。
この alt+n や Enter などのキー入力はバッチファイルからできないものでしょうか。
コメント1件

400
デフォルトの名無しさん[sage]   投稿日:2015/12/24 19:51:50  ID:k0eMsSdC.net

401
デフォルトの名無しさん[sage]   投稿日:2015/12/25 01:37:29  ID:xjel9170.net
>399
これを使えば、キー入力が出来ます。

キーボード・マウス シミュレーター
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

402
デフォルトの名無しさん[sage]   投稿日:2015/12/25 05:48:22  ID:pIvyUHeA.net
インストーラーのsetup.exeにQuietInstallのオプションが無いか確認して、無いならAutoHotkey使うとか

403
デフォルトの名無しさん[sage]   投稿日:2015/12/25 14:17:34  ID:O30Ofv/O.net
バッチよりWSHでSendKeysじゃないかな

404
デフォルトの名無しさん[sage]   投稿日:2015/12/25 23:52:12  ID:Q7FXbHS7.net
今日の大失敗(初歩のバッチ)

cd xxx\yyy\zzz
del /P *.*
と書くのは止めましょう
xxx\yyy\zzz フォルダが無かった場合、現フォルダのファイルが全滅

幸い重要ファイルはなくて助かった、もし del /S /P *.* だったら大ダメージ
コメント2件

405
デフォルトの名無しさん[sage]   投稿日:2015/12/26 00:46:33  ID:X4YvfGHD.net
俺も先日vvvに3万個くらいやられたけど、大部分がテンポラリファイルだったから助かったよ

406
デフォルトの名無しさん[sage]   投稿日:2015/12/26 01:15:18  ID:DVIYmgTf.net
>404
間違って大量削除したときのために復元ソフトはいつでも動かせるようにしとけ

407
デフォルトの名無しさん[sage]   投稿日:2015/12/26 02:02:37  ID:ORfhhjc6.net
>404
cd 〜 && call 削除のための処理
とかすればいいんじゃね
コメント1件

408
デフォルトの名無しさん[sage]   投稿日:2015/12/26 20:19:18  ID:GqwbH3xG.net
xxx\yyy\zzz フォルダがあっても駄目だろ
せめて cd /d にしろよ

409
デフォルトの名無しさん[sage]   投稿日:2015/12/27 00:32:23  ID:WRaoLAxw.net
>407
cd 〜 && call だと cd がエラーでcallは実行されないのに
cd 〜 && echo abc だとcd がエラーでもecho実行、なぜ?

if exist でチェックしようとしてもファイルかフォルダか区別できないような気がする
コメント2件

410
デフォルトの名無しさん[]   投稿日:2015/12/27 09:53:50  ID:g59Yk3Y1.net
SSD化の時のコマンドで、ジャンクションを貼るよりリンボリックリンクの方がいいのでしょうか
変数など訂正すべきところなどご教授ください

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

411
デフォルトの名無しさん[sage]   投稿日:2015/12/28 13:00:25  ID:dgI6+oKo.net
>409
> ファイルかフォルダか区別できないような気がする

dir /ad とか attrib で属性見るとか
そこまでやるなら wsh とかに行った方がいいように思うけど
コメント1件

412
デフォルトの名無しさん[sage]   投稿日:2015/12/28 13:47:32  ID:c+74yIFV.net
>409
if existによるディレクトリの確認はこの辺参照
http://d.hatena.ne.jp/otn/20050209/p1

413
デフォルトの名無しさん[sage]   投稿日:2015/12/28 19:52:52  ID:VIpgPLje.net
for %%i in (folder) do set a=%%~ai
とか
call :AA folder
:AA
set a=%~a1
set a=%a:~0,1%
とかで1文字目取り出して if "%a%"=="d" じゃないっけ?うろ覚え

414
デフォルトの名無しさん[]   投稿日:2016/01/02 22:28:34  ID:R0FqLiWH.net
スルーされとる

415
デフォルトの名無しさん[sage]   投稿日:2016/01/04 23:45:48  ID:uSRue82f.net
>411-413
ありがとうございます、いろいろな方法がありますね、試してみます。
遅くなってごめんなさい

416
デフォルトの名無しさん[sage]   投稿日:2016/01/19 21:34:08  ID:ibh0JYmW.net(2)
ソフ板に質問スレが無かったので、こちらで教えて欲しいのですが・・・
2つのフォルダを比較して、フォルダ1と同じ名前のファイルだけ抽出して別フォルダに保存出来るアプリありますでしょうか?

例えば
(フォルダ1)
ファイルa
ファイルf
ファイルg
ファイルp
ファイルx

(フォルダ2)
ファイルa
ファイルb
ファイルc
ファイルf
ファイルg
ファイルv
ファイルw
ファイルx

の場合フォルダ2の
ファイルa
ファイルf
ファイルg
ファイルx
だけ、フォルダ3にコピーしたいのですが・・・

バッチファイルで出来るなら、それでもいいのですが、よろしくお願いします。
コメント1件

417
デフォルトの名無しさん[sage]   投稿日:2016/01/19 21:36:04  ID:ibh0JYmW.net(2)
あるいは、フォルダ1にあってフォルダ2に無いファイルをフォルダ2から消しても構いません。
最終的にフォルダ1にある名前のファイルだけ残ればいいです。

因みにですが、フォルダ1とフォルダ2のファイルは名前が同じでも中身が違いますので、残すのはあくまでもフォルダ2のファイルだけです。
コメント1件

418
デフォルトの名無しさん[sage]   投稿日:2016/01/19 22:03:45  ID:IRnEE3xb.net
気軽に「こんなソフトありませんか?」Part.172 /ソフトウェア板
◆こんなソフトウェアつくってください〜Part18〜◆ /ソフトウェア板

バッチでも出来るけど
フォルダ1と2にはフォルダが無い事前提?
フォルダ1か2、或いは両方にファルダがある場合どうするの?

419
デフォルトの名無しさん[sage]   投稿日:2016/01/20 00:58:45  ID:QphOxfb9.net
>416
set "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

420
デフォルトの名無しさん[sage]   投稿日:2016/01/20 03:16:35  ID:CGJNTMJr.net
>417
@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フォルダに移動させる仕様の方が処理が早い

421
デフォルトの名無しさん[sage]   投稿日:2016/01/20 05:25:10  ID:2Q8BlnOV.net
@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%
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

422
デフォルトの名無しさん[sage]   投稿日:2016/01/20 07:14:28  ID:Mi5py/5P.net
for %%i in ("フォルダ1\*") do move "フォルダ2\%%~nxi" "フォルダ3\"

423
デフォルトの名無しさん[]   投稿日:2016/01/24 00:40:39  ID:krEiQR2u.net(2)
ファイルのリネームをしたいです
具体的な処理は 複数のファイルを
20160116
2016年01月16日
を160116の6ケタ数字に変更してファイル名の最後に持っていくという処理をしたいです
写真20160116.jpg
20160116家.jpg
2016年01月16日花.jpg
犬2016年01月16日.jpg

をすべて→写真 160116.jpg
みたいに文字列+日付6ケタに統一したいのです
コメント2件

424
デフォルトの名無しさん[]   投稿日:2016/01/24 00:41:52  ID:krEiQR2u.net(2)
訂正

ファイルのリネームをしたいです
具体的な処理は 複数のファイルを
20160116
2016年01月16日
の日付が含まれたファイル名を
160116の6ケタ数字に変更してファイル名の最後に持っていくという処理をしたいです

具体的には
写真20160116.jpg
20160116家.jpg
2016年01月16日花.jpg
犬2016年01月16日.jpg

をすべて→写真 160116.jpg
みたいに文字列+日付6ケタに統一したいのです

よろしくお願いします
コメント2件

425
デフォルトの名無しさん[sage]   投稿日:2016/01/24 01:27:04  ID:5+KozvoU.net
>424
>423
difして差分取れ

426
デフォルトの名無しさん[sage]   投稿日:2016/01/24 05:34:39  ID:fqtpw7CO.net
なぜバッチでするの?

PowerShell じゃダメなのか?
コメント1件

427
デフォルトの名無しさん[sage]   投稿日:2016/01/24 08:03:06  ID:bklX6SGr.net
>426
それができるならやってる

428
デフォルトの名無しさん[sage]   投稿日:2016/01/24 15:29:33  ID:LnmKPUOX.net
出来なくはないけど、文字列+日付6ケタ の文字列部分に"年""月""日""%""&"が使われていない事とかの制約付くのと手間とか諸々考えたらリネーム系のソフト探すかPSやperlとかの正規表現使えるスクリプト言語の方が良い
リネーム系ソフトが一発で文字列+日付6ケタに出来ないなら一旦、日付8ケタ_文字列.jpg とかに変換してそこからバッチで、文字列+日付6ケタに再変換するとかは?

429
デフォルトの名無しさん[sage]   投稿日:2016/01/25 03:33:01  ID:FJlvjxIx.net(2)
>423
>424
ファイル名が例題通りなら
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等を仕入れて専用スレでお願いします。

430
デフォルトの名無しさん[sage]   投稿日:2016/01/25 03:54:11  ID:FJlvjxIx.net(2)
実行結果は

写真160116.jpg
160116家.jpg
160116花.jpg
犬160116.jpg

ですが、if文をやめてechoを最初の行だけにすれば

写真160116.jpg
家160116.jpg
花160116.jpg
犬160116.jpg

になります。

431
デフォルトの名無しさん[sage]   投稿日:2016/01/27 05:07:29  ID:fJiggefa.net(2)
〇仮斑罎NTPサーバーを調べる NTPサーバーとの時刻のズレを表示する バッチなんですが
ズレを表示するコマンドは下記のように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

432
デフォルトの名無しさん[sage]   投稿日:2016/01/27 06:18:16  ID:3u678Fz6.net(3)
for /f "delims=," %%A in ('w32tm /query /source') do ( echo サーバー: %%A
w32tm /monitor /computers:%%A
)
pause
コメント1件

433
デフォルトの名無しさん[sage]   投稿日:2016/01/27 06:39:40  ID:3u678Fz6.net(3)
for /f "delims=," %%A in ('w32tm /query /source') do ( echo サーバー: %%A
w32tm /monitor /computers:%%A | findstr "NTP:"
)
pause

434
デフォルトの名無しさん[sage]   投稿日:2016/01/27 06:50:27  ID:3u678Fz6.net(3)
for /f "delims=," %%A in ('w32tm /query /source') do ( echo サーバー: %%A
for /f "tokens=2" %%B in ('w32tm /monitor /computers:%%A ^| findstr "NTP:"') do echo %%B
)
pause

435
デフォルトの名無しさん[sage]   投稿日:2016/01/27 07:38:45  ID:fJiggefa.net(2)
>432,428
ありがとうございます
表示もスッキリして頂いてとても勉強になります

436
デフォルトの名無しさん[sage]   投稿日:2016/01/27 23:21:20  ID:bcAMZw4L.net
for /f "delims=," %%A in ('w32tm /query /source') do for /f "tokens=2 delims=+s " %%B in ('w32tm /monitor /computers:%%A ^| findstr "NTP:"') do echo %%A: %%B
コメント1件

437
デフォルトの名無しさん[sage]   投稿日:2016/01/28 13:48:27  ID:EDEAMnLy.net
「資料%28過去%29」みたいにファイル名にutf-8?が含まれるものを指定してるのですが
batを実行するとデコードされて「資料(過去)」と認識されてます。
「資料%28過去%29」を文字列として認識させるにはどうしたら良いでしょうか。
コメント1件

438
デフォルトの名無しさん[sage]   投稿日:2016/01/28 15:22:02  ID:hExe5FIX.net
>437
パーセントエンコードはURIに使うものでbatでデコードはされないと思うな
それとは別に
batで%は特別な意味を持っていて、普通は引数や環境変数の中身を見るときに使う
echo %1 %hoge%
とか
よって、%2が第2引数を参照してるととられ、引数指定してなかったら無いので
資料8過去9
とならないとおかしいと思うけど?
本当に「資料(過去)」となるのなら俺にはその原因は分からない

で、「資料8過去9」となると仮定して%%と重ねて記述すると%になるので
資料%%28過去%%29
でどうかな?
batの何処にどういう風に使ってるのかわからないので場合によっては
%%%%と各必要があるかも知れない

439
デフォルトの名無しさん[sage]   投稿日:2016/01/29 21:46:01  ID:j1UQgjYg.net
>436
ありがとうございます
必要な情報だけ一行に集約されてとても見やすいです
こういうふうに書けるよう理解を深めたいです

440
デフォルトの名無しさん[sage]   投稿日:2016/01/30 03:15:06  ID:hg3OxSOg.net
cmd.exe /k @for /f "delims=," %A in ('w32tm /query /source') do @for /f %B in ('2^>null nslookup %A ^| findstr /v :') do ^
@for /f "tokens=2 delims=+s" %C in ('w32tm /monitor /computers:%A ^| findstr "NTP:"') do @echo %A [%B]: %C

こういうのを"ファイル名を指定して実行"からだと「アクセスが拒否されました」となるのですが
コマンドプロンプトを管理者として実行の時と同様の結果にする書き方とか方法があれば教えて下さい

441
デフォルトの名無しさん[sage]   投稿日:2016/01/30 10:20:23  ID:zXGU0vQS.net
すみません。
ディレクトリの中を見ていき、2GB以下なら圧縮ということをしたく

対象Dir
├フォルダ
│ ├フォルダ(2GB 以下) ← これを圧縮
│ │ └ファイル
│ ├フォルダ(2GB以上)
     ├フォルダ(2GB以下) ← これを圧縮
     ├フォルダ(2GB以上)

再帰的に見ていった時に、圧縮していくと最終的に一番上が2GB以下になり
全部圧縮されてしまい。どなたかお助けください

442
デフォルトの名無しさん[sage]   投稿日:2016/01/30 23:03:45  ID:ffKBMc7H.net
再帰で圧縮せずに2GB未満フォルダのリストを作り再帰終了後にリストを元に圧縮
どうでも良いけど、超&以下、以上&未満な

443
デフォルトの名無しさん[sage]   投稿日:2016/01/31 11:30:04  ID:+ngYeOTE.net
なるほど、そういうことですか
リストを出力して、最後にそれをパス指定で圧縮と
無駄に再帰でやろうとしすぎていました。ありがとうございます

444
デフォルトの名無しさん[]   投稿日:2016/02/06 10:40:05  ID:hbtVaDtk.net(2)
あるURL http://AAAAAA/BBBBB/CCC… を引数%1として、
http://AAAAAA/だけを取り出す方法が知りたいです
(3つ目の/までの文字列を取り出したい)

よろしくお願いします
コメント1件

445
デフォルトの名無しさん[sage]   投稿日:2016/02/06 11:56:20  ID:ilYyGYOR.net
>444
@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%/
コメント1件

446
デフォルトの名無しさん[]   投稿日:2016/02/06 12:13:31  ID:hbtVaDtk.net(2)
>445
作りたかったものが作れました
ありがとうございます

447
デフォルトの名無しさん[sage]   投稿日:2016/02/07 03:34:31  ID:xzt+ySx/.net
0001〜9999までをカウントするのってどうやればいいですか
常に4桁の文字列が得られるようにしたいです
コメント2件

448
デフォルトの名無しさん[sage]   投稿日:2016/02/07 03:59:09  ID:S13nymNF.net
>447
echo %random% を使う
0、10000以上であればやり直す

449
デフォルトの名無しさん[sage]   投稿日:2016/02/07 04:06:32  ID:oI7YLQ9S.net(3)
>447
質問の意味がいまいち不明だがこういうことか?
@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

450
デフォルトの名無しさん[sage]   投稿日:2016/02/07 15:37:11  ID:YEUGR+cI.net
for /L %%i in (10001,1,19999) do (set ct=%%i
call echo %%ct:~-4%%)


set a=10001
:LOOP
echo %a:~-4%
set /a a+=1
if %a% LEQ 19999 (goto :LOOP) else exit /b

451
デフォルトの名無しさん[sage]   投稿日:2016/02/07 16:38:16  ID:7II1MwkR.net
コマンドの実行結果を環境変数(value)に格納すべく、
for /f %%i in ('コマンド') do set value=%%i としたとき、
コマンドの処理時間が長いと完全に沈黙しちゃうので何とかしたいのだけど、
コマンドを単独で実行した時にコンソール上に表示される実行中の情報
(進行状況とか)を表示する方法ってないかな?
コメント1件

452
デフォルトの名無しさん[sage]   投稿日:2016/02/07 17:41:06  ID:oI7YLQ9S.net(3)
>451
どうしてもって言うのなら、ファイルをフラグに使うとなんとかなるかな
@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
コメント3件

453
デフォルトの名無しさん[sage]   投稿日:2016/02/07 17:51:21  ID:oI7YLQ9S.net(3)
別の方法として
tasklistからコマンドが消えるのを監視するのがいいかも

さらには、別batでコマンドを起動し、終了時にタスクなり他ソフトなりを起動して
何らかのアクションを起こし、それを監視するとか

454
デフォルトの名無しさん[sage]   投稿日:2016/02/07 20:46:37  ID:csmRYXFo.net
https://www.google.co.jp/#q=tee+%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89+windows
コメント1件

455
446[sage]   投稿日:2016/02/08 00:34:24  ID:tvZTUQzk.net
>452-453
やはりちょっと別の工夫が必要なんだねぇ。

一応、当該コマンドの処理
(通常のファイル操作に加えて、標準エラー出力からの文字列を整形したものを環境変数に格納)
が終わったら格納した環境変数を使ってまた別のコマンドを実行していて、
その時にエラーレベル判定は行われるので、
すんなり行けば、次のコマンド(ここで"echo 中間処理終了")で、その程度での経過は分かるから、
申し訳ないけど、そのままで妥協しておこうかな。

>454
同時でなくていい場合なら、標準エラー出力のほうを一度ファイルにして、
改めてtypeで読み込んで整形して環境変数に格納というのでも出来そう。

teeをLinux(Cygwinでも)で使ったことはあって、Cygwinのbashスクリプトでやっちゃおうか、とも思ったんだけど、
とりあえずどのWindows環境でも使えるということで、ハマってしまいました。
ただ、findstrが文字数オーバーでエラーが出るサンプルがあって、
結局grep使っちゃったから、あまり意味が無いかもw


御二方、どうもありがとう。
コメント1件

456
デフォルトの名無しさん[sage]   投稿日:2016/02/08 01:25:16  ID:DULBP8IA.net
>455
tasklistの結果からそのコマンドのイメージ名が消えるまで適当に表示させながら
ループさせるんじゃいけないの?

また、>452のエラーレベルって蛇足的な処理じゃん
無くても問題ない
該当コマンドってのが自分でカスタマイズできるんならリダイレクトも不要
そのコマンドの終了時点でフラグ的なファイルに書き込めばいい
コメント2件

457
デフォルトの名無しさん[sage]   投稿日:2016/02/08 01:29:33  ID:T6p//Vzm.net(2)
>452 さんが書いているように、ファイルを使うのが簡単かな
コマンドの最後でファイルを作り、
batでは if exist でそのコマンドができるのを待つ、なかったら timeoutで待つループ

458
デフォルトの名無しさん[sage]   投稿日:2016/02/08 01:30:33  ID:T6p//Vzm.net(2)
>456
あ、ダブった

459
デフォルトの名無しさん[sage]   投稿日:2016/02/08 01:36:07  ID:IaYL4Dgo.net(2)
>findstrが文字数オーバーでエラーが出るサンプルがあって
もうバッチの範疇外じゃないのかな?どのWinでもって事ならWSHかPowerShellを勧めるよ

460
デフォルトの名無しさん[sage]   投稿日:2016/02/08 01:43:25  ID:IaYL4Dgo.net(2)
あと通常のファイル操作って言ってもそんな事になるくらいのかなりの量を処理しているならロジック自体を見直した方が良い気がする

461
デフォルトの名無しさん[sage]   投稿日:2016/02/08 01:46:27  ID:U7IijhSa.net
title 処理中です。ウィンドウは絶対に閉じないでください。
echo 処理中です。ウィンドウは絶対に閉じないでください。

でいいじゃん
ちょっと応答不能になっただけで速攻ウィンドウ閉じる奴って
結構多いけど理解に苦しむ
コメント1件

462
446[sage]   投稿日:2016/02/08 21:23:57  ID:4qV7ShMX.net
>456-461
問題のコマンドについて、今まで標準エラー出力から文字列を抽出していたけど、
環境変数でファイルパスを別途加える事でログをファイルに出力できることがわかったので、
コマンドの処理は通常通りおこなって(コンソールに経過他の情報が表示される)、
その終了後、改めてログファイルから文字列を読み込んで環境変数代入を処理することで、
経過情報を表示しながら for /F や tee と同じ目的を数行で達することが出来たよ。

コマンド実行と環境変数代入を同時に処理するということにこだわりすぎたかな。

みなさん、お付き合いいただき、どうもありがとう。

463
デフォルトの名無しさん[sage]   投稿日:2016/02/08 21:58:26  ID:aeLE2jq+.net
>461
高度なプログラムが動き出しちゃうときあるから

464
デフォルトの名無しさん[sage]   投稿日:2016/02/10 23:06:13  ID:rMhx/tnP.net
コピーする時 if exist であったら適当に名前変えてコピーしてたんだけど
そもそも、重複時自動的にリネームしつつコピーしてくれるちょっと便利コマンドって
どこかにありそうな気がしたので、そんなコマンド(プログラム)教えてください
コメント1件

465
デフォルトの名無しさん[sage]   投稿日:2016/02/11 01:24:38  ID:xppsr9es.net
重複時、上書き?リネーム?
リネームするならコピー元?コピー先?
リネームの形式は連番?日時?
これらをコマンドラインオプションで設定出来る非対話形式なcuiコピーツールがあっても良いなって思うけど
バッチ側の少しの手間で実現出来るからわざわざ外部ツール導入するのは躊躇われるな
firefilecopyにそれっぽい設定があった気がするけど使ってたの何年も前なので覚えてないわ
コメント1件

466
デフォルトの名無しさん[sage]   投稿日:2016/02/11 10:17:29  ID:E36uRHTx.net
>465
> これらをコマンドラインオプションで設定出来る非対話形式なcuiコピーツール
まさしくそういうツールが欲しいなと思った訳でして、firefilecopy 試してみたところ
連番などの指定ができない、既にリネーム済みのものがあった時に自動的に
処理できない模様で目的に合致せず、無念

linux 系のツールならと思ってググッてみても、cp だと拡張子が維持できない suffix の
付け方になってしまうなど、調度良いのが今のところ発見できず……

467
デフォルトの名無しさん[sage]   投稿日:2016/02/15 13:55:49  ID:wQ6idclh.net
”コマンドラインでファイルやフォルダを名前に「コピー (n) 〜 」を付けて複製する。”
でぐぐって見つかるバッチを条件が合致した際にcallするとか
スクリプトだからリネーム条件なんかはカスタマイズも可能かと

468
デフォルトの名無しさん[sage]   投稿日:2016/02/15 14:13:15  ID:NpLlCTmp.net
ffcかなんかは結構細かいコマンドラインオプションを受け付けてたから
それでコピーしつつログ解析して必要ならナンバーか日付つけてのリネームコピーするとかやればいいんじゃないの

469
459[sage]   投稿日:2016/02/15 21:36:25  ID:CcVUGHWP.net
気を使わせて申し訳ありません
現状として、コピーする時に同名ファイルがある時には名前を変えてコピーするのは
既にバッチファイルで実現していて、同じことを手軽に便利に出来る単独の CUI な
ツール、プログラムがあれば、というよりあるに違いない、と思ったのが >464
質問だったわけです

470
デフォルトの名無しさん[]   投稿日:2016/02/21 22:42:20  ID:LXngu2PVR
共用パソコンのユーザごとのデスクトップとマイドキュメントにある
30日前更新のファイル(docx,xlsx)の一覧をバッチで取得する方法を
ご教示ください。環境はWindows7です。

471
デフォルトの名無しさん[sage]   投稿日:2016/03/11 22:12:34  ID:g0a/JI38.net
バッチ中のcopy file1 file2 は copy "file1" "file2" と書くべき
file1 file2が+で始まる場合 ""で囲んでいないとcopyされない

472
デフォルトの名無しさん[sage]   投稿日:2016/03/15 00:41:28  ID:8utBFAR1.net
バグ技、面白ネタなどあれば投下お願いします
コメント1件

473
騙し髪[sage]   投稿日:2016/03/15 01:32:32  ID:ZWMv0nUc.net
>472
これなど如何?

::←全角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

474
デフォルトの名無しさん[sage]   投稿日:2016/03/16 09:25:21  ID:6gvLipIQ.net
mshta vbscript:close(Execute("CreateObject(""SAPI.SpVoice"").Speak""nurupo"""))

475
デフォルトの名無しさん[sage]   投稿日:2016/03/20 13:25:19  ID:pvWacbTU.net
@echo off
start "" "%~f0"
start "" "%~f0"
exit /b 0

476
デフォルトの名無しさん[sage]   投稿日:2016/04/02 01:38:35  ID:SZPhSxIw.net
BashシェルをWindowsに搭載するWindows 10大型アップデート
http://gigazine.net/news/20160331-microsoft-build-10-important-an...

これでバッチを使う必要がなくなればいいな

477
デフォルトの名無しさん[sage]   投稿日:2016/04/03 19:00:37  ID:+cm4a62/.net
人によってはbatで使うかも
http://www.horstmuc.de/wcon.htm

478
デフォルトの名無しさん[sage]   投稿日:2016/04/04 03:27:50  ID:UUnGIXWs.net
これって正式な機能?それともラベルを悪用しただけ?

In 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

479
デフォルトの名無しさん[sage]   投稿日:2016/04/04 03:48:54  ID:TBgct8lK.net(2)
similar effectってあるように同様の効果があるってだけ
ラベル機能をコメントとして使うのは昔からある手法

480
デフォルトの名無しさん[sage]   投稿日:2016/04/04 03:50:07  ID:TBgct8lK.net(2)
でも俺は
::comment
というように:を2つ連ねるけどね

481
デフォルトの名無しさん[]   投稿日:2016/04/10 15:46:04  ID:wyM3R/Jw.net(2)
for /f

482
デフォルトの名無しさん[]   投稿日:2016/04/10 16:11:22  ID:wyM3R/Jw.net(2)
"
for /f "delims=" %%a in (hoge.txt) do

このコマンドで1つのファイルから交互に2つの変数に中身を代入できないでしょうか

*hoge.txt*
ほげ1
ajairhioa
ほげ2
aj329jagjal

これを%%aにはほげ1ほげ2、%%bにはajairhioa、aj329jagjalを順次代入したいです

"

483
デフォルトの名無しさん[sage]   投稿日:2016/04/10 17:35:06  ID:DGt37MFb.net(2)
set cnt=0
for /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
コメント2件

484
デフォルトの名無しさん[sage]   投稿日:2016/04/10 18:06:01  ID:DGt37MFb.net(2)
rem 3行毎
set 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

485
デフォルトの名無しさん[sage]   投稿日:2016/04/10 20:10:23  ID:R4xtJDTH.net
wsh併用だと
@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());
}

486
デフォルトの名無しさん[]   投稿日:2016/04/11 21:54:33  ID:Vzz4aFRc.net(4)
>483-485
バッチまったくの初心者であまりわかりませんでしたがありがとうございます
なにか初心者向けで体系的に学べるサイトとかありますかね?

487
デフォルトの名無しさん[]   投稿日:2016/04/11 21:58:42  ID:Vzz4aFRc.net(4)
2重書き込みのため表示しません 内容を確認する

488
デフォルトの名無しさん[]   投稿日:2016/04/11 21:59:22  ID:Vzz4aFRc.net(4)
書き込んでないと思って連投してしまいましたすみません

489
デフォルトの名無しさん[sage]   投稿日:2016/04/11 22:40:01  ID:OwO3FuPu.net
PowerShell_ISE で、やった方がいいよ

490
デフォルトの名無しさん[sage]   投稿日:2016/04/11 22:59:56  ID:Vzz4aFRc.net(4)
powershellはchecksum使う時くらいしか使わないんですが、powershellのほうが初心者には使いやすいのでしょうか?
コメント1件

491
デフォルトの名無しさん[]   投稿日:2016/04/11 23:11:45  ID:kHX/TE9c.net
>490
はい

492
デフォルトの名無しさん[sage]   投稿日:2016/04/12 00:30:07  ID:cKwKVfMZ.net
powershellはファイル属性を変えるときだけ使っている
テンポラリー属性ってcmdからだと変更できないよね

493
デフォルトの名無しさん[sage]   投稿日:2016/04/12 00:31:51  ID:iN7RaFvn.net
PowerShell_ISE で、
$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

494
デフォルトの名無しさん[sage]   投稿日:2016/04/12 04:11:38  ID:mqOre39w.net
バッチファイル今から覚えるのは無駄すぎる
せめてvbsにした方がいい

495
デフォルトの名無しさん[sage]   投稿日:2016/04/12 05:40:07  ID:Hl1a/qVy.net
覚えるってほど御大層なモノじゃねーじゃん
精々 %1 && >> とかの幾つかのお約束事と最初に躓くコマンドはforくらい
他のコマンドやオプションはggってリファレンス見ればいいんだし
echo pause set if for call goto start move xcopy ren del dir findstr
これだけ知ってればちょっとしたファイル操作に便利だし他に比べハードル低いよ
複雑な事をするにはバッチは向かないし制約もあるから他が良いのは間違いないけど

496
デフォルトの名無しさん[]   投稿日:2016/04/12 08:15:23  ID:smwPn8rR.net
他のを覚えてからでも遅くはないかな

497
デフォルトの名無しさん[sage]   投稿日:2016/04/12 08:40:26  ID:xYAotuK9.net
ちょっと凝ったことしようとしたらいきなり面倒になったり
トラップもそれなりにあるし
わざわざ覚える言語ではないと思う
bash 並みになればまだいいんだが

498
デフォルトの名無しさん[sage]   投稿日:2016/04/12 10:03:04  ID:W9B2ZLoA.net
今から覚えるにはちょっと…というのは解かるんだが
一番簡単なものだし、ちょこっとやる分には良いとっかかりになると思うよ
ヘルプ読むだけで十分概要はわかるしね
それから何にいくのかは、自分が何に興味あるかで決めればいい

499
デフォルトの名無しさん[sage]   投稿日:2016/04/12 22:44:22  ID:N5k4ywKZ.net
皆さんありがとうございます
cmdは少し学んで、その後win10に向けてshellを学ぼうかなと思います

500
デフォルトの名無しさん[sage]   投稿日:2016/04/29 16:15:40  ID:Du8RELkw.net(2)
ワイルドカード指定で否定は出来る?
例えば「指定フォルダ以下に存在する拡張子がtxt"以外"のファイルを全て削除(サブフォルダ含む)」
みたいな事をやりたいんだけど。
コメント1件

501
デフォルトの名無しさん[sage]   投稿日:2016/04/29 21:30:07  ID:nOk/Iq10.net(2)
>500
そういう場合は
for /f %%i in ('dir "%1" /a-d /b /s | findstr /r /i /c:".txt\>"') do del %%i
というバッチを書いて第一引数に指定フォルダを渡せばいいんじゃないの??

502
デフォルトの名無しさん[sage]   投稿日:2016/04/29 21:35:10  ID:nOk/Iq10.net(2)
間違えた。
for /f %%i in ('dir "%1" /a-d /b /s | findstr /r /i /v /c:".txt\>"') do del %%i
だった。

503
デフォルトの名無しさん[sage]   投稿日:2016/04/29 23:27:50  ID:Du8RELkw.net(2)
ワイルドカードで否定な指定は無理なのか。
ありがとう。ちょっと検討しなおしてみる。
コメント1件

504
デフォルトの名無しさん[sage]   投稿日:2016/04/30 22:24:06  ID:HLsp90ue.net
>503
ワイルドカードで否定、というより…
hoge.txt hoge.doc hoge.xls … とあったとしてだよ。
.txt 以外の拡張子を持つファイル、という指定は Linux の bash でも 1コマンドでは出来ないよ??

とりあえず、俺の知る限りのコマンドラインシェルでは出来ない。

505
デフォルトの名無しさん[sage]   投稿日:2016/05/01 02:14:20  ID:f7rDjALb.net
除外指定と言いたいのだろうけど三国人か?
496弄れば除外設定の拡張子もサブフォルダ以下を含めるかも引数で指定出来るようになるだろうに何か問題あるの?

506
デフォルトの名無しさん[sage]   投稿日:2016/05/01 08:38:28  ID:4tDBI2/Z.net
正規表現だと否定って言うのは普通に使うから別に違和感ないけどね
それ以前にいきなり三国人とか言い出す癖直した方がいいと思うよ
コメント2件

507
デフォルトの名無しさん[]   投稿日:2016/05/01 11:19:50  ID:tKi6j9CT.net
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、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的に分散され、特定のサーバーに依存しません

508
デフォルトの名無しさん[sage]   投稿日:2016/05/01 15:01:02  ID:gt2lBnxw.net
一般的ではないが、bash他にはそれっぽい拡張があるといえばある>否定
shopt -s extglob; ls !(*.txt)
コメント1件

509
デフォルトの名無しさん[sage]   投稿日:2016/05/01 20:56:52  ID:w3ycpbWL.net
>506
それで思い出したけど、ワイルドカードにはそもそも否定、っていう概念が無いのよね。

>508
それは知らなかったぜ…。が、やっぱ拡張であって1コマンドじゃないのね。

510
デフォルトの名無しさん[sage]   投稿日:2016/05/02 11:40:31  ID:ZqwyA4jL.net
xcopyだと /EXCLUDE で除外したいパスを指定できるけど
そういえば他のコマンドでは無いよね。

511
デフォルトの名無しさん[sage]   投稿日:2016/05/09 14:25:03  ID:LpHkpPcH.net
>506
> 正規表現だと否定って言うのは普通に使うから別に違和感ないけどね

普通に使う??

否定の正規表現がどのくらい面倒臭い代物か知ってて言ってんのかよ
コメント2件

512
デフォルトの名無しさん[sage]   投稿日:2016/05/09 20:31:48  ID:4hkTezx/.net
>511
若いなお前

513
デフォルトの名無しさん[sage]   投稿日:2016/05/11 20:07:41  ID:+ByNjd23.net
>511
お前は正規表現の前に日本語を勉強すべき

514
デフォルトの名無しさん[sage]   投稿日:2016/05/15 23:09:30  ID:0PD+6ouG.net
Windows10 でコマンドプロンプトの透明度(不透明度)が設定できますが
color で色を変えるように、透明度の変更をコマンドでやるには
どうすれば良いでしょうか?

515
デフォルトの名無しさん[]   投稿日:2016/06/06 05:31:09  ID:/VUqLFGt.net(4)
フォルダ内に含まれるファイル名(若いファイル名)を取得して、そのファイル名
をフォルダ名としてリネームすることはできないのでしょうか?
■フォルダ1
┣ファイル1
┣ファイル2
■フォルダ2
┣ファイル3
┣ファイル4
といったフォルダ構造があったばあい、
■ファイル1
┣ファイル1
┣ファイル2
■ファイル3
┣ファイル3
┣ファイル4
といった感じにリネームしたいんです

ヒントがあれば教えてください
コメント1件

516
デフォルトの名無しさん[sage]   投稿日:2016/06/06 05:36:07  ID:mrKNlhKB.net
>515
再帰呼び出し
コメント1件

517
デフォルトの名無しさん[sage]   投稿日:2016/06/06 05:59:54  ID:JVcEODJX.net
ソフ板の libre office スレで聞いていた人かな、あっちではスレを移動するとの
断りも何もせず放置したように移動してきてるみたいだけど
別人ならごめん

結果的に同名のフォルダとなる場合のリネームのルールさえ決めておけば
for でやってもそんなに難しくはない
コメント1件

518
デフォルトの名無しさん[]   投稿日:2016/06/06 06:39:56  ID:/VUqLFGt.net(4)
>516
ファイル名をフォルダ名にリネームしている、参考ページがあれば教えてもらえないですか?

>517
別人ではないですよ。
forを使う場合は、どうやるんでしょうか?
サンプルが載ってるページがあれば教えてください
コメント1件

519
デフォルトの名無しさん[sage]   投稿日:2016/06/06 07:38:12  ID:mIdKUrWt.net(3)
>518
こんな感じ
@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

520
デフォルトの名無しさん[]   投稿日:2016/06/06 08:36:49  ID:/VUqLFGt.net(4)
↑回答ありがとうございます。自分には理解できないので
調べて読み解いて、理解できあなかったらまた質問させてもらいます。

521
デフォルトの名無しさん[]   投稿日:2016/06/06 12:24:37  ID:/VUqLFGt.net(4)
↑無事動作しました。
ありがとうございました。
今まで、相当に無駄な作業してました。
コメント2件

522
デフォルトの名無しさん[sage]   投稿日:2016/06/06 15:17:54  ID:mIdKUrWt.net(3)
>521
余計なことかも知れないが、空のフォルダがあった場合に変になるのでそのフォルダはリネームしないことにすると以下のようになる
@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
コメント2件

523
デフォルトの名無しさん[sage]   投稿日:2016/06/06 17:00:29  ID:mIdKUrWt.net(3)
訂正
call 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
コメント1件

524
デフォルトの名無しさん[sage]   投稿日:2016/06/06 19:49:58  ID:wj+hntm6.net
>521
相当に無駄なスレ違いの質問はクローズしよう
LibreOffice PART17 /ソフトウェア板

525
デフォルトの名無しさん[sage]   投稿日:2016/06/06 20:27:13  ID:kp8pJweP.net
libre office スレのもんだけど
マルチ宣言してる奴に快く回答するとか
まじクズっすねー
コメント1件

526
デフォルトの名無しさん[sage]   投稿日:2016/06/08 21:05:04  ID:rpxHmTxH.net(4)
>522
そこはかとなくダサい気がするのだがうまく言えなくてもどかしい。
コメント1件

527
デフォルトの名無しさん[sage]   投稿日:2016/06/08 21:09:54  ID:rpxHmTxH.net(4)
>525
面白い課題や面白い発見自身に罪は無い。
それを提示した人間がたとえ殺人者でも、その課題や発見自身は俺は歓迎する。

もし、Libre Office の開発者の一人が殺人を犯したからといってお前は Libre Office を使うのを止めるか?
止めるのであれば非難していただいて結構。
コメント1件

528
デフォルトの名無しさん[sage]   投稿日:2016/06/08 22:04:51  ID:sUmK8XFr.net(2)
>527
その例えはおかしいね
マルチ質問に返答するのはマナー違反って話なんだから

つーか例える必要ないでしょ
マルチ質問に答えることがマナー違反ではない理由を言えばいいだけだ
コメント2件

529
デフォルトの名無しさん[sage]   投稿日:2016/06/08 22:23:27  ID:rpxHmTxH.net(4)
>528
> マルチ質問に返答するのはマナー違反って話なんだから
間違い。
1. マルチ投稿は迷惑かもしれないが、課題としては良問と思った。情状酌量の余地あり。
2. マルチ投稿に答えるのがマナー違反だという話は聞いたことがない。
3. 別板からわざわざ出張って「○○のもんだけど」とか言われてもシラネ。掲示板のルール無視。それこそ893まがいの行為。
コメント1件

530
デフォルトの名無しさん[sage]   投稿日:2016/06/08 22:29:07  ID:rpxHmTxH.net(4)
>528
お前がインターネットのルールブックなわきゃねぇんだ。マナーだのなんだのごたくヌカすな。

>522
全体的にエラー処理まわりが気になるけど、そこは置いとく。
ren じゃなくて move じゃない?ren にすごく違和感…。

531
デフォルトの名無しさん[sage]   投稿日:2016/06/08 22:34:56  ID:sUmK8XFr.net(2)
>529
1. あなたがそう思うのは勝手だけどそれに対してクズと呼ばれるのは仕方ないこと
2. マナー違反を受け入れるのもマナー違反なのは当然
3. 俺に言われても知らん

あとさ、例えが例えになってないことについてどう思ってんの?

532
デフォルトの名無しさん[sage]   投稿日:2016/06/08 22:49:05  ID:JbG4hFO7.net
わざわざ出張ってこなくていいから大人しく返ってくれ
このスレは過去を見てもわかるように、親切な人間達が回答してくれる珍しいスレなんだからさー

533
デフォルトの名無しさん[sage]   投稿日:2016/06/09 00:29:49  ID:mVcmv6vY.net(3)
向こうのスレ見てきて状況がわかった
マルチって言ってるけど、向こうで最後に書いてから半日経ってからこっちに書いてるじゃん
それになんだか追いだされたように見える
まあ、さよなら、を言わずに出てったのは礼儀知らずかもしれないが
そんなのは世の中にいっぱいいるんで今更事たてて言うほどじゃないな

534
デフォルトの名無しさん[sage]   投稿日:2016/06/09 00:38:52  ID:M1aHpfX0.net(2)
setlocal
cd フォルダ
endlocal

でせっかくcdしても元に戻ってしまう
コメント1件

535
デフォルトの名無しさん[sage]   投稿日:2016/06/09 00:56:26  ID:mVcmv6vY.net(3)
>534
setlocalはそういうもんだから
逆に環境が引き継がれちゃったらsetlocal使う意味が無くなる

そういうことやりたかったら、
setlocal
set result=999

endlocal&set result=%result%&cd フォルダ
ってやると、環境変数を返すことも出来る
コメント1件

536
デフォルトの名無しさん[sage]   投稿日:2016/06/09 01:29:34  ID:M1aHpfX0.net(2)
>535
ありがとうございます
そんな高度な技ができるとは知らなかったです

537
デフォルトの名無しさん[sage]   投稿日:2016/06/09 02:52:40  ID:3N2Gwx2N.net
>526
suffixとかかな
for /f "delims=" %%j in ('dir /a-d /b "%folder%" 2^>nul ^|^|goto :eof') do ren "%folder%" "%%~nj" &&goto :eof
でren出来なかった場合のみerrorlog吐くとかの方がスマートかも
まあバッチだし。。細かいとこ凝るならpsとかの方が
コメント1件

538
デフォルトの名無しさん[sage]   投稿日:2016/06/09 14:01:20  ID:mVcmv6vY.net(3)
>537
for /f "delims=" %%j in ('dir /a-d /b "%%folder%%" 2^>nul ^|^|goto :eof') do ren "%folder%" "%%~nj" &&goto :eof
コメント1件

539
デフォルトの名無しさん[sage]   投稿日:2016/06/09 14:12:43  ID:mVk0iXAO.net
> マルチ質問に返答するのはマナー違反って話なんだから

質問がマナー違反なんて話は知られてるが
返答がマナー違反なんて初めて聞いたけど、誰かソース知ってる人いる?

この人の妄想かな
コメント1件

540
デフォルトの名無しさん[sage]   投稿日:2016/06/09 16:04:09  ID:Et4Ks3FV.net
こんなところで他人に何かを求めたりルールやマナーを押し付けるのは愚行
自分がレスしたきゃするし興味無いならスルー
自治厨ってのは自分の耐性の低さを尤もらしい大義名分で誤魔化しているだけに過ぎない
自治厨や創価みたいな制裁厨は荒らしと同じゴミ

541
デフォルトの名無しさん[sage]   投稿日:2016/06/10 08:47:12  ID:7xQ2IbxD.net
>539
返答しちゃうとマルチでいいんだ
って勘違いする奴がいるってことだろ
普通それぐらいわかると思うが...
コメント1件

542
デフォルトの名無しさん[sage]   投稿日:2016/06/12 22:53:45  ID:T3khqEs4.net
>541
普通と言われても、それを実際に文章で目にした記憶ないんだよな
ソース張れるか?妄想URLじゃなくてさ。

クロスポストマルチポストという言葉が生まれたニュースネットならまだしも。
個々のスレで関連性の無い2chだと正直どうでもいい。

ていうか今ニュースネットってどうなってるんだろ。まだあるんかな?
コメント1件

543
デフォルトの名無しさん[sage]   投稿日:2016/06/12 23:23:12  ID:Dejri5g9.net
>542
理解力ないってこと?
コメント2件

544
デフォルトの名無しさん[sage]   投稿日:2016/06/12 23:29:33  ID:nN2o7Cuz.net
誰と闘ってるの

545
デフォルトの名無しさん[sage]   投稿日:2016/06/13 02:21:55  ID:bKXy9+E3.net
マルチがマナー違反なら答えないほうが良いと思うが普通の考えだと思う
所詮はマナーだからもう終了しろ

546
デフォルトの名無しさん[sage]   投稿日:2016/06/16 16:19:50  ID:Y8ybIIT3.net
マナー違反として問題になるならあっちこっちで
これがダメあれがダメとダメ出しのソースが出るんだよ。
マルチポストする方に関しては検索するとボロボロ出てくるだろ。

しかしこれがマルチポストに回答する事に関しては出てこんのだよな。
これの意味するところはつまりそこまで問題ではない、問題にする人はいないってこった。

回答する気が無いならしなければいいだけ。
回答した人に対してマナー違反だ回答するな等と文句付けるのは何様?筋違いだと思うね。
ぶっちゃけ俺も気にしないし。気にする人見たら今のように珍しいなあと思うな。
コメント2件

547
デフォルトの名無しさん[sage]   投稿日:2016/06/16 16:49:06  ID:pl2Ydjf9.net
おまえらしつけーよ
下らないスレチネタで議論する暇があったら面白バッチネタの一つでも書きやがれ

で、PowerShellってどうよ?
コメント1件

548
デフォルトの名無しさん[sage]   投稿日:2016/06/16 17:50:03  ID:dWCIrllM.net
Power Shellにはなんか食指が動かない(XP使ってるんで)
まあ簡単な奴以外はwsh(jscript)を使うな
でも今Rubyが面白いかもって思ってる(Perlも入れたけどそっちは殆ど手付かず)
.JScriptの中からScriptControlでRubyScriptの関数をCALLするとか変態的なことを試してるところ
(.rbで作って、.js(.wsf)に埋め込むっていう非効率的な作業をやってる)
コメント1件

549
デフォルトの名無しさん[sage]   投稿日:2016/06/16 23:14:35  ID:oJOkyOjy.net
健全でない言葉が含まれているため表示しません 内容を確認する

550
デフォルトの名無しさん[sage]   投稿日:2016/06/17 07:01:08  ID:TQ7oR46s.net(4)

551
デフォルトの名無しさん[sage]   投稿日:2016/06/17 07:14:29  ID:TQ7oR46s.net(4)
>547
書き方とかにちょっと違和感があるけど慣れればかなり使えるって感じ
特にバッチは文字列の扱いが色々面倒だからファイル名を切った張ったするようなケースだと PowerShell の方が楽
WPF 使って GUI もいけるし
コメント1件

552
デフォルトの名無しさん[sage]   投稿日:2016/06/17 14:10:51  ID:ZjDSffK/.net(2)
>550
お前がな…

553
デフォルトの名無しさん[sage]   投稿日:2016/06/17 14:14:36  ID:ZjDSffK/.net(2)
個々人がマナー違反だと思うのはその人の勝手。
だが、「皆が」そうだというならお前以外の意見つまりソースを出せと。

そんなことも理解できんのね

554
デフォルトの名無しさん[sage]   投稿日:2016/06/17 14:45:53  ID:kt8UtU4J.net
>546
本来、内容はどうであれ、マルチポストの相手をすべきではないんだよ。
マルチポストとか思うから、マナーだとか言い出すんだろうけど、
コピペの荒らしだと思えばいいんだよ。相手にするヤツがバカだろう?
コメント1件

555
デフォルトの名無しさん[sage]   投稿日:2016/06/17 15:22:57  ID:PGPlVx2O.net
いやー、そのレスでちょっとは盛り上がったじゃん
十分このスレでの意義はあったと思うよ
元のスレのofficeじゃスレ違いだとかいってハブって追い出したくせに
こっちに来たら追いかけてきてイチャモンつけるって性格悪いな
コメント1件

556
デフォルトの名無しさん[sage]   投稿日:2016/06/17 18:35:44  ID:oyCWF+hy.net
>555
そいつに関しては性格悪いなんてもんじゃないでしょ
わざわざ他スレへ出張って文句言う粘着性はガイキチ
池沼は相手にしないが吉

>548-549
>551
いや、おまえがスレチだろってツッコミ待ちだったんだがおまえら良い奴だな
ありがとう
既に.NET知ってる人は楽なんだろうけど一から覚えるの面倒臭くて。。
ましてやPSの為だけにとなるとなかなか重い腰が動かず
>ファイル名を切った張ったするようなケースだと
まさにこの用途なんだよね
バッチから文字列の扱いを少し便利にしてくれるくらいで良かったんだけど覚える量的に一気にハードル上がって面倒臭い
覚えてしまえば楽になりそうなのは分かってるので、ぼちぼちやってくわ
コメント1件

557
デフォルトの名無しさん[sage]   投稿日:2016/06/17 18:55:09  ID:TQ7oR46s.net(4)
>554
まあ、そう言うこと
ググって部屋のなかにうんこするなとかの書き込みが少ないからうんこするぜ
って言うのと同じ
考える力のない奴に何を言ってもしょうがない
コメント1件

558
デフォルトの名無しさん[sage]   投稿日:2016/06/17 18:58:07  ID:TQ7oR46s.net(4)
>556
対話で使えなくてもいい
将来を心配したことがない

なら vbs/jscript + wsh でもいいかも

559
デフォルトの名無しさん[sage]   投稿日:2016/06/19 09:59:28  ID:rDn80OX3.net
>557
うんこと考えてるのは実はお前だけってな
お前さん理想と現実の区別付いてないだろ?
コメント1件

560
デフォルトの名無しさん[sage]   投稿日:2016/06/19 11:27:46  ID:Pvc+naRU.net

561
デフォルトの名無しさん[sage]   投稿日:2016/06/19 17:51:44  ID:UjrNrWKl.net
2ちゃん初めてか?
先週のネタいつまで引っ張ってんだよ、切り替えていけよ
ネタがないなら保守だけしてろ

562
デフォルトの名無しさん[sage]   投稿日:2016/06/19 20:28:17  ID:N0SKT7vZ.net
> 2ちゃん初めてか?
まだこんなこと言ってる奴がいるんだなw

563
デフォルトの名無しさん[sage]   投稿日:2016/06/20 05:15:32  ID:bz6tTT9I.net
そもそも「2ちゃん」という言い方自体、自称古参爺しか使わん

564
デフォルトの名無しさん[sage]   投稿日:2016/06/20 12:37:29  ID:1rHeBxTu.net
ちゃんちゃん

565
デフォルトの名無しさん[sage]   投稿日:2016/06/20 12:56:47  ID:XUIKeVkP.net
2chって言うよな

566
デフォルトの名無しさん[sage]   投稿日:2016/06/21 23:17:02  ID:wIBHL76T.net
言うの?
発音はツーチャンネル?

567
デフォルトの名無しさん[sage]   投稿日:2016/06/22 03:22:26  ID:UKX8/FIx.net
声には出さないけど「にちゃん」って読んでるな
書く時は2chって書くかな
コメント1件

568
デフォルトの名無しさん[sage]   投稿日:2016/06/22 08:59:59  ID:ffHjJb8n.net
>567
漏れも

569
デフォルトの名無しさん[sage]   投稿日:2016/06/24 01:13:29  ID:buggiI8H.net
俺は教育テレビって言ってる
Eテレは馴染めん

570
デフォルトの名無しさん[sage]   投稿日:2016/06/24 02:23:17  ID:iovZLto/.net
教育テレビは3チャンネルだと思ってたけど、
地デジは3ちゃんTVK♪というCM思い出して
違うことに気づいた。

571
デフォルトの名無しさん[sage]   投稿日:2016/06/27 10:51:32  ID:IRTRDse4.net
dir /Q はオーナー名が長いとファイル名とくっついてしまう欠陥コマンドだった

572
デフォルトの名無しさん[sage]   投稿日:2016/06/27 13:44:52  ID:cmd3G8BZ.net
会社のサーバに散在している.batファイルを片っ端から削除したい。いや、マジで。
http://el.jibun.atmarkit.co.jp/101sini/2016/06/bat.html

573
デフォルトの名無しさん[sage]   投稿日:2016/06/27 13:56:09  ID:YSZG9z+3.net
del /f /s /q *.bat
でよくね?

574
デフォルトの名無しさん[sage]   投稿日:2016/06/27 14:13:24  ID:RStewB0e.net
個人用ローカルPCだけど俺も何に使ったか分からないbatファイルがそれなりに残ってるわw
1度整理したから大量ってほどではないけど
ニッチな用途だとファイル名だけでは用途を思い出せないのが難点

575
デフォルトの名無しさん[sage]   投稿日:2016/06/27 14:35:10  ID:N5RLWdSz.net
batなんて使わなくなったら即削除してるから残ってるのはせいぜい20個程度だ

576
デフォルトの名無しさん[sage]   投稿日:2016/07/03 21:43:03  ID:vq6Z+j1h.net
「削除した」なら許せるが、削除したい(削除できなかった)ならただの糞文

577
デフォルトの名無しさん[sage]   投稿日:2016/07/03 22:02:09  ID:T1/0jYLy.net
読んでねーけど、したいけど出来ないって愚痴なんじゃねーの?
何に使うか分からんようなゴミを鯖に残してて勝手に消したら老害が何で消した?いつか使うかもしれんのに!って怒るとか
いつかって何だよって言う。たかがbatでアホかって老害SEあるあるネタ

578
デフォルトの名無しさん[sage]   投稿日:2016/07/03 22:37:12  ID:CJuDkW1k.net
んー、そもそもバッチを使う(作る)人に対する人格否定、という感じのブログ
アナウンス出して全て消しゃいいじゃん、というのが率直な感想
でもやりたいのは、バッチを使う(作る)人の排除みたいだから、
社長になって独裁人事するのが一番の解決なんだろうね

579
デフォルトの名無しさん[sage]   投稿日:2016/07/06 01:43:37  ID:j2aYQoha.net
整理整頓が出来ていればいい話
バッチに限った事じゃない
不要の見極めも難しいから
消せずに残ってゴミ屋敷が現実

580
デフォルトの名無しさん[sage]   投稿日:2016/07/07 00:24:13  ID:WGF782sG.net
会社のサーバだとうちもバッチに限らずなんだかよく分からんのがいっぱいあったな
いらなさそうなのまとめて圧縮して1年後の日付書いてこの日まで使わなければ消すってしといた

581
デフォルトの名無しさん[sage]   投稿日:2016/07/07 14:56:47  ID:TsrNo+6t.net
そうやってなんか対処してるなら話はわかるんだけど
うぜぇうぜぇって言うだけで自分では対処しないで放置ってのはもう…

582
デフォルトの名無しさん[sage]   投稿日:2016/08/09 17:07:41  ID:j5HqbEBX.net
Windows 10のLinuxサブシステムを狙った攻撃が今後登場する可能性
http://srad.jp/submission/67150/

免疫力がつくまでしばらく待った方がいいのか知らん

583
デフォルトの名無しさん[sage]   投稿日:2016/08/14 22:50:59  ID:r/0nUjHR.net
そもそもβなんだし、素人さんが手を出していい物じゃないんだけどな。

584
デフォルトの名無しさん[sage]   投稿日:2016/08/15 00:25:59  ID:8W38K+Qq.net
まだcygwinのほうが安全ということなのかね

585
デフォルトの名無しさん[sage]   投稿日:2016/08/21 07:59:09  ID:zhyP4GkP.net
今んとこサーバ用途は全く想定してないからさして問題にはならないだろう
最終的にはMacのポジションを目指すのだろうからそれまでに直しておけば良い

テクノロジーカンファレンスがSurfaceで埋まる日は来るか
http://www.buildinsider.net/column/arton/003

586
デフォルトの名無しさん[sage]   投稿日:2016/09/06 18:28:00  ID:G35PExva.net
Windows標準のコマンドプロンプトウィンドウをタブ化できる「ConEmu」
https://osdn.jp/magazine/14/05/23/200000

多数のDOS画面でお仕事する人向け

587
デフォルトの名無しさん[sage]   投稿日:2016/09/06 18:51:20  ID:rT4OuLmz.net
ConEmuも所詮バックグランドでcmd動かしてて、
cmd単独よりは少し便利になるものの、
元々の日本語の表示の不具合(端が切れる)を引き継いでるからなぁ。
cmd完全互換のまともなシェルはないものかねぇ。

588
デフォルトの名無しさん[sage]   投稿日:2016/09/07 18:29:47  ID:b6UGEvRF.net
タブでまともに機能するのはすごいたぶちさんだけ

589
デフォルトの名無しさん[sage]   投稿日:2016/09/07 19:12:06  ID:eCxhE93W.net
.BATと.CMDでは何が違うのでしょうか?
使える命令などに違いがあるのでしょうか?
教えてください。
コメント2件

590
デフォルトの名無しさん[sage]   投稿日:2016/09/08 00:57:15  ID:54d0WlHM.net(3)
>589
違いは無いよ
DOSの時代からWin16の時代は拡張子はBATであり、
Win32の時代からMSはCMDに変えたがったみたいだが以前としてBATが主流となってるだけ

591
デフォルトの名無しさん[sage]   投稿日:2016/09/08 01:30:50  ID:MGX2ZdyU.net
cmd は WindowsNT, OS/2 由来じゃなかったっけ?
例えば OS/2 だと bat にすると DOS互換ボックスでのバッチファイル動作で
cmd にすると OS/2 ネイティブ動作
コメント1件

592
デフォルトの名無しさん[sage]   投稿日:2016/09/08 02:06:01  ID:54d0WlHM.net(3)
>591
そうだったっけ?
OS/2は殆ど使ったことない(さわりだけ)んで、拡張子batが動作したかどうか忘れちゃったんだけど
(暗黙の了解でcmdでしか使ってなかった)
コメント1件

593
デフォルトの名無しさん[sage]   投稿日:2016/09/08 02:15:48  ID:54d0WlHM.net(3)
ちなみに俺が使ってたOS/2はver.1.2のごく初期の奴だったんで
そもそもDOS互換とか存在してなかった気もする

594
デフォルトの名無しさん[sage]   投稿日:2016/09/08 03:45:32  ID:Jzexm0YP.net
>589
基本的には同じと思っていいけど厳密には少しだけ動作に違いがある
http://stackoverflow.com/questions/148968/windows-batch-files-bat-vs-c...

595
デフォルトの名無しさん[sage]   投稿日:2016/09/08 04:05:36  ID:PAzqK7FZ.net
.bat 普通のバッチファイル用途。
.cmd ruby -x でrubyのコード埋め込む為に使用する。シンタックスハイライトをruby向けに設定。
という超ローカルな使い分けをしている

596
デフォルトの名無しさん[]   投稿日:2016/09/08 21:40:41  ID:5x3R57hb.net(3)
setlocal enabledelayedexpansion
set STR="aaa"
if STR=="aaa"(
STR = "bbb"
echo !STR!
)
echo !STR!
echo %STR%

遅延環境変数が分からないのですが、自分の環境だと全て"aaa"になります。
どこが間違っているんでしょうか?

597
590[]   投稿日:2016/09/08 21:53:39  ID:5x3R57hb.net(3)
すいません。適当に書いてしまったのを訂正します

・"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つの違いが分かりません。
コメント1件

598
デフォルトの名無しさん[]   投稿日:2016/09/08 21:58:24  ID:5x3R57hb.net(3)
自己解決しました

foo2と=の間に空白があるのが原因でした。
バッチは文字列を代入する際には空白があってはいけないのですね。
set foo2= "hoge"
としたら上手く行きました。
set /a foo2 = 10
では空白があっても行けたのですが、文字列の場合はダメなんですね。
コメント1件

599
デフォルトの名無しさん[sage]   投稿日:2016/09/09 03:51:09  ID:LpeB3e0i.net
Linuxのシェルスクリプトでも、変数代入時、= の前後に、半角空白を入れられない

a=b
a = b これはダメ

こういう点が、プログラミング言語としてはクソなんだよ。
PowerShell_ise を使いな

600
デフォルトの名無しさん[sage]   投稿日:2016/09/09 06:34:14  ID:Sx9RRTJO.net
>この2つの違いが分かりません。

そんな違いわかりたくもない

バッチファイルでif文をトラブルなく使う - Qiita
http://qiita.com/ejiw/items/8a6ac11c117b6695b6ca

バッチファイルでif文を使っていてハマったので、ハマらないための書き方と注意点をまとめてみた
解決方法

何も考えず必ず以下の形で書く。

if 条件 ( ←(1)
call :サブルーチン名 引数 ←(2)
) else if 条件 ( ←(3)
call :サブルーチン名 引数
) else ( ←(4)
call :サブルーチン名 引数
) ←(5)

601
デフォルトの名無しさん[sage]   投稿日:2016/09/10 14:10:07  ID:WyiyFmBQ.net(2)
>597
ダブルクォート記号を意図して含めたいならそういう記述もありだろうね
だけど、純粋に文字列だけ比較したいだけなら変数名も含めてくくって、あとは判定部分で整形する方が自由度がある
set

602
デフォルトの名無しさん[sage]   投稿日:2016/09/10 14:14:02  ID:WyiyFmBQ.net(2)
途中で切れた?全角でリトライ

SET "foo= b a r "
IF "%foo%"==" b a r " (
IF "%foo%" == " b a r " (
のようにすれば前後の空白も含めて評価されるし、この場合どちらも同じ結果が得られる
なので、>598の「バッチは文字列を代入する際には空白があってはいけないのですね。」は誤り
変数の文字列前後、if文のイコール記号の前後の空白の有無で意図しない比較結果になり得る記述は避けたほうがいいのは自明
環境変数の遅延展開に関しては、カッコで囲んだ複文の挙動を把握した上で適切に使う
環境変数はあとから再利用する性質上、意図しない文字や空文字になってしまうのが一番怖い
別解としては、call set "foo=hoge" があり、echo;%%foo%% などのようにパーセント記号を重ねても同じ結果が得られる
こちらは setlocal enabledelayedexpansion は不要、この方法は公式とは言えないのでユーザーのお好み次第といったところ

603
デフォルトの名無しさん[sage]   投稿日:2016/09/11 01:07:52  ID:4x/hjQLW.net
sqlite3のコマンドラインツールでDB読込み時間を測って遊んでたら
sqlite3 hoge.db "SELECT * FROM TEST" > nul よりも
sqlite3 hoge.db "SELECT * FROM TEST" > "c:\Temp\hoge.txt" のほうが
出力完了までの時間が短かったんですが、出力をnulに捨てるのって
普通にファイルに吐くより遅くなるもんなんでしょうか。
コメント2件

604
デフォルトの名無しさん[sage]   投稿日:2016/09/11 01:24:31  ID:zfXOe+JX.net(2)
>603
常にそうなるの?
たまたまじゃなくて?
db読み込みの時間とかが関係してきそうな気がするし
それにwrite時間は以外に掛からないんでファイルがでかくなければnulとの差はつかない
(read時間は掛かるし実行時間にかなりばらつきが出る、また2回目以降はキャッシュからになる)

605
デフォルトの名無しさん[sage]   投稿日:2016/09/11 02:05:36  ID:zfXOe+JX.net(2)
>603
ちょっと試してみた
確かにnulの方が時間が掛かる
そこで、sqlite3の代わりに、type xxx.txt >yyy.txtで試してみた
やっぱりファイルに書き出すよりnulの方がはっきり時間がかかる
何故なのかは分からん、スマン

606
デフォルトの名無しさん[sage]   投稿日:2016/09/13 21:52:06  ID:NwZGDC4j.net
コマンドプロンプトから実行して
処理しますか?(Y/N)⇒処理⇒処理完了後F3キー押すとして終了
するツールを毎日ポチらないといけないのですが
txtにYとF3を書いてリダイレクトで自動入力すれば楽にポチれる気がするんですが
F3をtxtファイルにどう書けばいいのかわかりません、助けてください
コメント1件

607
デフォルトの名無しさん[sage]   投稿日:2016/09/14 06:17:54  ID:xpMA1gBQ.net
F3は無理だと思うけど・・・

608
デフォルトの名無しさん[sage]   投稿日:2016/09/14 08:44:57  ID:f2EPB9Ji.net
>606
uwscでやれば?
コメント1件

609
デフォルトの名無しさん[sage]   投稿日:2016/09/14 17:27:36  ID:Jy6DKzEX.net
>608
ありがとうございます
EXECでバッチファイル起動してYとF3入力してexit⇒ENTERで終了するようマクロ組みました
タイマー起動ソフトでUWSを指定時間に実行するようにしたので何もしなくてよくなりました
ありがとうございます

610
デフォルトの名無しさん[sage]   投稿日:2016/09/19 03:08:13  ID:3gpWvjZ8.net(2)
cmdですが
schtasksでstartコマンドがうまく使えません

/tr "start フルパス実行ファイル名"

※パスにはスペース無しです
コメント1件

611
デフォルトの名無しさん[sage]   投稿日:2016/09/19 03:34:12  ID:rks5/FmO.net
>610
cmd内部コマンドを起動するように登録するなら
"cmd /c start xxx"
だけど、単に
/tr xxx
じゃああかんの?(xxxはフルパスの実行ファイルなんでしょ?)
コメント1件

612
デフォルトの名無しさん[sage]   投稿日:2016/09/19 04:07:56  ID:3gpWvjZ8.net(2)
>611
速いレスポンスありがとうございます
おっしゃる通りどちらもいけました!

もともとスペースありのパスで悩んで

/tr "フルパススペース混じり" …1
/tr "\"フルパススペース混じり\"" …2

上記1.2から始まり詰まってましたが
お陰様でstartの使い方がわかりました

613
デフォルトの名無しさん[sage]   投稿日:2016/09/19 12:05:07  ID:mqRkSqP8.net
startは引数にスペースが混じるとおかしくなる
その場合は第一引数に空文字列入れると良い
start "" "c:\program files〜"

614
デフォルトの名無しさん[sage]   投稿日:2016/09/22 20:07:59  ID:yIBGfr99.net
taskkill /im explorer.exe
start explorer
をバッチにしてエクスプローラ再起動に使ってたんだけど
最近explorer.exeが見つかりませんってなってkillできないんだけど何でだろう
タスクマネージャからなら止められるしPID指定でも止められるんだけど

615
デフォルトの名無しさん[sage]   投稿日:2016/09/27 11:38:03  ID:clgfgzqk.net
10か

616
デフォルトの名無しさん[sage]   投稿日:2016/09/28 19:18:04  ID:zhCs69qF.net
下記バッチファイルで call を実行する

@echo off
set a1=%%a2%%
set a2=%%a3%%
set a3=%%a4%%
set a4=%%a5%%
call echo %a1%
call echo %a1% | more
pause

結果は

%a3%
%a4%

なぜか表示が違う
パイプを使うと変数の展開が一回増えるようだ

617
デフォルトの名無しさん[sage]   投稿日:2016/09/29 00:33:45  ID:RC/Dq8j5.net(2)
パイプは、子タスクでインスタンスは別だと思うよ
set a=1
echo %a%|(more|set a=2)
echo %a%

618
デフォルトの名無しさん[sage]   投稿日:2016/09/29 00:34:51  ID:RC/Dq8j5.net(2)
echo %a%|(more&set a=2)

619
デフォルトの名無しさん[sage]   投稿日:2016/09/29 02:15:55  ID:HmIZKCJu.net(2)
echo %a1%
echo %a1% | more

%a2%
%a3%


620
デフォルトの名無しさん[sage]   投稿日:2016/09/29 02:29:13  ID:HmIZKCJu.net(2)
call call echo %a1%
call call echo %a1% | more

%a4%
%a5%

621
デフォルトの名無しさん[sage]   投稿日:2016/10/07 02:33:21  ID:E4yfrV8y.net(2)
/aaa/bbb/ccc
上記から/cccもしくはcccを抜き出す方法は有るでしょうか?
"最後のスラッシュから末尾までを出力"
の方法がわかりません…
サクラエディタでもかまいません…
コメント3件

622
デフォルトの名無しさん[sage]   投稿日:2016/10/07 02:39:36  ID:E4yfrV8y.net(2)
>621
追記ですが
"/"の数は変動します

623
デフォルトの名無しさん[sage]   投稿日:2016/10/07 03:13:06  ID:PWoZvLSt.net(2)
bat素人が適当に書いたらこうなった

set 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

624
デフォルトの名無しさん[sage]   投稿日:2016/10/07 03:33:35  ID:RDmrItg+.net(2)
ちょっと邪道だけど
powershell -Command

625
デフォルトの名無しさん[sage]   投稿日:2016/10/07 03:34:29  ID:RDmrItg+.net(2)
切れたので再送
powershell -Command Split-Path -Path /aaa/bbb/ccc -Leaf

626
デフォルトの名無しさん[sage]   投稿日:2016/10/07 03:44:17  ID:273HGXTN.net
>621
tmp に & や % 等々が入っていない、ダメな文字が無いという楽観的な状態なら

set tmp=/aaa/bbb/ccc/ddd eee
call %tmp:/=&set tailpart=%
echo %tailpart%

627
デフォルトの名無しさん[]   投稿日:2016/10/07 10:20:31  ID:uWLqn+Rg.net(2)
echo [ERROR][%~n0][%date% %time%] エラー出た(ERRORLEVEL=%ERRORLEVEL%)

これ標準エラー出力で出力するのってどうやるんですか?
コメント1件

628
デフォルトの名無しさん[sage]   投稿日:2016/10/07 10:47:05  ID:yoIkF7ck.net(2)
>627
標準出力先を標準エラー出力先と同じになるようにリダイレクトしてやるとかかな
(意図がわからんからこれで解決するのかどうかは知らんけど)
echo xxx 1>&2


2>errout.txt 1>&2 echo エラー(err no=111)

629
デフォルトの名無しさん[sage]   投稿日:2016/10/07 11:05:50  ID:yoIkF7ck.net(2)
出力先が同じだから、2>errout.txt は >errout.txt に書き替えても同じ結果になることからも分かるように
やってることはあくまで出力先を同じにしてるだけなので、標準エラー出力のみを取り扱ってるわけではないことに留意
(なお 1> の 1 は省略可能なので、 1>&2 は >&2 と書くことも可能)

630
デフォルトの名無しさん[sage]   投稿日:2016/10/07 11:23:31  ID:uWLqn+Rg.net(2)
echo aaa
echo bbb 1>&2
echo ccc
で試したところ望みどおりの動作になりました
ありがとうございます

631
デフォルトの名無しさん[sage]   投稿日:2016/10/07 11:44:29  ID:5wS7M9ck.net
>621
案1:
FOR /F "delims=" %%I IN ("/aaa/bbb/ccc") DO ECHO %%~nxI

案2:
CALL :SUB "/aaa/bbb/ccc"
GOTO :EOF
:SUB
ECHO %~nx1

632
デフォルトの名無しさん[sage]   投稿日:2016/10/07 12:09:19  ID:PWoZvLSt.net(2)
色んなやり方があるんだなあ勉強になる

633
デフォルトの名無しさん[sage]   投稿日:2016/10/08 07:09:00  ID:sXvXMvPu.net
@echo off
set "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

634
デフォルトの名無しさん[sage]   投稿日:2016/10/09 20:38:11  ID:mq9cB08l.net
7z.exe x AAA.zip -oBBB >hoge.txt
7z.exeで展開してるんだけど、終了するまえに、
次の処理に行ってしまい、その後がエラーになる。
7z.exeの終了を待つには、どうしたらいいのですか?
>hoge.txtは必要。
start /wait 7z.exe x AAA.zip -oBBB >hoge.txt
では、hoge.txtが空だし、コマンドプロンプトの窓がもう一個開くし。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)

コメント1件

635
デフォルトの名無しさん[sage]   投稿日:2016/10/09 21:25:06  ID:DFuD/t4t.net
>634
start /B /wait "" 7z.exe x AAA.zip -oBBB -y >hoge.txt
てやれば窓は開かないけど、多分実行結果はstart無しの場合と同じだろう
解凍するまで待って制御が返ってるように思えるけど
その後エラーが出るとするなら、多分OSのファイル遅延書き込みの所為だろうから
ウェイトを入れるなり何なり待たさないといけないと思うよ
コメント1件

636
デフォルトの名無しさん[sage]   投稿日:2016/10/10 09:40:47  ID:UJJq0Lfa.net
>635
ありがとうございます。
10回くらいテストして、それ「start /B /wait "" 」でいけました。

637
デフォルトの名無しさん[sage]   投稿日:2016/10/12 15:15:40  ID:CXMCNpce.net(2)
for %%a in (“*.mkv”) do ffmpeg.exe -i %%a -b:v 3000k -acodec ac3 -ar 48000 -vcodec libx264 D:\encoded\%%~na.mp4

mkvとflvを入力に使いたいです
二重ループ以外に方法ありませんかね?

638
デフォルトの名無しさん[sage]   投稿日:2016/10/12 15:33:04  ID:V1BPQ8PQ.net
`dir /b *.mkv;*.flv`をキャプチャすればいいんじゃないの
自分なら2行にコピペするがw
コメント1件

639
デフォルトの名無しさん[sage]   投稿日:2016/10/12 15:35:36  ID:CyghQ6/+.net(7)
"*.*v"
他にvが付くもの無ければ
コメント1件

640
デフォルトの名無しさん[sage]   投稿日:2016/10/12 15:38:43  ID:CXMCNpce.net(2)
>638
すみません
2行にコピペするとはどういうことですか?

>639
私も考えたのですがwmvがありました
コメント1件

641
デフォルトの名無しさん[sage]   投稿日:2016/10/12 16:07:30  ID:aOSR32QX.net
for %%a in (*.mkv *.flv) do ...

642
デフォルトの名無しさん[sage]   投稿日:2016/10/12 16:12:00  ID:YqqdfgOM.net(5)
>640
*.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
とか色々とか色々と出来るよ
コメント1件

643
デフォルトの名無しさん[sage]   投稿日:2016/10/12 16:51:21  ID:k+jI1aQa.net(5)
質問です。サブディレクトリのファイルで、0バイトのファイルだけを削除したいです。

以下のページにあるサンプルをベースに、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をつけたままです。

644
デフォルトの名無しさん[sage]   投稿日:2016/10/12 17:01:12  ID:k+jI1aQa.net(5)
すいません補足です。

>IF not "%~z1" == "0" (

これは、notがないのが正常な状態です。
なにをやっても条件が成立してしまうので、
ためしにnotをつけて、論理が反転するか試したところ、
これも全部条件が成立してしまいました。

その実験をしたときの残骸のnotが残ってしまいました。

645
デフォルトの名無しさん[sage]   投稿日:2016/10/12 17:10:16  ID:CyghQ6/+.net(7)
if %~z1==0
のように書く。==の両側にスペース入れたらダメ

646
デフォルトの名無しさん[sage]   投稿日:2016/10/12 17:14:15  ID:CyghQ6/+.net(7)
それでもダメだったら
CALL :CheckFile %%~fF
を試してみて

647
デフォルトの名無しさん[sage]   投稿日:2016/10/12 17:19:24  ID:CyghQ6/+.net(7)
IF NOT %FileAttrib:~0,1%==d
これ必要?
dir /a-d /b /s としておけば要らない

648
デフォルトの名無しさん[sage]   投稿日:2016/10/12 17:32:19  ID:k+jI1aQa.net(5)
ありがとうございます。指摘の件を全て直しましたが、ダメでした。

FOR /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 なので 削除します。
コメント1件

649
デフォルトの名無しさん[sage]   投稿日:2016/10/12 17:37:43  ID:h3rHiOkq.net
set hoge="hage te naiyo"
とやると、%hoge%でダブルクォーテーションも読み込んでしまいます
対処法教えて下さい
コメント2件

650
デフォルトの名無しさん[sage]   投稿日:2016/10/12 17:44:13  ID:X88zouZU.net
パスにスペースが入ってんじゃ?

for /f "delims=" %%i in ('dir /a-d /b /s *.*') do if %%~zi EQU 0 del "%%~fi"

651
デフォルトの名無しさん[sage]   投稿日:2016/10/12 17:46:49  ID:tJlO+qdh.net
set "hoge=hage te naiyo"

set hoge=hage te naiyo
そもそも "" でくくらない

652
デフォルトの名無しさん[sage]   投稿日:2016/10/12 17:54:18  ID:YqqdfgOM.net(5)
>648
本当にそんな表示なのか?
上の IF 1695606 == 0 ( を書いてるということはbatの展開された実行ステートメントを表示してるだけじゃないのか?
正確には
IF 1695606 == 0 (
ECHO "F:\TEST\file.txt" はファイルサイズが 1695606 で、0 なので 削除します。
REM DEL F:\TEST\file.txt
)
と4行表示されただけなんじゃないの?
それと、半角空白の存在するファイル名があったらエラーになるよ
"tokens=*"とか"delims="をつけて、引数は""で囲んで渡すようにした方がいい
(さらに^とかの文字もファイル名に含まれてる可能性があるなら引数渡しは諦めて環境変数で渡すようにする)
コメント2件

653
デフォルトの名無しさん[sage]   投稿日:2016/10/12 17:56:29  ID:CyghQ6/+.net(7)
for /f "usebackq delims=" %%F in (`dir /a-d /b /s`) do if %%~zF==0 echo %%~F
これで0バイトだけechoされるはずだと思うけど

>649
set "hoge=hage te naiyo"
コメント1件

654
デフォルトの名無しさん[sage]   投稿日:2016/10/12 18:07:46  ID:YqqdfgOM.net(5)
>649
もし何らかの理由で""を付いたままで代入しなくてはいけないのなら、その後で取ることは出来る
set hoge=%hoge:"=%
とか
set hoge=%hoge:~1,-1%
とか
まあ後者は"が付いているかどうかチェックした方がいいけど
if ^%hoge:~0,1% equ ^" set hoge=%hoge:~1,-1%

655
デフォルトの名無しさん[sage]   投稿日:2016/10/12 18:12:36  ID:CyghQ6/+.net(7)
後から外す場合はcallやforで%~1や%%~Iでも可

656
デフォルトの名無しさん[sage]   投稿日:2016/10/12 18:13:42  ID:k+jI1aQa.net(5)
>652
すみません、こちらの勘違いでした。教えていただいたコードで動きました。
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
コメント1件

657
デフォルトの名無しさん[sage]   投稿日:2016/10/12 18:31:53  ID:k+jI1aQa.net(5)
うーん・・・このバッチだと、0バイトかどうか調べる対象ディレクトリが1000個、総ファイルが10万個とか有ると、
最初のforから全然進んでくれないようです。
core-i5で10分待っても開始されず。ディスクの能力じゃ無く、BATのCPU消費率が上がります。

>653さんの書き方で、大量ファイルの処理時の挙動は変化するか、これから試してみます。
大量処理に適した書き方などがあったらご教示ください。
コメント2件

658
デフォルトの名無しさん[sage]   投稿日:2016/10/12 18:44:53  ID:YqqdfgOM.net(5)
>657
そんな大量のファイルは無いので定かではないけど、多分バッファが溢れてるんじゃないかと思う
一旦ファイルに書き出したらどうだろ?
dir /a-d /s /b>list.tmp
for /f %%F in (list.tmp) do

659
デフォルトの名無しさん[sage]   投稿日:2016/10/12 18:59:59  ID:CyghQ6/+.net(7)
10万とか処理させたこと無いけどバッチよりもPowerShell使った方が良いんじゃね?

660
デフォルトの名無しさん[sage]   投稿日:2016/10/12 19:01:10  ID:RjRHLuRO.net
>642
ありがとうございます
出来ました

それともう一つ
エンコードの進捗状況を表示する事ってできませんかね?
12/87(ファイル)みたいな感じで
コメント2件

661
デフォルトの名無しさん[sage]   投稿日:2016/10/12 20:02:06  ID:nxsWiPWy.net
forfiles使う方法も
forfiles /s /c "cmd /c if @isdir==FALSE if @fsize==0 del @file"
コメント1件

662
デフォルトの名無しさん[sage]   投稿日:2016/10/12 20:08:20  ID:IaZq30Xa.net
Windows 10 だと rd hoge /S /Q でなかなかhogeディレクトリを削除できないけど、
なにかいい方法ありますか?

663
デフォルトの名無しさん[sage]   投稿日:2016/10/12 20:19:09  ID:WWSUEmVo.net
>661
for が速いとは言わないが forfiles は輪をかけて遅いから辛いんじゃないかな

664
デフォルトの名無しさん[sage]   投稿日:2016/10/12 20:31:06  ID:YqqdfgOM.net(5)
>660
大昔DOSにあったansi.sysのようにエスケープシーケンスが使えたら可能なんだけどね
噂じゃwinsows10でエスケープシーケンスが使えるようになったとかの話もあるけど真偽のほどはどうなんだろ

665
デフォルトの名無しさん[sage]   投稿日:2016/10/13 00:46:44  ID:cRZfvb+W.net(2)
>656
以下に修正したほうがいいけど、ざっと見ただけだから他にもあるかもw

FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )

FOR /F

666
デフォルトの名無しさん[sage]   投稿日:2016/10/13 00:49:54  ID:cRZfvb+W.net(2)
FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )

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の数値比較についてはヘルプ読むべし。数字以外を含むと文字列比較になるから

667
デフォルトの名無しさん[sage]   投稿日:2016/10/13 01:11:54  ID:nRww2f6N.net(2)
>652が指摘してるけど、
もしファイル名が "a^b.txt" だったり、 "ab%cd%ed.txt" だったりしたらエラーになると思う
コメント1件

668
デフォルトの名無しさん[sage]   投稿日:2016/10/13 02:20:45  ID:9ieIMwqB.net(2)
>657
FOR /R %%F IN (*.*) DO ( CALL :CheckFile %%~fF )

にしたらマシになる?
コメント1件

669
デフォルトの名無しさん[sage]   投稿日:2016/10/13 02:28:09  ID:9ieIMwqB.net(2)
あ、折角指摘が出てたのに修正漏れ

%%~fF → "%%~fF"

670
デフォルトの名無しさん[sage]   投稿日:2016/10/13 02:30:01  ID:nRww2f6N.net(2)
>668
本来の目的だった半角空白のことを忘れたんか

671
デフォルトの名無しさん[sage]   投稿日:2016/10/13 08:14:45  ID:CLiojDhV.net
>667
そんなのまで対応しないといけないなら vbs とか PowerShell にした方がいいと思う

672
デフォルトの名無しさん[sage]   投稿日:2016/10/13 19:02:37  ID:tpWzBOlc.net
call するなら環境変数で渡せば問題ない
つうか直接に del すりゃいいだけだろ

for /r %%i in (*) do if %%~zi == 0 del "%%~fi"

ファイル名に ^ とか % とか ユニコード特有文字とか有っても問題ない
あと、==の両側にスペースがダメとか意味不明

673
デフォルトの名無しさん[sage]   投稿日:2016/10/13 23:49:13  ID:BSlfrai+.net
for %%a in (*hoge.txt) do 〜

この場合、ファイル名がaiueohoge.txtだった場合、aiueoだけを抜き出す方法有りませんか?
%%~naみたいな演算子?でお願いします

674
デフォルトの名無しさん[sage]   投稿日:2016/10/14 01:11:11  ID:Ep7xlThW.net(2)
>%%~naみたいな演算子?でお願いします
無理
一旦環境変数に入れて置換でhoge.txtを消し残りを取り出す事%fname:hoge.txt=%や
%fname:~0,-8%なら可能
set fname=%%~na
echo %fname:~0,-4%

675
デフォルトの名無しさん[sage]   投稿日:2016/10/14 03:21:39  ID:onADalnL.net(2)
@echo off
set

676
デフォルトの名無しさん[sage]   投稿日:2016/10/14 03:24:46  ID:onADalnL.net(2)
set "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 echo "%%c:~0,%b%%%"
コメント2件

677
デフォルトの名無しさん[sage]   投稿日:2016/10/14 20:38:01  ID:YifyNonQ.net(2)
ありがとうございます

set

678
デフォルトの名無しさん[sage]   投稿日:2016/10/14 20:40:05  ID:YifyNonQ.net(2)
"ありがとうございます

set "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だけ抜き出したい場合はどうすればいいんでしょうか
コメント2件

679
デフォルトの名無しさん[sage]   投稿日:2016/10/14 22:54:24  ID:+Ryxbx0f.net(2)
>678
call echo %%c:~0,%b%%%
は環境変数の遅延展開を使わず展開させる方法だから、別の処理で置き換えるなら、
HOGE !c:~0,%b%!
のように!記号でくくる方向で(call foo はどのコマンドでも使えるわけではないため)
ファイル名の抜き出しは、パラメーターで調整できると思う
バッチパラメーターについては「call /?」あたりから

680
デフォルトの名無しさん[sage]   投稿日:2016/10/14 23:02:08  ID:+Ryxbx0f.net(2)
ID違うからわかると思うけど、>676とは別人なのであしからず(言い忘れすまそ)

681
デフォルトの名無しさん[sage]   投稿日:2016/10/14 23:39:49  ID:Ep7xlThW.net(2)
>aiueohoge.txtだった場合、aiueoだけを抜き出す方法有りませんか?
>676が示してくれただけで
>HOGEに処理を入れ、"%%c:~0,%b%%%"をファイル名として使えばいいんですかね?
そんな質問されてもファイル名として使うのかどう処理するのかとか分かる訳ねーだろ
aiueoをリネームに使うのか?何がしたいのか分からん事には答えようがない

682
デフォルトの名無しさん[sage]   投稿日:2016/10/15 00:10:29  ID:GrBj6Sia.net
>678 質問の意図がよく分からん

set "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"

683
デフォルトの名無しさん[sage]   投稿日:2016/10/15 23:20:33  ID:DDtj3KwG.net
バッチ初心者です。
Windowsのタスクで指定時間した時間になったら、バッチファイルで指定した常駐ソフトを再起動(終了→起動)させたいのですが、
taskkill /f /im app.exe
start /MIN "" "C:\app.exe"
のようにして最小化(/MIN)で起動するようにすると、そのソフトは何故かウインドウのスクロールバーが何故か消えてしまいます。
なので一旦アクティブで起動させてスクロールバーを表示させてから最小化したいのですが、方法がわかりません。
taskkill /f /im app.exe
start "" "C:\app.exe"
で起動させたあと、アクティブなapp.exeをコマンドで最小化する方法があったら教えてください。
よろしくお願いします。

684
デフォルトの名無しさん[sage]   投稿日:2016/10/16 06:33:42  ID:e+WiyjQC.net
バッチにそんな機能はない
ahkなら
IfWinExist ahk_exe app.exe
   WinMinimize

685
672[sage]   投稿日:2016/10/16 10:52:23  ID:lNEScQ2P.net
抽象的な事を言って困らせてすみません
何をやりたいのかと言うと、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としたかったのです
コメント1件

686
デフォルトの名無しさん[sage]   投稿日:2016/10/16 17:03:52  ID:z1QBGf3F.net
>660
set /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
)
コメント1件

687
デフォルトの名無しさん[sage]   投稿日:2016/10/16 19:44:42  ID:l/p5e+57.net
>685

set "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"
コメント1件

688
デフォルトの名無しさん[sage]   投稿日:2016/10/16 21:03:50  ID:cWFHk7WJ.net
>686
コントロールコードを挿入できない人用
set bs=[BS]
  ↓
for /f "delims=0" %%I in ('cmd /u /c echo 〈') do set bs=%%I

689
その1[sage]   投稿日:2016/10/18 10:49:49  ID:492hutXa.net(3)
サーバサービスの起動条件がスタートアップ状態が自動でありながら
開始になっていないものをバッチで出力したい

とりあえず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
(以下 略)

690
その2[sage]   投稿日:2016/10/18 10:50:03  ID:492hutXa.net(3)
そしてサービスのスタートアップ状態を調べるには
sc qc [サービス名]で表示される
sc \\HOGE qc AeLookupSvc |findstr "SERVICE_NAME START_TYPE"

この2つを組合せればフルオートで起動条件がスタートアップ状態が自動でありながら
開始になっていないものを出せるはずなんだが
「SERVICE_NAME:」←これが邪魔なんだ
教えてエロい人

これが消せたら下記でフルオートできるはず
@for /F %%=a in ('hoge.txt') do (
sc \\HOGE qc %%a
)

691
デフォルトの名無しさん[sage]   投稿日:2016/10/18 12:27:03  ID:6Un6ctsT.net
for /f "tokens=1*" %%A in (hoge.txt) do echo %%B

692
デフォルトの名無しさん[sage]   投稿日:2016/10/18 12:44:29  ID:oqQNu1fO.net(5)
for /f

693
デフォルトの名無しさん[sage]   投稿日:2016/10/18 12:46:48  ID:oqQNu1fO.net(5)
for /f "usebackq tokens=2*" %%a in ("hoge.txt") do sc \\HOGE qc %%a

694
デフォルトの名無しさん[sage]   投稿日:2016/10/18 12:59:57  ID:oqQNu1fO.net(5)
"tokens=1*" %%b が正しい

695
デフォルトの名無しさん[]   投稿日:2016/10/18 13:04:01  ID:492hutXa.net(3)
面目ない、誤解させてしまったかも
オイラが知りたいのは

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
(以下 略)

696
デフォルトの名無しさん[sage]   投稿日:2016/10/18 13:39:39  ID:oqQNu1fO.net(5)
for /f "tokens=1*" %%a in ('sc \\HOGE query state^=inactive ^| find "SERVICE_NAME"') do echo %%b >>hoge.txt
コメント2件

697
デフォルトの名無しさん[sage]   投稿日:2016/10/18 13:41:17  ID:l1RYXy70.net(3)
サービス扱うならPowerShellの方が楽でいいよ。
バッチから呼ぶならこんな感じ。
powershell -command

698
デフォルトの名無しさん[sage]   投稿日:2016/10/18 13:44:58  ID:l1RYXy70.net(3)
ダブルクオーテーション使うとそこで切れるんだけど書き込めてる人との違いってなんなんだろう
コメント1件

699
デフォルトの名無しさん[sage]   投稿日:2016/10/18 13:49:59  ID:l1RYXy70.net(3)
powershell -command ”Get-Service | ?{$_.StartType -eq 'Automatic' -and $_.Status -eq 'Stopped'}”

700
デフォルトの名無しさん[sage]   投稿日:2016/10/18 13:51:45  ID:flBcMs6G.net
てすと
powershell -command "Get-Service | ?{$_.StartType -eq 'Automatic' -and $_.Status -eq 'Stopped'}"

701
デフォルトの名無しさん[sage]   投稿日:2016/10/18 13:52:36  ID:UJ1l7XRj.net(3)
setlocal enabledelayedexpansion
for /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
)

702
デフォルトの名無しさん[sage]   投稿日:2016/10/18 17:21:44  ID:IWtXyw3/.net(2)
ありがとうございます
早速試してみたのですが・・・

まずパワーシェルの方は「$_.StartType -eq 'Automatic'」これが効かないようです
(「$_.Status -eq 'Stopped'」こちらは効いてます)

バッチの方は1件目の「WwanSvc」だけで終ってしまうようです

703
デフォルトの名無しさん[sage]   投稿日:2016/10/18 17:24:37  ID:XKgIhtEU.net
バッチファイルってWindowsタブレットで使える?

704
デフォルトの名無しさん[sage]   投稿日:2016/10/18 17:25:51  ID:IWtXyw3/.net(2)
大事な事を忘れてました

CL:Windows7プロ SP1(32bit)6.1.7601
SV:WindowsSV 2008R2 SP1(64bit)

705
デフォルトの名無しさん[sage]   投稿日:2016/10/18 17:59:25  ID:oqQNu1fO.net(5)
>「WwanSvc」だけで終ってしまう
>hoge.txtと上書きしてるんじゃ?>>hoge.txtと追記になってる?
コメント1件

706
デフォルトの名無しさん[sage]   投稿日:2016/10/18 20:40:09  ID:UJ1l7XRj.net(3)
アウチ!
ミスってた

>705の通り。695追記になってない

×echo;!name:~1!>hoge.txt
〇echo;!name:~1!>>hoge.txt

707
デフォルトの名無しさん[sage]   投稿日:2016/10/18 22:14:57  ID:N6eA0nOq.net(2)
なるほど、追記になってなかったんですね
ただ、今度は同じサービス名が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

708
デフォルトの名無しさん[sage]   投稿日:2016/10/18 22:41:11  ID:UJ1l7XRj.net(3)
type nul>hoge.txt
setlocal 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
)
)
コメント1件

709
デフォルトの名無しさん[sage]   投稿日:2016/10/18 23:32:59  ID:N6eA0nOq.net(2)
>708
成功しました
カッコの有無でなんでこんなに違うんだろうと不思議です

710
デフォルトの名無しさん[sage]   投稿日:2016/10/19 01:04:29  ID:OIm1eZAK.net
何がマズイっていうと
”SERVIE_NAME”がある行でサービス名を取得するまではよかったが
それが無い行でも前に取得したサービス名を出力するようになってたんだわな
1つのサービスに付いて8行情報があったから8行ずつ出力されてた…と

711
デフォルトの名無しさん[sage]   投稿日:2016/10/19 01:12:10  ID:cKBmHXZY.net
そんな回りくどい事しなくても>696で出来んじゃん

712
デフォルトの名無しさん[SAGE]   投稿日:2016/10/19 07:11:53  ID:Jbfd2Dlj.net
>696は一瞬コマンド窓が開くだけで動かなかったのです

713
デフォルトの名無しさん[sage]   投稿日:2016/10/19 07:56:59  ID:OiCCOICb.net
>698
2chのバグだろ

書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" を、\" とエスケープすれば、どうかな?

714
デフォルトの名無しさん[sage]   投稿日:2016/10/19 12:52:41  ID:nMHfZfYD.net
&#34; と文字参照を使って書き込めばいいのでは?
結果として " となるはず。

715
694[sage]   投稿日:2016/10/19 13:03:34  ID:fhJbq8nW.net
JaneXenoでは特別な事しなくても書き込めた

716
デフォルトの名無しさん[sage]   投稿日:2016/10/20 18:11:41  ID:fyY9mWCP.net
いっつもStyleで書いてるけど"で切れたことなど一度もないけどなあ

717
デフォルトの名無しさん[sage]   投稿日:2016/10/20 18:13:00  ID:1rA0OcU3.net
>687
遅くなってすいません
無事動きました
ありがとうございます

718
デフォルトの名無しさん[sage]   投稿日:2016/10/20 19:03:20  ID:LBhOxlVJ.net
ダブルクオーテーションで切れるのこれっぽい。
シェルスクリプト総合 その25 /UNIX板
自分も確かにこのケースだった。

719
デフォルトの名無しさん[sage]   投稿日:2016/11/02 06:03:13  ID:CHmLMhVd.net
バッチファイル終了のお知らせ

“Microsoft Flow”が正式公開。さまざまなサービスを組み合わせた自動処理が可能 - 窓の杜
http://forest.watch.impress.co.jp/docs/news/1027809.html
コメント1件

720
デフォルトの名無しさん[sage]   投稿日:2016/11/02 06:40:56  ID:w2Q1/JQP.net
アイデアは良いと思うが

>さまざまなアプリやサービスを組み合わせた自動処理を作成できるクラウドサービス“Microsoft Flow”を正式公開した。
>“Microsoft Flow”は“○○したら××する”といった一連の手続き(ワークフロー)をビジュアルでデザインし、自動実行できるサービス
>料金は1ユーザー1カ月あたり750回までの実行であれば無料。有償プランであれば実行回数が増える

回数制限で有料とかゴミすぎ

721
デフォルトの名無しさん[sage]   投稿日:2016/11/02 09:32:20  ID:5fVzD+K5.net
こんなのは華や茶の流派と同じで新しいのがでても統合などされることは無いんだよね

722
デフォルトの名無しさん[sage]   投稿日:2016/11/02 23:59:36  ID:WEv5cQ3m.net
>719-720
ワークフローなんか各社から出てるじゃん。

723
デフォルトの名無しさん[sage]   投稿日:2016/11/04 00:14:32  ID:0ODaAY82.net
そういうのってネットに繋いでない時にも必要なのにクラウドサービスって
しかも有料って

724
デフォルトの名無しさん[sage]   投稿日:2016/11/04 01:47:32  ID:DvwqGnEZ.net
完全にスタンドアロンで放置して動かすときにクラウドなんて使ってられない

725
デフォルトの名無しさん[sage]   投稿日:2016/11/10 06:45:58  ID:+oUm9x6Y.net
TidyTabs Window Manager: give every program a tabbed user interface
http://www.nurgo-software.com/products/tidytabs

726
デフォルトの名無しさん[sage]   投稿日:2016/11/11 12:54:54  ID:ZYU/THNy.net
batファイルをつくりたいのですが、どのようにすればいいでしょうか
全くの初心者なのでヒントが欲しいです

目標としては、

親フォルダAの中に、子フォルダ[aaa]あああ、[aaa]いいい、[bbb]ううう

があります

 [aaa]あああ)の[ ]内の文字(つまりaaa)を自動で取得し、その名前の新規フォルダを作成。(つまりaaaという名前の新規フォルダ)

△修慮紂⊃謄侫ルダA内の[aaa]が入っているフォルダを検索する

△埜〆された複数フォルダを,悩鄒されたフォルダに入れる

という流れを自動で行いたいです
コメント1件

727
デフォルトの名無しさん[sage]   投稿日:2016/11/11 14:42:02  ID:OyxHpcMK.net(2)
>726
親フォルダを引数で渡すとしての一例
@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
コメント4件

728
デフォルトの名無しさん[sage]   投稿日:2016/11/11 15:12:14  ID:p31+l1cx.net
>727
最初のforは/dつけないとだめでは
コメント3件

729
デフォルトの名無しさん[sage]   投稿日:2016/11/11 15:56:59  ID:OyxHpcMK.net(2)
おおー、フォルダだったのか
てっきりファイルだと思い込んでたよ

730
デフォルトの名無しさん[]   投稿日:2016/11/13 18:37:37  ID:cer+jHW2.net(2)
質問させていただきます
初めてバッチファイル、コマンドプロンプトを勉強して作っているのですが、HTMLページから特定のURLを抜き出してバッチファイルに代入したいのですが、その場合はWSH等で抜き出さないと出来ませんでしょうか
コメント1件

731
デフォルトの名無しさん[sage]   投稿日:2016/11/13 20:15:27  ID:YAp+h9P5.net
>730
HTMLページって具体的に何?
コメント1件

732
デフォルトの名無しさん[sage]   投稿日:2016/11/13 20:16:08  ID:vGjlz1Ep.net
そんな大雑把過ぎる質問では最適解など分かるはずもなくレスつかないよ
PowerShell使ったら?
コメント1件

733
デフォルトの名無しさん[sage]   投稿日:2016/11/13 20:19:41  ID:cer+jHW2.net(2)
>731
OPENREC.tvという動画サイトです
ここから動画ファイルのURLを吸い出して、エンコソフトをコマンドプロンプトに直接代入したいと思いまして・・・

>732
すみません、この手の事は不慣れで・・・
PowerShellというものを初めて知りましたので、調べてみます
コメント3件

734
デフォルトの名無しさん[sage]   投稿日:2016/11/13 23:00:08  ID:BL+CTUiW.net
手段の前にまず手順を具体的に整理して見るといい

要件についてまったく何も知らない他人に
全部手作業でやってもらうよう依頼するとしたらどう説明する?

735
デフォルトの名無しさん[sage]   投稿日:2016/11/14 01:02:54  ID:csZc9y3a.net
松岡修造みたいにすると思う。

736
デフォルトの名無しさん[sage]   投稿日:2016/11/14 13:10:56  ID:vvHHVAL2.net
バッチなんて所詮手作業を自動化するだけ

ここでは手作業を自動化するのを支援することは出来るが
手作業で出来ないor内容がわかってない人はどうしようもない

737
デフォルトの名無しさん[sage]   投稿日:2016/11/14 14:36:44  ID:O1UQmJEN.net
>733
1.PowerShellで.NETFramework使う
2.PythonやRubyなんかのllを使う
3.C#で簡単プログラミング
さあ選べ
コメント1件

738
デフォルトの名無しさん[sage]   投稿日:2016/11/14 15:07:34  ID:WHs7zj8I.net
この場合は、バッチファイルにて
htmlを取得して、url文字列を抜き出して、エンコソフトにオプション渡し
ができるのか?、という問いなので、さあ答えは
コメント2件

739
デフォルトの名無しさん[sage]   投稿日:2016/11/14 15:27:55  ID:bnBDmUvf.net
>733
そこのサイトは知らんけど
>動画ファイルのURLを吸い出して
なんて書いてるけど今時動画ファイル直リンなんてあるの?手段すら分かってないんじゃない?
この手の技術に明るくないのであれば既存ソフトを用いてUWSCやAHKで自動化が現実的だと思う
rtmpdumpみたいなcuiソフトがそのサイトで使えるならバッチで出来ると思うが
コメント1件

740
デフォルトの名無しさん[sage]   投稿日:2016/11/14 15:29:20  ID:9SfC86lS.net
動画サイトって普通ストリームじゃないの?
URLからダウンロード、エンコって、まず手作業でどういう手順で行うのか説明してくれないと
wshやPowershellでだって出来るかどうかも答えられないよ
コメント1件

741
デフォルトの名無しさん[sage]   投稿日:2016/11/14 19:02:24  ID:GWnO6+Yj.net(4)
>737
4のperlで・・・

>738
まさしくそういう事です

>739
ようはライブストリーミング動画が鯖側に保存してあって、それを録画再生するようなイメージです
それを、ffmpegというcuiソフトを使いtsファイルにしています

>740
今までは動画ページからm3u8形式の格納されてるURLをソースから引っ張ってきて、ffmpegを使いtsファイルにしていました
その一連の動作が面倒なので、動画ページのURLを貼り付けるだけで動画ページのソースからm3u8ファイルのURLを検索→ffmpegにm3u8ファイルのURLと動画ファイル名をコマンドに代入し、そのままソフトを走らせるというバッチファイルを作りたいと思っております
コメント3件

742
デフォルトの名無しさん[sage]   投稿日:2016/11/14 19:40:40  ID:kXxSR+Dw.net
>741
人に聞くならまず正しい日本語で頼む

> 今までは動画ページからm3u8形式の格納されてるURLをソースから引っ張ってきて

君には動画ページとかソースが何者かがわかってるんだろうけど、他の人にはそれが何者なのか?どこから与えられるのか?とか全然わからない

743
デフォルトの名無しさん[sage]   投稿日:2016/11/14 20:28:41  ID:8ZP1uHGR.net
>741
その動画サイトとやらを教えられない理由があるなら
先に説明しておく方が親切だよ

744
デフォルトの名無しさん[sage]   投稿日:2016/11/14 20:35:09  ID:GWnO6+Yj.net(4)
>733でも書いた通り、openrec.tvというサイトです
動画ページはどこを見ても同じソースだと思うので深く考えず、URLを載せなかっただけですがやはり載せた方がよろしいでしょうか?

divタグ内に変数で各情報が載っておりますが、そこは重要ではなく>738が仰ってる通りです

745
デフォルトの名無しさん[sage]   投稿日:2016/11/14 20:51:56  ID:sZZGpXNZ.net(4)
>741
普段使いのcURLというCUIなダウンローダーで試した、使いたいツールがあるならお好みでどぞ
https://curl.haxx.se/
https://bintray.com/artifact/download/vszakats/generic/curl-7.51....
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
ここまで
コメント1件

746
デフォルトの名無しさん[sage]   投稿日:2016/11/14 20:56:46  ID:sZZGpXNZ.net(4)
すまそ、goto先がすっぽ抜けてた

中略
echo ffmpeg -c copy "%TITLE%.ts" -i "%TARGET%"
pause
exit

:ERROR
echo 引数が無効のため処理できませんでした
pause
exit
ここまで

747
デフォルトの名無しさん[sage]   投稿日:2016/11/14 21:08:57  ID:nGSer73d.net
curlってすごく便利なコマンドがあったね
連番ファイルとか今までperlやbashでスクリプト書いてたのがアホらしい

748
デフォルトの名無しさん[sage]   投稿日:2016/11/14 21:15:57  ID:sZZGpXNZ.net(4)
>745
追伸、安全対策としてcurl処理のすぐ下に条件分岐も追加しておいてほしい

@rem HTMLダウンロード
curl -L --max-redirs 10 -R -O %ADDR%
if not %ERRORLEVEL%==0 goto ERROR

749
デフォルトの名無しさん[sage]   投稿日:2016/11/14 21:28:24  ID:GWnO6+Yj.net(4)
おお、サンクスです・・・

が、一つわがままを言わせてもらうとやっぱり外部バイナリなりを使わないと出来ないですか・・・
どのPCでもすぐに使えるようにしておくと楽だなーと思ったのがきっかけだったので・・・
コメント1件

750
デフォルトの名無しさん[sage]   投稿日:2016/11/14 21:35:57  ID:4gwDzXsT.net(2)
そもそもffmpeg使う時点で外部バイナリ必須では?
それでも外部バイナリに頼らないでhttpダウンロードしたいっていうのなら
bitsadmin /transferって手がなくはないけど

751
デフォルトの名無しさん[sage]   投稿日:2016/11/14 21:37:40  ID:sZZGpXNZ.net(4)
>749
bitsadmin.exe があるけど、拡張子がないサイトだと無理っぽかった、俺環かもだが
試してダメだったためcurlに書き換えた
コメント1件

752
デフォルトの名無しさん[sage]   投稿日:2016/11/14 21:38:23  ID:GWnO6+Yj.net(4)
なんというか、インストール不要であるのが理想的だなと・・・
それで、一時はWSHでjavascriptでHMTLをダウンロードしようかと考えていました

753
デフォルトの名無しさん[sage]   投稿日:2016/11/14 21:58:48  ID:4gwDzXsT.net(2)
>751
それは知らなかった
そうすると後はPowerShellとか
powershell -C "$h = Invoke-WebRequest http://example.com; $h.Content"

754
デフォルトの名無しさん[sage]   投稿日:2016/11/15 08:29:35  ID:bLa91iv6.net
vbsでhttpすればいいんじゃね

755
デフォルトの名無しさん[sage]   投稿日:2016/11/16 04:24:03  ID:tgJZOdTt.net(4)
dir /ad /b /s "abc"
サブディレクトリ含め"abc"フォルダのパスを列挙したかったんだけど
子に"abc"がある時と無い時で挙動が全く変わる
子に"abc"が無ければ望み通りの結果になるけど
子に"abc"があるとそこで dir /ad /b /s されて全てのディレクトリが列挙される
"*abc"だと"zabc"も出て来るし
"*\abc"や"C:\TEST\*\abc"は構文error
if exist "abc" で例外処理しないとダメ?
何かサクッと出来る方法があるならお願いします

756
デフォルトの名無しさん[sage]   投稿日:2016/11/16 05:28:34  ID:g04DIhTd.net

757
デフォルトの名無しさん[sage]   投稿日:2016/11/16 06:28:47  ID:tgJZOdTt.net(4)
>756
それやると何故かカレントディレクトリは C:\TESTなのに (echo %cd% で確認)
ドライブ全体から検索してるのか C:\Users や C:\Program Files 配下の abcディレクトリまで表示されるんだけど Win10

758
デフォルトの名無しさん[sage]   投稿日:2016/11/16 09:56:14  ID:l4m+U27H.net
こういうこと?
dir /ad /s /b | findstr /r \abc$
コメント1件

759
デフォルトの名無しさん[sage]   投稿日:2016/11/16 16:58:26  ID:tgJZOdTt.net(4)
>758
dir /ad /b /s | findstr /r "\\abc$"
これで行けそうかな。ありがとう


/s スイッチの時フルパスで無ければ強制的にディレクトリ名orファイル名と見做してくれればいいのに
子にあると対象パスの省略形と見なし、無ければ検索するディレクトリ&ファイル名になるとか罠もいいところだわ
dir /ad /b /s "\abc"
これだとカレントディレクトリが無視されてドライブ全体?からabcフォルダが検索されるんだけど理由が分かる人が居たら教えて下さい
コメント3件

760
デフォルトの名無しさん[sage]   投稿日:2016/11/16 19:53:01  ID:G/QgDslQ.net(2)
>759

for /r %%i in (.) do if "%%~nxi" == "abc" echo "%%~fi"

\abc みたいに先頭に \ があるとそれはルートを示すんだよ
DOS の頃から同じ仕様なんだけど
コメント1件


761
デフォルトの名無しさん[sage]   投稿日:2016/11/16 20:29:10  ID:G/QgDslQ.net(2)
>760

ABC とか Abc とか abC とか有ったら /i を追加

for /r %%i in (.) do if /i "%%~nxi" == "abc" echo "%%~fi"

762
デフォルトの名無しさん[sage]   投稿日:2016/11/16 20:36:19  ID:tgJZOdTt.net(4)
dir /ad /b /s | findstr /r "\\%name%$"
てな場合nameの末尾にスペースが入ると意図した結果にならず
dir /ad /b /s | findstr /e "\%name%" で解決出来ました

>759
for /r とif での方が間違いが無さそうですね。ありがとう
"\abc" は、まず dir /ad /b /s "C:\abc" とドライブ省略形の対象ディレクトリと見做して
対象が無ければ検索するディレクトリ名&ファイル名として扱われている感じなのかな

763
デフォルトの名無しさん[sage]   投稿日:2016/11/16 22:35:57  ID:fww2Eit8.net
いままでdir /sのディレクトリ指定は開始位置を指定するもんだとばかり思ってたけど違うんだな
指定ディレクトリが存在してたらこの通りで他のディレクトリの下は対象外なんだが
存在しないと他のディレクトリの下へ探しにいくんだな
気をつけないといけないな

実行速度は遅いだろうが
forfiles -s -mabc -c"cmd /c if @ISDIR==TRUE echo @PATH\@FILE"

764
デフォルトの名無しさん[sage]   投稿日:2016/11/17 01:33:10  ID:45hMt1B7.net
>759
dir .\abc /ad /b /s
カレント配下ならドット付けとくんじゃないの

765
デフォルトの名無しさん[sage]   投稿日:2016/11/17 01:41:34  ID:3AVvQ2An.net
DOS/Windowsでは、単にabcとするのが普通で.\abcとは書かないかな
コメント1件

766
デフォルトの名無しさん[sage]   投稿日:2016/11/18 00:23:10  ID:MVrqW6/3.net(2)
さらに複数パターンの一致を検出してみる

for /r /d %%i in ("abc.*" "xyz.*") do if "%%~xi"=="" echo "%%~fi"
コメント1件

767
デフォルトの名無しさん[sage]   投稿日:2016/11/18 05:45:03  ID:aprTvklx.net
>765
は?

768
デフォルトの名無しさん[sage]   投稿日:2016/11/18 07:12:41  ID:MVrqW6/3.net(2)
フォルダに拡張子が無いとしたら
dir /ad /b /s abc.*
で良さそう
コメント1件

769
デフォルトの名無しさん[sage]   投稿日:2016/11/18 15:43:00  ID:MssNdFsD.net(4)
>766
>768
"abc.*"だと"abc."が最低条件になって"abc"は除外されるものだと思ってたけど"abc"も出てくるね
実際は末尾"."のフォルダは作れないから拡張子の付いているフォルダしか出ないと思ってた
なんで???"."て特殊なの?ちょっと目からウロコ

770
デフォルトの名無しさん[sage]   投稿日:2016/11/18 16:29:03  ID:TqE/rt71.net(5)
もともとドットは拡張子の区切り記号だったわけで
abc. = abc
Windowsになって複数のドットも付けられるようになったが
ドット2つ使うとファイル管理領域も2倍使う結果に

771
デフォルトの名無しさん[sage]   投稿日:2016/11/18 16:44:12  ID:MssNdFsD.net(4)
拡張子の区切り記号なのは分かるけどそれが
abc.==abc
となる理由が分からない
ドットが区切り記号だからファイル名(文字列)と見做さず比較の際に無視されるとかなのかな?

772
デフォルトの名無しさん[sage]   投稿日:2016/11/18 16:52:38  ID:TqE/rt71.net(5)
ファイル管理領域は、ファイル名部分と拡張子部分とに分かれており
ドットはその管理領域のどこにも書き込まれない
単に区分けする識別子の役割りしか持たない
つまり、管理上は、ファイル名=abc,拡張子=NULLってなってる
だからabc.とabcの見分けは付かない
エクスプローラでファイルをabc.で作成したってabcファイルが作られるだけ
コメント2件

773
デフォルトの名無しさん[sage]   投稿日:2016/11/18 17:06:48  ID:TqE/rt71.net(5)
なんか勘違いしてた気がする
LFNではドットもそのまま入ってる

774
デフォルトの名無しさん[sage]   投稿日:2016/11/18 17:12:57  ID:MssNdFsD.net(4)
>772
>ドットはその管理領域のどこにも書き込まれない
>管理上は、ファイル名=abc,拡張子=NULL
>だからabc.とabcの見分けは付かない
詳しい説明をありがとうございます
納得出来ました。もうなんと言って良いのやら
ひとつ理解が深まりました。ドラクエのレベルアップの音が鳴り響いた気分です

775
デフォルトの名無しさん[sage]   投稿日:2016/11/18 17:24:08  ID:MssNdFsD.net(4)
コマンド側が古い仕様を引き摺ってると判断しておきます

776
デフォルトの名無しさん[sage]   投稿日:2016/11/18 18:07:23  ID:TqE/rt71.net(5)
おそらくコマンドやエクスプローラは、最後のドットに特別な意味(拡張子)を持たせて
ドットだけなら削除する仕様なんだろう

777
デフォルトの名無しさん[sage]   投稿日:2016/11/18 21:00:10  ID:TqE/rt71.net(5)
ピリオドと半角空白には色々と罠があるかも
md aaa
cd "aaa....."
md "abc. . . " (エクスプローラでのフォルダ・ファイル作成も同じ)
dir "abc.."
dir "abc..."(abc..とは異なる結果に)

778
デフォルトの名無しさん[sage]   投稿日:2016/11/19 03:25:52  ID:JjiTnU56.net
#!/bin/bash
# すれ違いですまないが

apt-get moo #に見えてきた

echo "Enter to Exit"
read wait

779
デフォルトの名無しさん[sage]   投稿日:2016/11/19 04:02:30  ID:6BFx2XsN.net
すれ違い杉

780
デフォルトの名無しさん[sage]   投稿日:2016/11/19 10:40:41  ID:I/7/X0k0.net
 ケイン・コスギ
 英才・出木杉
 ・・・・板違い

781
デフォルトの名無しさん[sage]   投稿日:2016/11/19 11:47:06  ID:HaGDkE41.net
>772-773
合ってるよ
短い名前(いわゆる 8.3形式)ではカレントディレクトリの "." と ".." を除いて "." は記録されない
https://ja.m.wikipedia.org/wiki/8.3%E5%BD%A2%E5%BC%8F
LFN ではそのまま Unicode で記録される

782
デフォルトの名無しさん[sage]   投稿日:2016/11/20 01:32:41  ID:5hQ1kNDg.net
%random% って代入すると機能を失って、クリアするとまた復活するのね。
一時変数の名前に使うとちょっと便利かも
コメント1件

783
デフォルトの名無しさん[sage]   投稿日:2016/11/20 08:06:59  ID:plO26YRe.net
777

784
デフォルトの名無しさん[sage]   投稿日:2016/11/20 22:07:31  ID:mYrLDeuJ.net
>782
バグの元だろ

785
デフォルトの名無しさん[sage]   投稿日:2016/11/21 02:59:43  ID:bNk8tUAy.net
%errorlevel%とか%date%に代入するとかもやりそうな気配
コメント1件

786
デフォルトの名無しさん[sage]   投稿日:2016/11/21 18:40:20  ID:1UsqdqxT.net
win10が時期アプデでコマンドラインシェルをデフォルトから格下げだってさ。えらいこっちゃ

fossBytesに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/
コメント1件

787
デフォルトの名無しさん[sage]   投稿日:2016/11/21 19:58:33  ID:4eyhD8wV.net
>786
まあそろそろいいかなって思うわ
慣れれば PowerShell めっちゃ便利やし

788
デフォルトの名無しさん[sage]   投稿日:2016/11/22 16:32:55  ID:OivDuOyC.net
>785
おもしろい、どうなるのだろう

789
デフォルトの名無しさん[sage]   投稿日:2016/11/23 04:53:34  ID:lMEr/SWa.net
%参照は上書きの値、if errorlevel文には set errorlevelしても無効
set errorlevel=5 などバッチ内で errorlevelを自分で設定する場合は if errorlevel文は使えない
if %errorlevel% GEQ 1 などであれば可

790
デフォルトの名無しさん[sage]   投稿日:2016/11/23 09:54:12  ID:pZmHnyz7.net
WindowsPEも起動したらPowershellで始まるの?
最新のヤツでもマトモに動かせないのに

791
デフォルトの名無しさん[sage]   投稿日:2016/11/24 00:02:10  ID:b21vlpof.net
>727>728
ありがとうございます
返信遅くなりました

ただ、せっかくヒントを頂いたのですが、想像より自身のレベルに見合わないスクリプトでした。実際につくるのは先になりそうです……
コメント1件

792
デフォルトの名無しさん[sage]   投稿日:2016/11/24 00:50:33  ID:aisAFXaT.net
>791
>727-728 はヒントじゃなくて720の要件の全部だぞ
721をbatで保存してそのbatに親フォルダAをドロップすれば720の通りになる
コメント1件

793
デフォルトの名無しさん[sage]   投稿日:2016/11/26 00:47:02  ID:61EwoExF.net
>727>728>792
ありがとうございます!できました
>728の方が言っていた直しが正しく行えなかっただけでした
皆さん本当にありがとうございます

自分で書けるようにもなりたいのですが、皆さんどのようにバッチファイルを学んだのでしょうか
サイトなどを回ってもなかなか進まなくて……

794
デフォルトの名無しさん[sage]   投稿日:2016/11/26 02:10:39  ID:CoCq2KiG.net
for /?
set /?
この二つ読んでわからないところをぐぐる
コメント1件

795
デフォルトの名無しさん[sage]   投稿日:2016/11/26 04:48:01  ID:0eLSGHGV.net
「バッチ 入門」でググって出て来るページを読む
コマンド一覧を載せてるサイトを見てどんなコマンドがあるのか一通り目を通す(暗記までする必要なし)
/?でヘルプ見ながら書いて一つ一つ試す
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"
フォルダ作成&移動

"[]あああ"なんてのがあると想定していない"あああ"フォルダに移動になるから注意ね

796
デフォルトの名無しさん[sage]   投稿日:2016/11/27 09:52:07  ID:mLcTWF4w.net(3)
おはようございます。
同一フォルダ内にある複数ファイル
a.jpg、あ.jpg、1.jpg等を一括で001-a.jpg、002-あ.jpg、003-1.jpgに連番を付加する
batファイルを教えて下さい!

797
デフォルトの名無しさん[sage]   投稿日:2016/11/27 11:17:31  ID:2v7FHJZn.net(3)
a,あ,1の順序付けにどういう規則をつけるの?
普通の昇順降順ではこの順番にならないけど

798
デフォルトの名無しさん[sage]   投稿日:2016/11/27 11:19:13  ID:mLcTWF4w.net(3)
紛らわしくてすいません。
普通の昇降順でお願いします。

799
デフォルトの名無しさん[sage]   投稿日:2016/11/27 11:33:53  ID:2v7FHJZn.net(3)
こういうのって結構難しいんだよね
例えば、
a.jpgと001-a.jpgの二つのファイルがあったら
先に001-a.jpgをリネームして001-001-a.jpgにしないと
ファイル名が重複してリネームできなくなるし
(さらに001-001-001-a.jpgがあったりすると...)
コメント1件

800
デフォルトの名無しさん[sage]   投稿日:2016/11/27 11:57:08  ID:mLcTWF4w.net(3)
単純に今あるファイル名の先頭に001や002と連番をつけるだけで大丈夫です。
この前作ったのですが誤ってファイルを消してしまって(泣
コメント1件

801
デフォルトの名無しさん[sage]   投稿日:2016/11/27 12:22:44  ID:2v7FHJZn.net(3)
>800
正常系だけでいいのなら
@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

802
デフォルトの名無しさん[sage]   投稿日:2016/11/27 12:47:37  ID:3PyehhaB.net
作成代行スレじゃないので自力でここまではできたけどここから先がわからない
というような努力の跡がほしいなぁ

803
デフォルトの名無しさん[sage]   投稿日:2016/11/27 15:20:44  ID:V1m99hal.net
@echo off
pushd "%~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の際は先頭ファイルを掴まないと順番が狂うので注意

804
デフォルトの名無しさん[sage]   投稿日:2016/12/04 12:46:34  ID:RTx2BH8+.net
>794>799
ありがとうございます!返信遅くなりました
とくに799の方、具体的に話していただいて本当に助かりました。

805
デフォルトの名無しさん[sage]   投稿日:2016/12/04 16:10:49  ID:J7/x1rKh.net
799

806
デフォルトの名無しさん[sage]   投稿日:2016/12/04 19:03:21  ID:rwQpbrj5.net
799は素晴らしいな

807
デフォルトの名無しさん[sage]   投稿日:2016/12/10 00:17:50  ID:CO5JTr10.net(3)
pushd "%~dp1" || exit /b
if not exist "title.txt" exit /b
for /f "usebackq delims=" %%a in ("title.txt") do (
ren "%~1" "%%~a%~x1"
shift
)

forの中でshiftが働きません
どう書けば良いでしょうか?
選択ファイルをドラッグ&ドロップしてtitle.txtの順通りにリネームしたいです

808
801[sage]   投稿日:2016/12/10 14:16:28  ID:CO5JTr10.net(3)
自己解決しました
@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

809
デフォルトの名無しさん[sage]   投稿日:2016/12/10 15:09:17  ID:ga5ibtHW.net(2)
forループは実行前に式展開されてから実行されるので
式展開時に変数が内容の文字列に置き換わってしまい変数の意味を失う
@echo offを取って表示させたらわかるだろう
面倒なのでヒントだけ
for %%a 〜 do (
set b=%%a
call echo %%a - "%%~1" - %%b%%
shift
)
コメント1件

810
デフォルトの名無しさん[sage]   投稿日:2016/12/10 16:20:43  ID:CO5JTr10.net(3)
>809
ありがとうございます
callで遅延展開風にする場合%で囲むと思っていたので
call ren "%%~1%" "%%~a%%~x1%" と書いていて出来ませんでした
call ren "%%~1" "%%~a%%~x1" と書けば良かったのですね
%で囲むではなく「%を重ねる」と覚えるようにします
コメント1件

811
デフォルトの名無しさん[sage]   投稿日:2016/12/10 16:27:31  ID:ga5ibtHW.net(2)
式評価されるということは、
%%→%になるっていうことなんだよ
(これは%を表記する方法として覚えるけど)
set a=echo hoge
call %%a%%
call call %%%%a%%%%

812
デフォルトの名無しさん[sage]   投稿日:2016/12/11 10:51:05  ID:HwfbXu/f.net
>810
引数や変数を遅延展開するのは無理あるよ
あらかじめ環境変数をセットしたものが対象であり、どのコマンドにも適用できるわけじゃない
パーセントを前方に重ねるのはバッチ上の書式、一重囲みが環境変数、call command 二重囲みが遅延展開というように意味が異なる
よくわからなければエクスクラメーション記号にするか、カッコを使った複文を避けてサブルーチンに渡す、など別の方法をとる

813
デフォルトの名無しさん[sage]   投稿日:2016/12/11 15:29:30  ID:wBKcLq5q.net(3)
遅延展開というより
式評価が、実行時とcallの2回実施される
一回目の式評価ではまだ変数展開が行われずに残ったままにしたい
ってのが%%にする理由

814
デフォルトの名無しさん[sage]   投稿日:2016/12/11 15:39:49  ID:wBKcLq5q.net(3)
for /F %%i in ('command')
形式の'command'の部分、ここにも式評価が入ることが結構忘れられる

815
デフォルトの名無しさん[sage]   投稿日:2016/12/11 16:35:43  ID:wBKcLq5q.net(3)
補足
commandにパイプやリダイレクト記号を書くような場合は
^| や ^>とかのように'^'を付けないとエラーになるから忘れるということは無いだろうが
忘れる場合ってのは、>523>538のような場合のことで
元のように%一つにしておくと何が起き得るかは"ab%cd%ef"とかが入ってる場合を考えれば解かる

816
デフォルトの名無しさん[sage]   投稿日:2016/12/11 22:14:02  ID:iHWHaBgd.net(2)
\/:*?"<>|
テキストファイルに含まれるこれらのファイル名に使えない文字を全角文字に置換したいのですが
バッチで試してみたところ"*は無理でした
バッチから使えるcuiソフトなどで良いものや何か方法があれば教えて下さい

あ/あ "abc"
など括弧のように対応する"がある場合は、あ/あ “abc”
あ/あ a"
など対応するものが無ければ、あ/あ a”
みたいに出来れば理想です
コメント1件

817
デフォルトの名無しさん[sage]   投稿日:2016/12/11 22:19:57  ID:iHWHaBgd.net(2)
あ/あ “abc”
が何か分かり難くなってますが
左側が左ダブル引用符という下から上へコロン打ってるやつで
右側が右ダブル引用符で上から下へのコロンです

818
デフォルトの名無しさん[]   投稿日:2016/12/14 00:05:22  ID:vS/jNHEE.net(3)
netstat みたいに気軽で、もっと高速にアクセス中のホストが分かる方法ないでしょうか?
というのは、EdgeのURLを取得するのはかなり面倒なので
でも netstat の情報は1分以上遅延するので、できれば数秒で知りたい
コメント1件

819
デフォルトの名無しさん[sage]   投稿日:2016/12/14 00:51:13  ID:/GnWlzD4.net(3)
>818
netstatそんなに遅れるか?
名前解決に時間が掛かってるんなら-nを付けて数値のみで表示させてみては?
コメント1件

820
デフォルトの名無しさん[sage]   投稿日:2016/12/14 01:19:09  ID:vS/jNHEE.net(3)
>819
なるほど、-nなら一瞬でしたw
名前で反応したかったので、-fにしてました

821
デフォルトの名無しさん[sage]   投稿日:2016/12/14 01:31:44  ID:/GnWlzD4.net(3)
セッション数幾つぐらいなのか知らないけど
普通名前解決に秒単位なんてかからないよ
自分のプロバイダのところのDNSサーバー使ってるか?
コメント1件

822
デフォルトの名無しさん[sage]   投稿日:2016/12/14 01:54:27  ID:vS/jNHEE.net(3)
>821
特に何もしてないので、プロバイダのDNSだと思います
普段は4つですが、ブラウザ開くと1ページでも何十個も出てきますね
よく見ると、一瞬で何十個もリストアップされる場面と、ひっかかる場面があって、相手先によるようですね

823
デフォルトの名無しさん[sage]   投稿日:2016/12/14 03:29:46  ID:PdV20HuV.net(2)
>816-817
ファイル名には、半角英数字と、_ アンダーバーだけを使うこと

バグるアプリがあるから、それら以外の文字は使うな

824
デフォルトの名無しさん[sage]   投稿日:2016/12/14 04:28:14  ID:/GnWlzD4.net(3)
まあ今時ファイル名に日本語を使うなってのはちょっと無理っぽいだろ
良いものがあるかどうかは俺は知らんよ(人に探させずに自分で探すのがいいだろう)
PowerShellやWSHでやる分にはそれくらいは出来るだろうけど
ファイル名にはいろいろ落とし穴があるからなあ
長さ制限とか、con,com1等のデバイス名とか後につくピリオドや半角空白とか
com1. ..txt
とか作れない

825
デフォルトの名無しさん[sage]   投稿日:2016/12/14 17:45:01  ID:vFnJFYnV.net(2)
コマンドラインから「システムの環境変数」を参照するのってできる?

具体的には最近のJavaインストールすると、
システムの環境変数PATHの先頭に余計なもの追加しやがるので
それを削除するスクリプト書きたいんだよね。
設定は setx 使えばいいらしいんで、参照さえできれば削除できるかなーと。

826
デフォルトの名無しさん[sage]   投稿日:2016/12/14 17:55:14  ID:puNU7ctc.net
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
個人的には reg export 使ってファイルでごにょるのが好み
コメント1件

827
デフォルトの名無しさん[sage]   投稿日:2016/12/14 21:30:56  ID:PdV20HuV.net(2)
PowerShell_ise では、大文字・小文字は同一として扱われる。
環境変数PATHを表示する
$Env:Path

設定は、
$str = ";C:\Program Files\Internet Explorer\"
set-item -path env:path -value "$Env:Path + $str" -WhatIf

-WhatIf を付けているので、実際には実行されないで、結果を見れる

828
デフォルトの名無しさん[sage]   投稿日:2016/12/14 23:47:39  ID:vFnJFYnV.net(2)
>826
さんくす

829
デフォルトの名無しさん[sage]   投稿日:2016/12/15 22:24:24  ID:Jry/Bq76.net
このスレってやっぱり仕事でCMD使ってる人がほとんどなのかな?

830
デフォルトの名無しさん[sage]   投稿日:2016/12/15 23:46:26  ID:Jj9qQdSY.net
余裕で趣味です

831
デフォルトの名無しさん[sage]   投稿日:2016/12/16 00:25:58  ID:EPzN1wXR.net
今もバッチで色々やってるけど
そろそろPowershell覚えた方がいいんかナー

832
デフォルトの名無しさん[sage]   投稿日:2016/12/16 03:59:28  ID:rja7Rz9P.net
かなり前からそう思ってるけど.Net覚えるのが面倒臭くて先延ばしにしたままだわ

833
デフォルトの名無しさん[sage]   投稿日:2016/12/16 19:20:13  ID:UvIhWraO.net
少し前から cmd/wsh+vbs から PowerShell に移行したけどチョー楽しい
ただ各所にトリッキーなトラップがあるのと比較演算子が -eq とか -lt とかなのがいまだに慣れない

834
デフォルトの名無しさん[sage]   投稿日:2016/12/17 20:01:48  ID:rAxcOYFz.net
キッティングで使ってるけど
PowerShellはストアアプリの駆除がメインだな

835
デフォルトの名無しさん[sage]   投稿日:2016/12/18 08:18:40  ID:qKtu6SDf.net
シェルスクリプトはリダイレクトに > | < 使ったアホのせいで
比較演算子がまともに使えなくなったのが痛い
PowerShellではその悪習を断ち切って欲しかった

836
デフォルトの名無しさん[sage]   投稿日:2016/12/18 11:49:41  ID:djwC/Ohb.net
リダイレクトに<>を使ったのは大成功だったと思うがな。
PowerShellでヘンテコな構文を導入したところで、
マイクソシネって言われるだけじゃん。

悪臭というなら、パス区切り文字の\だろ。

837
デフォルトの名無しさん[sage]   投稿日:2016/12/18 15:58:05  ID:oHmdKz4q.net(2)
[]も問題起こすよね

838
デフォルトの名無しさん[sage]   投稿日:2016/12/18 16:00:06  ID:oHmdKz4q.net(2)
なんか四角形に見えるw
『 [ 』と『 ] 』ね。

839
デフォルトの名無しさん[sage]   投稿日:2016/12/19 12:20:52  ID:H16UOEk6.net
豆腐屋って減ったよなあ

840
デフォルトの名無しさん[sage]   投稿日:2016/12/19 21:24:30  ID:j5IwDTpi.net
峠を攻める豆腐屋

841
デフォルトの名無しさん[sage]   投稿日:2016/12/19 22:09:00  ID:EFgj4hJx.net
というよりも小売りが…
八百屋なんて、そういうのがネタになっている商店街か、
近くに田畑があるようなところでしか見なくなったよ。
ほとんど全ての街ではスーパーでいいからな。

そう考えると、花屋は頑張っている。
未だにそれなりの数が残っているよな。
ま、スーパーの置き場所は限られているからか。
あとは客ひとりの利益率も悪くないんだろうなあ。

842
デフォルトの名無しさん[sage]   投稿日:2016/12/23 13:16:48  ID:C13rqdFY.net(2)
自身にマウントされてるドライブ/フォルダ名を指定してその対象がローカルドライブか否か判別できるコマンドってありますか?

843
デフォルトの名無しさん[sage]   投稿日:2016/12/23 13:19:26  ID:C13rqdFY.net(2)
あれ、なんか投稿が切れてる・・・

自身にマウントされてるドライブ/フォルダ名を指定してその対象がローカルドライブか否か判別できるコマンドってありますか?
『net use ドライブレター』でCIFS/WebDAVでマウントされた物かそうでないかは判断できるけど、
Dokanとかでマウントされた物も含めて、ネットワークドライブ全般を判別したいです。
(ただiSCSI/FCとかのブロックデバイスは仕方ないかなと思ってます)
よろしくお願いします。
コメント1件

844
デフォルトの名無しさん[sage]   投稿日:2016/12/23 20:54:24  ID:QxIckOqH.net(2)
>843
俺は以下の要領でVBScriptと併用してる

【.cmd】 バッチファイルスクリプト %10 【.bat】
>593 : デフォルトの名無しさん[sage] 投稿日:2014/06/16(月) 18:45:29.61 ID:R0cE173n [1/1回]
>>592
> 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ディスク
コメント1件

845
837[sage]   投稿日:2016/12/23 22:21:21  ID:l7ZH1QCK.net
>844
ありがとうございます。ちゃんと機能することを確認しました。
ちなみにDokanのWin-SSHFSでマウントしたドライブは、
エクスプローラーで確認するとHDDのアイコンにも関わらず
上記のVBスクリプトの出力は何故か1でした。

流石にリパース・ポイントでマウントされているフォルダの情報とか
までは拾えないですね。
ファイルシステムやパーテションの下位レイヤーに位置している
デバイスの情報までバッチで拾うのは無理があるとは思いますが。
コメント1件

846
デフォルトの名無しさん[sage]   投稿日:2016/12/23 23:59:30  ID:QxIckOqH.net(2)
>845
あとは https://technet.microsoft.com/ja-jp/scriptcenter あたりで、他に使えそうな構文がないかどうか探すしかないのでは?
ちなみに以下の1行をVBScriptファイルとして保存してから別途呼び出す方式にすれば、任意のドライブにメディアが挿入されているかどうかを判定可能。

WScript.Echo CStr(CreateObject("Scripting.FileSystemObject").GetDrive(WScript.Arguments(0)).IsReady)
コメント1件

847
837[sage]   投稿日:2016/12/24 08:36:33  ID:bGXjBeNc.net
>846
ありがとうございます。
こちらのツールも勝手がよさそうですね。使わせていただきます。

848
デフォルトの名無しさん[sage]   投稿日:2016/12/24 12:05:37  ID:mYH1sKhw.net
WSH等を使う…と言ってたらバッチの出番が無くなったりしてな

849
デフォルトの名無しさん[sage]   投稿日:2016/12/27 22:52:31  ID:tD8K2H9A.net
errorleveになぜか9009が急に出はじめて
びっくりして検索したら、いろいろ出た

850
デフォルトの名無しさん[sage]   投稿日:2017/01/02 07:34:29  ID:Jfm6LKzZ.net
msys等のprintf をプロンプトから forループ、変数 %s で実行すると困る、って夢を見たんだ

@for /d %s in ("%ProgramFiles%\M*") do @printf """%"s""" %"s"\n" "%s" "%s"

(´-`).。oO(ワケワカラン… もう一回寝たら何かひらめくかな…)

851
デフォルトの名無しさん[sage]   投稿日:2017/01/07 01:17:44  ID:mJLtkeqF.net
http://pastebin.com/mEHBJq8T
こんな感じでmp4からpng形式で切り抜きたいのですが、出来ません
お願いします
コメント1件

852
デフォルトの名無しさん[sage]   投稿日:2017/01/07 01:42:13  ID:QYFKEjsV.net
>851
FILENAMEを%で囲ってないからでは
コメント1件

853
通りすがり[sage]   投稿日:2017/01/07 09:57:36  ID:YuFs6plI.net
FILENAMEを、%で囲めば、いいのか。
φ(..)メモメモ。

854
デフォルトの名無しさん[sage]   投稿日:2017/01/08 00:48:03  ID:jXHP++jg.net
>852
ありがとうございます

FILENAME=hoge hage
としたい場合はどの様にしたらいいんですかね?
どこをダブルクォーテーションで囲めばいいのか分からなくて

855
デフォルトの名無しさん[sage]   投稿日:2017/01/08 01:06:14  ID:xvjZF4HS.net
set文は引用符要らないでしょ、右辺丸々空白ごと代入される(引用符で括れば引用符ごと)
使用する状況によって "%var%" とかすれば

856
デフォルトの名無しさん[sage]   投稿日:2017/01/09 12:41:03  ID:XllxQEeD.net
set文の最後の改行前や=の前後に空白入れてしまってバグになるなんて
初心者にはありがちか…な?
コメント2件

857
デフォルトの名無しさん[sage]   投稿日:2017/01/09 17:39:58  ID:FdW16b/b.net
>856
うん

858
デフォルトの名無しさん[sage]   投稿日:2017/01/09 17:46:32  ID:Vl0ZF+DQ.net
>856
こんな感じのが動かなくてなんでじゃーってなってた

@echo off
set number=1 && echo hoge
if "%number%"=="1" echo 成功
pause
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

プログラム板 タイトル検索

このスレッドが人気です(実況系)
大相撲初場所 十三日 ☆2 (416)NHK実況
実況 ◆ テレビ朝日 46587 スーパーJちゃん (241)テレ朝実況
[再]銭の戦争 #03 (353)フジ実況
実況 ◆ TBSテレビ 26977 ブルーベリーアイアイ江藤愛♪ (949)TBS実況
情報ライブ ミヤネ屋★4 修正 (716)NTV実況
実況 ◆ 日本テレビ 54031 (761)NTV実況
スタジオパークからこんにちは 真木よう子 (432)NHK実況
国会中継「政府演説」★1 (639)NHK実況
このスレッドが人気です(ニュース系)
【国際】韓国軍が数千人ベトナム女性を強姦し、慰安婦にしていた…米国メディア「日本より先に謝罪すべきだ」★5 (782)ニュー速+
【国際】韓国軍が数千人ベトナム女性を強姦し、慰安婦にしていた…米国メディア「日本より先に謝罪すべきだ」★4 (1000)ニュー速+
【食】赤ワイン、ヨーグルト…実は日本人の体質に合わない食べ物 欧米人とは、体のつくりが違うんです (781)ニュー速+
【芸能】現役女子高生と淫行疑惑の狩野英孝 21日会見「本人から直接ご報告」  ★2 (789)音楽・芸能ニュース
【国際】韓国軍が数千人ベトナム女性を強姦し、慰安婦にしていた…米国メディア「日本より先に謝罪すべきだ」★3 (1000)ニュー速+
【FRIDAY】狩野英孝 「17歳現役女子高生と淫行疑惑!」★12 (635)音楽・芸能ニュース
【観光客】訪日韓国人、前年比27.2%増の509万300人で過去最高に…韓国ネット「反日を叫んでる人も裏では日本旅行に行っている」 (551)ニュー速+
【海外芸能】下の毛 刈り込み…マドンナが下腹部をさらけ出した写真を投稿してトランプ大統領就任に反対表明! (268)音楽・芸能ニュース
プログラム板の人気スレ
【統計分析】機械学習・データマイニング11 (940)
C++相談室 part129 (182)
Excel VBA 質問スレ Part45 (243)
C言語なら俺に聞け 138 (576)
Xamarin Part3 (249)
ふらっと C#,C♯,C#(初心者用) Part126 (263)
Visual Studio 2015 Part7 (1000)
Androidプログラミング質問スレ revision52 (560)
くだすれPython(超初心者用) その31 (873)
【PHP】下らねぇ質問はここに書き込みやがれ 7 (637)
スレ立てるまでもない質問はここで 145匹目 (107)
クラス名・変数名に迷ったら書き込むスレ。Part27 (740)
次世代言語議論スレ【Go Rust Haskell Scala Erlang Elixir】 (468)
推薦図書/必読書のためのスレッド 80 (950)
+ JavaScript(ECMAScript)質問用スレッド vol.122 + (978)
☆★Java質問・相談スレッド179★★ (589)
Swift part9 (586)
Ruby 初心者スレッド Part 59 (555)
人工知能ディープラーニング機械学習のための数学 (105)
プログラミング言語 Rust 2 (311)
Java入門・初心者質問スレ Part.2 (297)
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他VR】 (347)
【JavaScript】スクリプト バトルロワイヤル55【php,py,pl,rb】 (459)
+ JavaScript の質問用スレッド vol.122 + (628)
ディープラーニング (965)
Swift part7 (1026)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
Amazon


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 新着書き込みなし(304)