◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net ->画像>2枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1424858999/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1 :デフォルトの名無しさん 転載ダメ©2ch.net:2015/02/25(水) 19:09:59.39 ID:5hx8q1nT
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

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

それ以前の過去スレ
%9  http://toro.2ch.net/test/read.cgi/tech/1335015478/
%8  http://toro.2ch.net/test/read.cgi/tech/1315844420/
%7  http://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6  http://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5  http://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4  http://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3  http://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2  http://pc12.2ch.net/test/read.cgi/tech/1197881068/
%1  http://pc11.2ch.net/test/read.cgi/tech/1178281991/

2 :デフォルトの名無しさん:2015/02/25(水) 19:46:08.29 ID:v67AOmy/
< `∀´>ニダー

3 :1:2015/02/25(水) 20:30:42.86 ID:5hx8q1nT
今回はスレタイに[転載禁止]と表示させないため、"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ブラウザ開発が許諾制となります。
( 【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net ->画像>2枚 は昨日の午前0時現在における2chブラウザのAPI対応状況一覧らしい)
2chブラウザを使っている人は、これに備えてボード一覧取得URLを以下のURLに変更しておくほうがいいかも。
http://kita.jikkyo.org/cbm/cbm.cgi/20.p0.m0.jb.vs.op.sc.nb.bb.29.nv/-all/bbsmenu.html

4 :デフォルトの名無しさん:2015/02/26(木) 21:20:03.84 ID:rvCGpWQW
最近作ったバッチ 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

5 :デフォルトの名無しさん:2015/02/28(土) 13:23:16.31 ID:Vf0Nycmv
転載禁止で何か不都合があるんですかね

6 :デフォルトの名無しさん:2015/02/28(土) 16:21:11.47 ID:YYADq1Ex
>>5
見た目がうざい

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

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

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

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

7 :6:2015/02/28(土) 16:26:28.85 ID:YYADq1Ex
ちなみに僕は >1 ではないけど、自分が立てるときは非表示にしてるよ。

8 :デフォルトの名無しさん:2015/02/28(土) 16:56:20.46 ID:M5P8h0pv
>>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 :デフォルトの名無しさん:2015/02/28(土) 17:01:28.28 ID:M5P8h0pv
なんか文字化けしてるんで訂正。一行目はアンド記号2つね
pushd D:\temp || mkdir D:\temp && pushd D:\temp

10 :デフォルトの名無しさん:2015/02/28(土) 17:13:03.89 ID:/zEhZlSp
>>9
2chではしたらばやまったりと違い、普通に&って書けばいいよ
if not exist app1.exe goto :eof

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

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

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

13 :デフォルトの名無しさん:2015/03/01(日) 09:21:11.77 ID:lUru30LD
何でもかんでも小文字で書いてるようでは、な…w

14 :デフォルトの名無しさん:2015/03/01(日) 10:40:56.37 ID:auZLsY4i
小文字と半角が区別できない人がいると聞いて

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

16 :デフォルトの名無しさん:2015/03/02(月) 17:20:43.72 ID:uyLNdg9p
>>14
中学出たらまた来いやド素人

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

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

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

18 :デフォルトの名無しさん:2015/03/07(土) 14:47:08.28 ID:CawHWVdd
for %%a in (
\\○○
\\△△
) do (
shutdown -m %%a
)

19 :デフォルトの名無しさん:2015/03/14(土) 01:24:35.99 ID:3WQ81uoz
バッチ中で
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 :デフォルトの名無しさん:2015/03/14(土) 02:15:45.11 ID:nzf6iyBd
%%→%
%j 2 l% →環境変数と見なされて消えてる?
%m→m
多分こんな感じ

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

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

22 :デフォルトの名無しさん:2015/03/16(月) 10:51:59.75 ID:n6rD9DBv
@cd /d "%~f1" && cmd /k prompt $g $t (%username%@%computername%) "$p"$_$g
EXIT

23 :デフォルトの名無しさん:2015/03/21(土) 11:58:32.58 ID:2zhIHOyA
jpgをbpgに一括変換したくて

echo off

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

pause

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

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

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

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

26 :デフォルトの名無しさん:2015/03/21(土) 13:43:28.87 ID:2zhIHOyA
ありがとうございました

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

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

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

30 :デフォルトの名無しさん:2015/03/23(月) 03:17:53.73 ID:8SvXlaBo
Windowsでは"*.*"と"*"は同じ結果になるようだが
DOSだと"*"は"*."の意味で解釈されたような気がするが・・・
よく覚えてないが違ったかな

31 :デフォルトの名無しさん:2015/03/23(月) 07:50:10.00 ID:Zh4Tlzc4
>>27
xcopyコマンドは末尾に\を付けると対話モードにならなくて済むから
\を付けるのがベター

32 :デフォルトの名無しさん:2015/03/24(火) 21:50:49.26 ID:15EAIg4V
>>27
オブジェクトとして扱うか 場所として扱うか

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

34 :デフォルトの名無しさん:2015/03/26(木) 14:29:43.73 ID:eQva/kB3
>>33
● 空白が連続して並んでいる場合、空白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

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

36 :デフォルトの名無しさん:2015/03/26(木) 15:10:34.99 ID:TtvSKEog
別の書き方でやりたいことできてしまったので答えてもらわなくていいです
ありがとうございました

37 :デフォルトの名無しさん:2015/03/29(日) 23:08:04.40 ID:brTyAs26
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

38 :デフォルトの名無しさん:2015/03/30(月) 18:13:52.92 ID:7Wq+AZOx
趣旨はわかるけどすべて置換しても手間は変わらないような
方法は人それぞれだけど

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

39 :デフォルトの名無しさん:2015/04/01(水) 01:00:08.58 ID:AO10ro0D
>>38
そんな方法があるのかと思いましたが
call
in (/ " " ^:)
がよくわかりません
??

40 :デフォルトの名無しさん:2015/04/07(火) 18:10:05.82 ID:jQXYCPe4
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%

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

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

41 :デフォルトの名無しさん:2015/04/07(火) 18:23:55.58 ID:tPergwIj
ネットラジオ受信してるのかな

42 :デフォルトの名無しさん:2015/04/07(火) 21:40:29.78 ID:ms0ReaQq
最初の%rtmp%が受信用のプログラムrtmpdumpのパスを指定してるんだろうけど、それ以降の部分はそのプログラムのオプションだからそっちのヘルプなりを見るしかないな

43 :デフォルトの名無しさん:2015/04/08(水) 21:33:07.81 ID:C3eEupG0
>>41>>42
ありがとうございます
rtmpdumpのヘルプがどこにあるのかすらわからない状況ですが、これから頑張ります

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

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

45 :デフォルトの名無しさん:2015/04/09(木) 20:47:41.89 ID:ds7brpvM
0からの距離、絶対値を求めるにはどうしたらいいのでしょうか?

46 :デフォルトの名無しさん:2015/04/09(木) 21:48:31.05 ID:56Kz/Tqn
>>44
ありがとうございます
rtmpdumpの2.4をダウンロードしたときには入っていなかったようなので確認できていなかったみたいです

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

47 :デフォルトの名無しさん:2015/04/10(金) 07:48:39.03 ID:1r0Sjsp4
>>45
バッチファイルはそういう用途には使えない(使わない)

48 :デフォルトの名無しさん:2015/04/10(金) 08:53:04.22 ID:xkkjlCYH
>>47
絶対値をわざわざ「0からの距離」と書いてる時点で、靴下臭さが漂う釣り

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

50 :デフォルトの名無しさん:2015/04/11(土) 01:45:05.27 ID:TrV790b8
ネットにつながっているかどうか調べるバッチを作ってみた

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

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

51 :デフォルトの名無しさん:2015/04/11(土) 06:44:22.81 ID:fyKqFsgJ
糞バッチはいらないです

52 :デフォルトの名無しさん:2015/04/11(土) 08:01:29.73 ID:/PBMBHvW
どこで聞けばいいのかわからないので、すみませんがここに失礼します
相応しいスレがあって、教えて頂ければそちらに移動します

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

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

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

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

55 :デフォルトの名無しさん:2015/04/11(土) 16:01:15.67 ID:Wkw29TQd
Ctl+Alt+Del ってここでは使えないんだっけ?

56 :デフォルトの名無しさん:2015/04/11(土) 16:08:40.34 ID:ZafMUMT0
Ctrl+C?

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

58 :デフォルトの名無しさん:2015/04/13(月) 06:51:07.81 ID:lOTy3Gtt
1>stdout
2>stderr

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

60 :デフォルトの名無しさん:2015/04/14(火) 10:36:28.94 ID:N5fdZKD9
すみません。初心者ですがご教授願います。

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

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

61 :デフォルトの名無しさん:2015/04/14(火) 12:14:07.00 ID:+cu4u0lD
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""

62 :デフォルトの名無しさん:2015/04/14(火) 13:06:46.44 ID:N5fdZKD9
>61
早速ありがとうござました。

63 :デフォルトの名無しさん:2015/04/14(火) 13:48:29.77 ID:ZcIa+N/O
forfilesに/m backup*つければいいんじゃないの?

64 :デフォルトの名無しさん:2015/04/14(火) 23:10:10.99 ID:iRGvGEKT
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の記述は省いています。
どなたか原因がわかる方が居たらお願いします。

65 :デフォルトの名無しさん:2015/04/15(水) 05:47:48.98 ID:qbvA5Mq5
@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

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

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

67 :デフォルトの名無しさん:2015/04/15(水) 18:56:17.05 ID:3mk21zLe
原因もクソもわかんねぇんだったら、1行ごとにpauseコマンド入れてデバッグすりゃいいんじゃねw

68 :デフォルトの名無しさん:2015/04/15(水) 19:14:08.41 ID:iV7zdKJV
>callしたバッチ内のexit /b 0の手前で処理が止まっており

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

69 :デフォルトの名無しさん:2015/04/16(木) 13:55:23.26 ID:PKlW+mXs
またまたお世話になります。

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

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

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




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

70 :デフォルトの名無しさん:2015/04/16(木) 19:05:59.05 ID:dl3K38JP
forfiles /P E:\HDD\backup /M *camdata* /S /D -10 /C ^
"cmd /c if @isdir==TRUE (rd /S /Q @path) else (del @path@file)"

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


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

72 :デフォルトの名無しさん:2015/04/17(金) 07:57:13.26 ID:x1OzcVcc
自分はParl使ってるわ

73 :デフォルトの名無しさん:2015/04/18(土) 13:07:53.50 ID:PKb7WJB3
下らない質問で悪いけど
コマンドプロンプトってターミナルエミュレーターかシェル
どっちの事を指して使われてる言葉なの?

74 :デフォルトの名無しさん:2015/04/18(土) 13:10:24.18 ID:sjW3inIo
>>73
コマンドプロンプト

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

76 :デフォルトの名無しさん:2015/04/19(日) 02:00:49.40 ID:0O9OZvk2
>>70
forfilesなんて、昔はなかった
いつからなんだろう
古いサイトだと解説していない

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

78 :デフォルトの名無しさん:2015/04/19(日) 14:51:37.34 ID:9oYjIFcR
エラー貼りましょう

79 :デフォルトの名無しさん:2015/04/19(日) 14:58:02.24 ID:ZbwKHW2Q
とりあえず-xvfじゃないのか?

80 :デフォルトの名無しさん:2015/04/19(日) 16:15:39.93 ID:5HhODAvd
>>79
xvf の x はオプションじゃなくてコマンドだから "-" はいらない

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

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

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

83 :デフォルトの名無しさん:2015/04/21(火) 22:22:35.03 ID:k+lIUh1M
☆ 日本の核武装は絶対に必須ですわ。☆
http://www.soumu.go.jp/senkyo/kokumin_touhyou/index.html

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

84 :デフォルトの名無しさん:2015/04/28(火) 09:18:46.56 ID:AL7JlJvX
Windows7でディレクトリへのシンボリックリンクってどうやって消すんですか?

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

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

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

85 :デフォルトの名無しさん:2015/04/28(火) 09:39:19.66 ID:l73V3plJ
普通にエクスプローラから消せばいいのよ

86 :デフォルトの名無しさん:2015/04/28(火) 09:43:27.68 ID:8AGhJBnr
シンボリックリンクだろうがジャンクションだろうがディレクトリ消すならならrdだろ

87 :デフォルトの名無しさん:2015/04/28(火) 17:42:15.31 ID:Az6wvvs4
del はファイル削除、 * でなくて *.* でも?
フォルダごと消すなら >>86

88 :デフォルトの名無しさん:2015/04/30(木) 12:53:11.12 ID:ViywK5A0
rdでいけました
ありがとうございます

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

90 :デフォルトの名無しさん:2015/05/04(月) 19:01:55.28 ID:tr24rDGI
start "" /wait "hoge.exe" foo1 foo2
でどや?

91 :デフォルトの名無しさん:2015/05/04(月) 19:11:29.61 ID:vdCrn8hY
hoge.exe %*

92 :デフォルトの名無しさん:2015/05/04(月) 20:18:58.14 ID:hzJehWEx
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)


93 :デフォルトの名無しさん:2015/05/05(火) 00:56:28.99 ID:cn76hmxd
setlocal EnableDelayedExpansion
set FILES=
cd /d "E:\aaa"
for %%x in (*.*) do set FILES=!FILES! "%%~x"
hoge %FILES%

94 :デフォルトの名無しさん:2015/05/05(火) 03:50:23.26 ID:jBh84Fwc
引数で渡せる文字列って制限なかったっけ?
任意フォルダの全ファイルを一度に羅列して渡すのはできるだけ回避したほうが良くないかな

95 :デフォルトの名無しさん:2015/05/05(火) 12:12:24.08 ID:h/qL4+vG
>>93
ありがとうございます
すごい
ずっと悩んでいたから感激です
ほんと助かりました

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

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

97 :89:2015/05/06(水) 19:36:01.98 ID:kduajoAs
hoge.exeが使ってはいけない文字を使っていたようでした
ファイル名、ファルダ名を変えたらうまくいきました

98 :sage:2015/05/07(木) 02:20:57.96 ID:kCRc77b6
なんちゃってインストーラーを作成したく下のように書いたのですが、管理者として実行すると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

99 :デフォルトの名無しさん:2015/05/07(木) 02:30:30.14 ID:VKPrOxig
@echo off

@echo on

exit

pause

にしてチェックしてみるとか

100 :デフォルトの名無しさん:2015/05/07(木) 08:06:10.91 ID:VSUD10fG
pause入れて一行ごとに確かめるしかないでしょうなあ

101 :デフォルトの名無しさん:2015/05/07(木) 11:09:54.36 ID:KWH/KWxF
C:ドライブ以外に置いてあると引っかかりそうなのは
cd %~dp0

cd /d %~dp0

cd \Windows\SysWOW64

cd /d C:\Windows\SysWOW64

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

103 :sage:2015/05/07(木) 22:31:45.98 ID:kCRc77b6
>>99,>>100 試してみたのですが変わらず一瞬で閉じてしまいました。

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

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

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

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


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

104 :デフォルトの名無しさん:2015/05/07(木) 22:59:18.82 ID:VSUD10fG
じゃあそれcmd.exe壊れてるんじゃね
一行ごとにpause入れて止まらんとか聞いたことないぞ

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

106 :デフォルトの名無しさん:2015/05/07(木) 23:24:22.25 ID:yEqXNtFT
"("を含むパス上にあるbatファイルを、「管理者として実行」で正常実行できない
https://social.msdn.microsoft.com/Forums/ja-JP/43f69d0b-1e8a-457b-8e85-57f4c06f2e56/bat?forum=windowsgeneraldevelopmentissuesja

107 :sage:2015/05/07(木) 23:44:02.20 ID:kCRc77b6
>>106 ありがとうございます。OS入れ直しかと思ってた。

108 :デフォルトの名無しさん:2015/05/08(金) 00:08:07.40 ID:0odcB8A0
一般的にシステムを作るときには、
パス・ファイル名には、半角英数字と、
_ アンダーバーだけを使う

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

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

109 :sage:2015/05/08(金) 00:43:49.96 ID:1YMiCyWS
>>108肝に銘じます

110 :デフォルトの名無しさん:2015/05/08(金) 01:22:21.82 ID:DmYJm/wo
>>108
> 日本語、空白、/ \ などは、
> 外人が作ったアプリや他のOSで、バグを起こす

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

111 :デフォルトの名無しさん:2015/05/08(金) 09:58:38.71 ID:5fQ7r8Aw
>>110
イカタコとかは無理じゃね

112 :デフォルトの名無しさん:2015/05/08(金) 16:37:33.99 ID:U2au088Y
そもそもウイルスが壊してくるのはWindows内だったりするからいみないんだよなあ

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

113 :デフォルトの名無しさん:2015/05/08(金) 22:38:18.81 ID:KwMVu8yd
>>108
Program Files(x86)とかいう名前をつけたのは外人だろ?

114 :デフォルトの名無しさん:2015/05/12(火) 23:56:25.43 ID:McgsoQJk
ドライブの空き容量を簡単に調べる方法はありますか。
dirを使えば最後に出ますが。

115 :デフォルトの名無しさん:2015/05/13(水) 00:19:46.38 ID:IRvX1zB3
fsutil volume diskfree c:

116 :デフォルトの名無しさん:2015/05/13(水) 00:44:59.35 ID:++gYyXti
>>>115
ありがとうございます。

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

117 :デフォルトの名無しさん:2015/05/13(水) 01:05:56.71 ID:7VTqgTSP
wmic logicaldisk c: get freespace

118 :デフォルトの名無しさん:2015/05/15(金) 21:00:38.39 ID:FSXq3hA5
行の最後が\記号の場合、その\記号を削除する方法を
探しています。

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

よろしくお願いします。

119 :デフォルトの名無しさん:2015/05/15(金) 21:37:19.52 ID:G1rKhc+A
>>118
Googleでバッチファイル、テキストファイル、置換のキーワードでヒットするサイトを参考にしたら?

120 :デフォルトの名無しさん:2015/05/15(金) 21:58:52.22 ID:XJBM+btE
「行の最後」って何なのか分からないけど、仮に環境変数に入れた文字列だとすると
set x=E:\
if "%x:~-1%" equ "\" set x=%x:~0,-1%

121 :デフォルトの名無しさん:2015/05/15(金) 22:00:53.20 ID:j/48pAYL
call /?

122 :デフォルトの名無しさん:2015/05/15(金) 22:30:21.33 ID:FSXq3hA5
>>119
>>120
>>121

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

123 :デフォルトの名無しさん:2015/05/16(土) 00:42:02.22 ID:O4uFm57f
>>117
ありがとうございます。表示できました。

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

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

125 :デフォルトの名無しさん:2015/05/18(月) 20:11:44.07 ID:a89GM3eE
例えば文字列の長さ取得する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の違いが解んないです

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

127 :デフォルトの名無しさん:2015/05/18(月) 22:47:45.42 ID:clhkHSwG
for /f "tokens=*" %i in (" hoge") do echo %i

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

129 :デフォルトの名無しさん:2015/05/20(水) 17:18:51.87 ID:/oDHFiER
条件に当てはまる複数のフォルダの移動を行いたいのですが上手く行きません。
ご助力をお願いいたします。

目的:任意フォルダ配下のサブフォルダから、行頭にの”[AAA]”があるフォルダのみを
別の任意フォルダに移動させたい。行頭文字には[ ]含みます。

移動元の親フォルダはd:\moto と仮定します。移動先フォルダはd:\saki とすると
処理したい該当するフォルダはd:\moto\[AAA]* となります。

set d_moto=d:\moto       /* 移動元親フォルダ*/
set d_saki=d:\saki       /* 移動先フォルダ*/
set path_moto=%d_moto%\[aaa]*  /* 移動の対象フォルダ*/
for /d %%f in (%path_moto%) do move %%f %d_saki%

該当サブフォルダまでsetしたのはこの他の箇所で使うので定義しています。
またfor /d %%f in (%d_saki%\[aaa]*) do move %%f %d_saki% でも構文エラーが出ます。
ワイルドカードの記述がよく判っておりません。

130 :デフォルトの名無しさん:2015/05/20(水) 17:26:51.76 ID:/oDHFiER
× set path_moto=%d_moto%\[aaa]*  /* 移動の対象フォルダ*/
○ set path_moto=%d_moto%\[AAA]*  /* 移動の対象フォルダ*/

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

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

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

132 :デフォルトの名無しさん:2015/05/20(水) 19:23:26.75 ID:/oDHFiER
>>131 レスありがとうございます。
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、アドミン&管理者モードで実行しています。

133 :デフォルトの名無しさん:2015/05/20(水) 19:39:25.40 ID:Wa0xSOyJ
>>132
ちゃんと説明しなかったけど、まあこう書けばヘルプ見て分かると思ったんだけど
for /d %%f in (%path_moto%) do move "%%~f" %d_saki%

for /?
pause /?

134 :デフォルトの名無しさん:2015/05/20(水) 20:21:43.80 ID:/oDHFiER
お手数をおかけしました。ヘルプ確認もしなかった事をお詫びいたします。

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にしております

ご回答とお付き合い頂き、ありがとうございました。

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

136 :デフォルトの名無しさん:2015/05/22(金) 19:08:31.56 ID:H1v/SBhd
for %%i in (%I%) do set temI=%%~tI

137 :デフォルトの名無しさん:2015/05/22(金) 19:09:49.99 ID:H1v/SBhd
修正(変数Iなんか使うから間違えた)
for %%i in (%I%) do set temI=%%~ti

138 :デフォルトの名無しさん:2015/05/22(金) 19:57:31.64 ID:rsRBQIIs
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"

139 :デフォルトの名無しさん:2015/05/22(金) 20:29:14.08 ID:dDrrBwBt
>>137, >>138
すげー
あんなに悩んでたのに一瞬で解決するなんて
ありがとう

140 :デフォルトの名無しさん:2015/05/23(土) 01:08:59.65 ID:idOG0Vl/
>>139
ご参考
大量にある、下位階層まで変更したい場合、
Flexible Renamer というフリーソフトもある

141 :デフォルトの名無しさん:2015/05/23(土) 09:30:59.77 ID:sl1qWZ50
>>140
d

142 :デフォルトの名無しさん:2015/05/23(土) 09:45:09.89 ID:EIZIQejy
>>140
> 大量にある、下位階層まで変更したい場合

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

143 :デフォルトの名無しさん:2015/05/30(土) 17:32:47.82 ID:KPmzF3IM
指定日時まで一定間隔で繰り返すバッチはこれで大丈夫ですか?

:RETAKE
set D=%DATE%
set T=%TIME: =0%
if not %D% == %DATE% goto RETAKE
set YYYYMMDDHHMMSS=%D:~-10,4%%D:~-5,2%%D:~-2%%T:~0,2%%T:~3,2%%T:~6,2%
:LOOP
   start "hoge" /wait "hoge.bat"
   if "%YYYYMMDDHHMMSS%"=="20150531000000"(
   goto NEXT
   ) else (
   ping localhost -n 600 > nul
   goto LOOP
   )
:NEXT

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

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

146 :デフォルトの名無しさん:2015/05/30(土) 20:55:20.63 ID:NQWNmwnG
高々32ビット整数しか演算出来ないのに
そんなの、まともに比較出来ると思うのか?

147 :デフォルトの名無しさん:2015/05/30(土) 21:09:00.59 ID:NQWNmwnG
試してみろ

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

148 :デフォルトの名無しさん:2015/05/31(日) 01:38:25.44 ID:jBtv10qY
>>143
日時判定のif文を二段階にしたら
最初年月日で、次に時分秒で

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

150 :デフォルトの名無しさん:2015/05/31(日) 04:52:13.09 ID:ntMrQIQA
:LOOP
  if "%date%"=="2015/05/31" goto NEXT
  start "hoge" /wait "hoge.bat"
  ping localhost -n 600 > nul
  goto LOOP
:NEXT

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

151 :デフォルトの名無しさん:2015/06/02(火) 11:53:10.99 ID:kNAcHIfI
特定のフォルダ配下の空のフォルダだけを抽出して処理したいのですが上手く行きません。

特定のフォルダ配下の子フォルダの中身にはどんなファイル、孫にあたるサブフォルダ(※1)、とも存在しない物だけが
本処理対象(退避場所へ移動させる)となります。
※1 サブフォルダは存在してても中身が空の物は”例外処理(フォルダの削除)”の対象とします。
一言でフォルダの中身が空と行っても子フォルダとサブ以下では処理が異なります。子は本処理、孫以下は例外。

d:\temp
 ├aaa(ファイルはあり)-aaa1(ファイルは空)-aaa2(ファイルは空)
 ├bbb(ファイルは空)-bbb1(ファイルはあり)
 ├ccc(ファイルは空)-ccc1(ファイルは空)
 ├ddd(ファイルはあり)
 ├eee(ファイルは空)
 ├fff(ファイルは空)-fff1(ファイルは空)-fff2(ファイルはあり)
 ├ggg(ファイルはあり)-ggg1(ファイルはあり)-ggg2(ファイルは空)

本処理対象 :eee
例外処理対象:aaa1,aaa2,ccc,ccc1,ggg2 
処理対象外 :aaa,bbb1(bbb毎),ddd,fff2(fff fff1毎),ggg(ggg1毎)

(つづく)

152 :デフォルトの名無しさん:2015/06/02(火) 11:56:57.04 ID:kNAcHIfI
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では困難でしょうか?正解コーデングのご呈示をお願い申し上げます。

153 :デフォルトの名無しさん:2015/06/02(火) 19:30:38.92 ID:KyjHTQN8
>>152
eeeの本処理(退避場所に移動させる)って言うけど
eeeはファイルのフォルダも無い空のフォルダだよね?
退避させる意味あるの?

154 :デフォルトの名無しさん:2015/06/02(火) 21:40:21.15 ID:KyjHTQN8
@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

155 :デフォルトの名無しさん:2015/06/02(火) 21:48:29.76 ID:KyjHTQN8
訂正
call :sub "z:\test" proc1 → call :sub . proc1
call :sub "z:\test" proc2 → call :sub . proc2

156 :デフォルトの名無しさん:2015/06/02(火) 23:07:01.41 ID:mV5sXZYH
全角空白 + 半角空白
または
半角空白 + 全角空白

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

157 :デフォルトの名無しさん:2015/06/03(水) 00:33:22.13 ID:PtFxkubO
>>152 サブフォルダ名に半角空白を許す変更(行数の制限のため複数コマンドを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

158 :デフォルトの名無しさん:2015/06/03(水) 07:12:21.00 ID:WCFfLif6
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
本処理

159 :デフォルトの名無しさん:2015/06/04(木) 21:39:02.33 ID:E36uiKc8
>>158
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

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

@echo off
:loop
jpm xpi
wget [email protected] http:/localhost:8888/
sleep 5000
goto loop

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

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

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

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

162 :デフォルトの名無しさん:2015/06/06(土) 21:36:49.50 ID:iCqfzRte
>>161
僕が怪しいかなと思う部分を上げてみます。

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

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

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

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


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

163 :デフォルトの名無しさん:2015/06/07(日) 00:35:36.48 ID:TwcY/oci
いい加減XPもなくなっただろうし
timeoutが市民権を得てもいいと思うんだけどなー

164 :デフォルトの名無しさん:2015/06/07(日) 01:59:54.71 ID:uKDfTV9k
batファイルの最初に
echo %path%
を入れてデバッグしよう

sleep → timeout

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

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

SET PATH=%PATH%;追加パス

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

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

166 :デフォルトの名無しさん:2015/06/07(日) 15:23:50.35 ID:MMVoxWft
>163
>164
>165
アドバイスありがとうございます。
>165さんの言うとおり、パソコンを再起動したらちゃんとpathが反映されました。
みなさんのアドバイスを参考にして、あと、短いけどなるべく使いまわせるように役割ごとにばらそうと考え
最終的にこういう風にしました。
====auto_addon_install.bat=====
@echo off
call confirming_path.bat
:loop
call jpm_xpi.bat
wget [email protected] http://localhost:8888/
timeout 5
::instead of "sleep 5000"
goto loop
====confirming_path.bat=====
@echo off
:: confirming path 1 as not \n
path
:: confirming path 2 as \n
echo %path% | sed s/;/\n/g
pause
exit
====jpm_xpi.bat====
@echo off
jpm xpi
exit
==================
これからアドオンをつくってみようと思います。ありがとうございました。

167 :デフォルトの名無しさん:2015/06/07(日) 16:49:41.54 ID:LTwn0E2k
呼び出す子バッチ側は 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

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

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

169 :デフォルトの名無しさん:2015/06/11(木) 06:24:09.49 ID:zvXhuG+H
dir /s /b | grep AAA | xxx

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

170 :デフォルトの名無しさん:2015/06/11(木) 08:30:10.02 ID:o9tryPI0
>>167
ありがとうございます。引数渡しもあるのですね。
勉強になりました

171 :デフォルトの名無しさん:2015/06/15(月) 18:12:46.03 ID:GJ2N2cUz
set /A を使うと計算できますが、
ゼロから始まる数字は10進でなく8進法扱いされおかしな結果になります。
ゼロが何個も続く可能性のある数字文字列から最初のゼロを取る
簡単のやり方を教えて下さい。

172 :デフォルトの名無しさん:2015/06/15(月) 19:34:37.53 ID:PeZ0fZ8f
>>171
簡単な方法は知らんが、愚直な方法としては %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

173 :デフォルトの名無しさん:2015/06/15(月) 20:03:52.06 ID:IzyZ+arn
>>171

set "a=0123"
set /a "b=1%a%*2-2%a%"
echo "%a% --> %b%"

174 :デフォルトの名無しさん:2015/06/15(月) 22:25:16.68 ID:C49nk280
for /f "tokens=* delims=0" %i in ("%a%") do set /a a=%i-0

175 :デフォルトの名無しさん:2015/06/16(火) 01:55:22.19 ID:xfn3wJg6
>>172-174
ありがとうございます。
勉強になりました。

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

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

176 :デフォルトの名無しさん:2015/06/16(火) 05:24:35.09 ID:kBkkj2GI
バッチなら %i を %%i にする
>>174 の -0 と /a は不要

177 :デフォルトの名無しさん:2015/06/16(火) 17:38:49.75 ID:fIwvDifY
>>172の下のはダメなので取り消し

>>176
とっちゃダメ

178 :デフォルトの名無しさん:2015/06/16(火) 20:07:51.10 ID:kBkkj2GI
>>177
不要だよ

179 :デフォルトの名無しさん:2015/06/16(火) 20:35:30.33 ID:kBkkj2GI
ああ、a=0 の場合か
でも a が空だと不味いぞ

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

181 :デフォルトの名無しさん:2015/06/26(金) 06:01:05.05 ID:sKB1AmZZ
PS講座にしろよw

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

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

183 :デフォルトの名無しさん:2015/06/28(日) 12:19:29.88 ID:Mckk18LI
>>182
robocopy /s コピー元 コピー先 *.jpg *.png

184 :デフォルトの名無しさん:2015/06/28(日) 16:57:40.34 ID:hilWFqBu
for %%i in (jpg gif png) do echo copy *.%%i dest\

185 :182:2015/06/29(月) 22:19:20.20 ID:xFjGO25h
遅れましたがアドバイスありがとうございました

186 :デフォルトの名無しさん:2015/06/30(火) 09:40:16.25 ID:T2wiUbpe
メモ帳を起動してフォーカスが外れたら勝手に終了させるってどうやったらいいですか

187 :デフォルトの名無しさん:2015/06/30(火) 10:23:04.09 ID:T2wiUbpe
"ウインドウからフォーカスが外れたら"です
補助ツールの起動用として汎用的に使いたいと思ってます

188 :デフォルトの名無しさん:2015/06/30(火) 12:20:24.58 ID:28t7zSj6
VisualBat - 窓の杜ライブラリ
http://www.forest.impress.co.jp/library/software/visualbat/

189 :デフォルトの名無しさん:2015/07/01(水) 01:32:24.09 ID:MjkDd52T
>>186
そういう処理はバッチファイル向きじゃないのでAutoHotkeyとかのツール使った方がいいと思う

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

191 :デフォルトの名無しさん:2015/07/02(木) 18:15:40.14 ID:W1iwlrdH
find のerrorlevel

192 :デフォルトの名無しさん:2015/07/03(金) 02:00:44.30 ID:DFRnLTHh
echo;%1 | find "[秘]" > nul && aaa.exe
じゃね?

193 :デフォルトの名無しさん:2015/07/03(金) 19:45:25.30 ID:UldOsxiv
set x=%1
if not %x:秘=%' == %1' aaa.exe

194 :デフォルトの名無しさん:2015/07/04(土) 07:18:12.44 ID:vLkJmuOy
必要に応じてクイック起動からコマンドプロンプトを起動しているのですが、
起動のたびに指定のバッチファイルを自動で実行させる方法ないですか。

195 :デフォルトの名無しさん:2015/07/04(土) 12:58:13.63 ID:qSlQKSp6
>>194
実行したいバッチファイルの最終行に「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

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

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

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

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

199 :デフォルトの名無しさん:2015/07/09(木) 01:33:00.66 ID:EFIo5QkZ
hoge1|hoge2

200 :デフォルトの名無しさん:2015/07/11(土) 23:54:44.10 ID:zNJDNBRR
パイプがどうしてそうなるのですか?

201 :デフォルトの名無しさん:2015/07/12(日) 00:31:32.75 ID:JwgGsFih
パイプは「同時に起動して」標準出力と標準入力を繋げる機能なのは分かるよね。
そしてつなげた標準入出力は別に使う必要は無いわけで。

202 :デフォルトの名無しさん:2015/07/12(日) 00:34:11.82 ID:JwgGsFih
書き忘れたけど礼を言うなら>199にね。

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

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

205 :デフォルトの名無しさん:2015/07/12(日) 14:09:25.86 ID:cZduJ3g5
>>203
詳しくないが、DevConが必要らしい

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

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

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

209 :デフォルトの名無しさん:2015/07/13(月) 02:19:24.08 ID:oxguYBiy
Win10インスコ時のProgramFiles(x86含む)を除いてProgramFilesの移動、ジャンクションするbatどうすれば

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

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

211 :デフォルトの名無しさん:2015/07/13(月) 13:53:24.86 ID:RWTt7ci0
>>210
記号類で引っかかってるのかも
^& のように ^ 記号でエスケープしたらどう

212 :デフォルトの名無しさん:2015/07/13(月) 21:54:00.22 ID:ck7CB2gy
>>211
この表現わからない。

213 :デフォルトの名無しさん:2015/07/13(月) 22:54:36.16 ID:RWTt7ci0
ハードウェアIDの後半のいくつかのアンド記号のこと
}_VID&0002056e_PID&102d&Col01

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

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

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

214 :デフォルトの名無しさん:2015/07/13(月) 23:24:19.93 ID:9jM/hgDM
HIDって分かっているなら
devcon findall HID\*

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

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

216 :デフォルトの名無しさん:2015/07/14(火) 04:06:21.79 ID:ayHDk+Pv
64 ビット版 Windows では完全には機能しません。 とあるが…

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

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

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

218 :デフォルトの名無しさん:2015/07/14(火) 09:05:32.61 ID:gam5IC3n
書けます

219 :デフォルトの名無しさん:2015/07/14(火) 12:17:36.57 ID:TwNFk+SS
>>218
サンプルか参考batアドバイス宜しく

220 :デフォルトの名無しさん:2015/07/14(火) 13:11:19.14 ID:gam5IC3n
>>219
これでいいんじゃない?
set /p a=
command "c:\Program File\%a%" "c:\Program File\%a%"

221 :デフォルトの名無しさん:2015/07/21(火) 07:37:07.25 ID:7WzjAJ7x
こんな処理ってどう書けばいいですか

process_stdin.bat

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

>dir | process_stdin
[aaa.txt]
[bbb.txt]
[ccc.txt]

222 :デフォルトの名無しさん:2015/07/21(火) 15:14:00.60 ID:J1lfUMsK
>>221
http://doudemoexe.com/Batch/0005.jsp

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

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

224 :デフォルトの名無しさん:2015/07/22(水) 02:32:17.00 ID:QnUh7Wvk
CALLされることを想定したらendlocalやっといたほうがいいんじゃないの?

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

226 :デフォルトの名無しさん:2015/07/24(金) 20:24:24.41 ID:+KpXt6+t
サブルーチンの再起呼び出しには絶対必要だけどね

227 :デフォルトの名無しさん:2015/07/24(金) 22:44:30.28 ID:YYoMYHtn
DOS窓の内容をファイルにするのに、よい方法はありますか?
今のやりかたは
DOS窓で右クリ→編集→すべて選択→エディタでctrl-V
もっと簡単にできる方法があれば教えて下さい。

228 :デフォルトの名無しさん:2015/07/26(日) 18:02:41.27 ID:YJ+DIjqN
サブディレクトリを含む、ファイル名の一覧を出力したい
フォルダは除きたい

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

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

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

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

229 :デフォルトの名無しさん:2015/07/26(日) 18:07:54.57 ID:YJ+DIjqN
>>227
|clip
>test.txt

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

231 :デフォルトの名無しさん:2015/07/26(日) 18:52:45.58 ID:mOMjtGtu
出力時にファイル名だけにすりゃいいんでない?
for /f "delims=" %%a in ('dir /a-d/s/b') do echo %%~nxa

232 :デフォルトの名無しさん:2015/07/26(日) 19:59:32.63 ID:YJ+DIjqN
>>230,>>231
どちらの方法でも出来ました。
本当に助かりました。ありがとうございます!!

233 :デフォルトの名無しさん:2015/07/27(月) 23:53:38.32 ID:T6/asWdF
>>229
ありがとうございます。
前もって保存すると決まっている時は、clipなどを使えるのですが
いろいろやっていて、後で保存する必要が出た場合に簡単な方法があればと思いました。
長くかかる、再現しないなどでもう一度やれない場合です。

234 :デフォルトの名無しさん:2015/07/28(火) 02:43:47.39 ID:+/z/OnI4
>>233
直接コマンドプロンプト使うんじゃなくてConEmuみたいなの使ってログ取りオプション有効にして作業するとか

235 :デフォルトの名無しさん:2015/07/28(火) 03:19:58.31 ID:tjBt9FXm
>>233
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%

236 :デフォルトの名無しさん:2015/07/28(火) 03:33:41.10 ID:tjBt9FXm
ちょっと訂正
@echo off
set bat=%temp%\tmp.bat
set d=%date:/=%
set t=%time::=%
set t=%t: =0%
set dt=%d%_%t:~0,-3%
set log_file=/out %~dp0\doslog_%dt%.txt
echo @echo off>%bat%
echo :loop>>%bat%
echo set cmdline=>>%bat%
echo set /p cmdline=%%cd%%^^^>>>%bat%
echo if not defined cmdline goto :loop>>%bat%
echo echo.%%cmdline%%>>%bat%
echo %%cmdline%%>>%bat%
echo echo.>>%bat%
echo goto :loop>>%bat%
doslog cmd /k %bat%
del /q %bat%

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

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

239 :デフォルトの名無しさん:2015/07/29(水) 02:41:38.74 ID:Mm94swUw
手でやれよw

240 :デフォルトの名無しさん:2015/07/29(水) 03:39:06.21 ID:ObQZT/sF
foo.batにbar.txtをD&Dするのは引数1にbar.txtを記述するのと同じ
foo.bat bar.txt

241 :デフォルトの名無しさん:2015/07/29(水) 04:08:32.78 ID:BtTeVh+H
それとも引数%1〜%9の事を言ってるのか?

242 :デフォルトの名無しさん:2015/07/29(水) 04:15:58.66 ID:we/S8MTT
ありがとうございます、助かりました。

243 :デフォルトの名無しさん:2015/07/30(木) 01:06:22.86 ID:OBXU0hZ1
すいません、文字列抽出について質問させてください。

ファイルの中から特定の文字列を抜き出して、それらを結合するバッチを考えています。
凡例として以下のような内容のファイルから、特定文字列「hoge(.*,.*)」を全件抜き出し
それらを結合して最終的に「hoge(10,50)++hoge(90,110)++hoge(200,250)」といった文字列を
生成したいです。なお、#より右側はすべてコメント扱いです。
==========sample.txt
# サンプル情報、hoge()抽出
a = hoge(10,50).foo1(int).bar1()
b = hoge(90,110).hogehoge()
c = hoge(200,250).foo2(int).bar2()
a+b+c
==========
各種前提条件として、以下のようなものがあります
1. 対象文字列「hoge(.*,.*)」が出現する行数およびカラム位置は不定
2. 「hoge(.*,.*)」の()の中身は不定長
3. 「hoge(.*,.*)」が一行の中に出現するのは最大一回まで
4. 「hoge(.*,.*)」のさらに後に出てくる「()」の数は不定
5. 検索ファイルの中に「!」が出てくるか不明なため、極力遅延環境変数は使わない
findstrだと対象行丸々抽出になってしまい、「hoge(.*,.*)」の部分のみ抽出が
できないためforとset、callサブルーチンを組み合わせた文字列操作になるかと思います。
ただ「"hoge("がヒットしてから次に")"がヒットするまでの文字列を抜き出して変数に
格納する」という操作が、私なりに考えてみたもののわかりませんでした。

知恵をお貸しいただけないでしょうか。よろしくお願いします。

244 :デフォルトの名無しさん:2015/07/30(木) 02:40:47.91 ID:vXeGU9RJ
>>243
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("++"));

245 :デフォルトの名無しさん:2015/07/31(金) 01:23:28.16 ID:k8QkrhUe
>>234
ありがとうございます。
ConEmu、DOS process LOG writer 調べてみます。

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

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

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

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

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

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

251 :デフォルトの名無しさん:2015/08/09(日) 18:45:19.83 ID:Q+5Xwfkz
サブルーチンにして判定を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

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

253 :デフォルトの名無しさん:2015/08/09(日) 18:54:25.00 ID:Q+5Xwfkz
>>249
251のは空のnotepadが開くよ
対象を開くなら以下な感じで引数指定ね
start "" notepad.exe "%~1"

254 :デフォルトの名無しさん:2015/08/10(月) 11:54:29.65 ID:ma04BZuz
>>250>>252>>253
レスありがとうございます。
>>251 
スクリプト書いていただきありがとうございます。
:SUB側にcall echo %~1と書いて、ファイル名が取得できるのが確認できました。
知らないパラメータが多いですが、調べながら試しています。
助かりました。

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

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

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

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

258 :デフォルトの名無しさん:2015/08/11(火) 04:00:44.77 ID:oWV7al3f
どういう場合に9009じゃなくて!ERRORLEVEL!と表示されるのか説明しないの?

259 :デフォルトの名無しさん:2015/08/11(火) 08:08:17.57 ID:kidrm6pf
はい

260 :デフォルトの名無しさん:2015/08/11(火) 12:57:41.63 ID:wwdlJScr
>>258
結果に違いがあった点については、質問者がデバッグ中に質問内容以外のこともしたのだと予想してる
その点が気になるなら質問者から聞いてほしい

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

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

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

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

261 :デフォルトの名無しさん:2015/08/11(火) 23:25:41.78 ID:84vLNAhy
詳しくないけど、返り値で何とかしようとして

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

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

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

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

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

よろしくお願いします

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

よろしくおねがいします

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

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

265 :デフォルトの名無しさん:2015/09/06(日) 05:37:24.41 ID:a7Z2ulaD
>>262
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

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

ありがとうございました

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

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

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

こんなの Linux系なら楽勝なのに…

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

意味が分からん。

270 :デフォルトの名無しさん:2015/09/10(木) 00:54:28.51 ID:v5ofxYj/
>>268
うん
仕様がぼろぼろで旧式の骨董品
でも代わりがないから使うしかない

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

271 :デフォルトの名無しさん:2015/09/10(木) 01:16:35.41 ID:D73GyhwT
骨董を使うのが嫌ならWSHやPowerShell使えば良いだろ。
コレはワビサビを愉しみながら使うモノだ。

272 :デフォルトの名無しさん:2015/09/10(木) 01:26:44.22 ID:rVL3fJUt
>>268
確かに先頭と末尾に"があるとペアと認識するようだな
'call "%hoge_exe%" ^| find "piyo"'
'""%hoge_exe%" ^| find "piyo""'
のように書くと回避できた

273 :デフォルトの名無しさん:2015/09/10(木) 03:08:07.86 ID:SFXMkCA1
空白が実行ファイル名に含まれてるんじゃないならバッチ内で一時的にパス追加しちゃうのが楽そう

274 :268:2015/09/10(木) 21:38:41.76 ID:0fmkCSIW
>>272
ごめん。駄目だった。
setlocal
set imjpuexc_path=%CommonProgramFiles(x86)%\microsoft shared\IME14\IMEJP\imjpuexc.exe
for /f "delims=" %%i in ('""%imjpuexc_path%" getkanainput ^| find "a""') do (
echo %%i
)
endlocal
を実行すると…
\Common の使い方が誤っています。
C:\Users\Ore\Desktop>for /f "delims=" %i in ('""C:\Program Files (x86)\Common Files\microsoft shared\IME14\IMEJP\imjpuexc.exe" getkanainput ^| find "a""') do (

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

>>273
pushd . して実行ファイルのとこに cd /d して終わったら popd で回避した…

275 :デフォルトの名無しさん:2015/09/10(木) 22:23:16.85 ID:rVL3fJUt
>>274
推測のとおり閉じ括弧だね

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

276 : ◆dPizytaM5k :2015/09/10(木) 22:47:59.30 ID:W0FLNmLq
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

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

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

278 :デフォルトの名無しさん:2015/09/11(金) 02:02:59.54 ID:8iQOGves
バッチの引数を逆から処理する方法みっけ

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

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

280 :デフォルトの名無しさん:2015/09/12(土) 22:56:10.69 ID:cTPbZ0nl
ソースだせよ

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

282 :デフォルトの名無しさん:2015/09/19(土) 18:16:48.17 ID:rJvITlaV
すみませんbatファイル実行後に作成されるゴミについて質問させて下さい

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

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

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

283 :デフォルトの名無しさん:2015/09/19(土) 18:52:57.68 ID:kEgCjcR8
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

284 :デフォルトの名無しさん:2015/09/19(土) 20:11:26.20 ID:rJvITlaV
>>283
ゴミが出なくなりました
ありがとうございます

285 :デフォルトの名無しさん:2015/09/19(土) 21:24:39.32 ID:qCXEI70o
わけがわからん
>>282でファイルcdが作られるとは思えんのだが?

286 :デフォルトの名無しさん:2015/09/19(土) 21:31:23.75 ID:CQxRgVL+
>285
1行目を良く見給へ

287 :デフォルトの名無しさん:2015/09/19(土) 21:36:13.70 ID:qCXEI70o
>>286
あれそのままbatの中身だったんか?
おれはプロンプト表示かと思ってた

288 :デフォルトの名無しさん:2015/09/19(土) 23:26:27.82 ID:kEgCjcR8
>>287
ぶっちゃけ作られるのはおかしい。
ただcdが作られるならcdではなくpushdで移動した方が良いし
また質問されるのもスレ汚ししたくないからcd削除で二重に提案した

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

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

290 :デフォルトの名無しさん:2015/09/20(日) 00:46:26.96 ID:PEdhYvSo
>>288
一応それぞれの意味は調べてやったつもりではありましたのでちゃんと変更しました

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

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

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

291 :デフォルトの名無しさん:2015/09/26(土) 20:40:09.22 ID:sjK3MFI2
質問させてください。かなり初心者なので申し訳ないのですが。

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


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


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

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


コマンド:

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

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

292 :デフォルトの名無しさん:2015/09/26(土) 22:30:11.72 ID:HzL2ulcE
バッチの不都合じゃなくてソフトウェアの問題だろ
問題が分かってるのにこのスレに書き込むとは
初心者って怖いな
見たくないなら/min使え

293 :デフォルトの名無しさん:2015/09/26(土) 23:03:22.25 ID:vRcULbaf
>>291
こっちの環境は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"
で殺せるけど

294 :デフォルトの名無しさん:2015/09/26(土) 23:03:27.42 ID:sjK3MFI2
>>292
そうですね、バッチというよりはAdobeの問題なのでしょうが、コマンドの書き方で問題を解決したく、質問しました。

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

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

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

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

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

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

297 :デフォルトの名無しさん:2015/09/27(日) 19:51:17.88 ID:0MtmseWf
>>292

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

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



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

298 :デフォルトの名無しさん:2015/09/27(日) 20:52:07.03 ID:cWKfNT9F
>>297
そのソフトを買ったメーカーにそれぞれ聞け

299 :デフォルトの名無しさん:2015/09/27(日) 20:52:50.94 ID:cWKfNT9F
>>298
ごめんなさい、そのソフトのメーカーに聞け、の誤りです

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

301 :300:2015/09/28(月) 00:02:40.56 ID:pVReont5
ひとつ言い忘れてた
こっちの検証環境はXPなので32bit環境です

302 :デフォルトの名無しさん:2015/09/28(月) 21:17:36.12 ID:XtRLoMNV
rmdirについて質問があります。
長文失礼いたします

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

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

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

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

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

よろしくお願い致します。

303 :デフォルトの名無しさん:2015/09/28(月) 21:52:33.44 ID:pVReont5
>>302
他がファイル/フォルダをオープンしていると、削除が拒否されずに保留されることがある
これは他プログラムがどのようにオープンしているのかによって違ってくる
FILE_SHARE_DELETE(削除共有)フラグ付きでオープンしているものを削除しようとすると
エラーにはならずに保留される(クローズ後に削除される)

304 :デフォルトの名無しさん:2015/09/28(月) 22:33:43.19 ID:ynPwQZO2
>>302
つかerrorlevel使えば?

305 :デフォルトの名無しさん:2015/09/28(月) 22:37:43.41 ID:ywrXX2XI
>>303

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

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

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

306 :デフォルトの名無しさん:2015/09/28(月) 22:42:03.73 ID:ywrXX2XI
>>304
ご回答ありがとうございます。

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

307 :デフォルトの名無しさん:2015/09/29(火) 00:01:30.08 ID:bgSeuQIx
>>305-306
なら、逆の発想で dir で行けば?

308 :デフォルトの名無しさん:2015/09/29(火) 00:39:57.93 ID:8SFmbeyJ
@rem findの終了コードが0ならエラー
rmdir "フォルダ名" 2>&amp;1|find /V "" &amp;&amp; echo 失敗

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

309 :デフォルトの名無しさん:2015/09/29(火) 00:43:01.28 ID:8SFmbeyJ
文字化けすまそ、半角アンド2つで
find /V "" && echo 失敗

310 :デフォルトの名無しさん:2015/09/29(火) 00:49:47.95 ID:8SFmbeyJ
すまそ、ほかにも化けてた
rmdir "フォルダ名" 2>&1|find /V "" && echo 失敗

311 :デフォルトの名無しさん:2015/09/29(火) 01:06:12.17 ID:bgSeuQIx
>>308-310
いくつか理由はあるが、とてもそれが有用なノウハウだとは思えない。

312 :デフォルトの名無しさん:2015/09/30(水) 21:24:53.14 ID:lqNGdTXz
>>307-311
ご助言ありがとうございます。

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

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

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

よろしくお願いします。

313 :デフォルトの名無しさん:2015/09/30(水) 21:32:01.35 ID:RUmQvCwV
>>312
裏では何が走ってるのか判らないので諦めたほうがいい
例えば、インデックスサービス、ウィルススキャン、IMEなど

314 :デフォルトの名無しさん:2015/09/30(水) 22:01:54.29 ID:SiaxX88C
>>312
並行処理には色々あるから、どういうシチュエーションを想定しているかが分からない以上答えようが無い。
一般論としては >>313 の言う通り。

315 :デフォルトの名無しさん:2015/09/30(水) 22:19:02.70 ID:lqNGdTXz
>>313.314

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

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

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

316 :デフォルトの名無しさん:2015/09/30(水) 22:31:46.85 ID:lqNGdTXz
続けてのご質問失礼します。

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

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

よろしくお願い致します。

317 :デフォルトの名無しさん:2015/09/30(水) 22:45:30.90 ID:lqNGdTXz
>>316

自己解決できました。

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

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

319 :デフォルトの名無しさん:2015/10/01(木) 22:27:35.44 ID:GOCfcoes
@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

320 :デフォルトの名無しさん:2015/10/01(木) 22:50:13.28 ID:SNj2dVz3
>>319
作成日と言ってるから、
dir /a-d /o-d /tc /b
でしょう
あとファイル名に&や^なんかが使われてると・・・

321 :320:2015/10/02(金) 00:42:34.05 ID:CZzG8B2R
文句だけじゃなんだからダメ文字を回避する方法

@echo off
if "%~1" equ "" (set folder=.) else (set folder="%~1")
if "%~2" equ "" (set n=10) else set /a n=%2
if %n% leq 0 set n=99999

for /f %%i in ('dir /a-d /o-d /tc /b %folder%^|find /v /c ""') do set /a n=%%i-%n%
if %n% lss 0 set n=0
dir /a-d /o-d /tc /b %folder%|sort /+99999|more +%n%|sort /+99999

なお、
dir /a-d /o-d /tc /b %folder%
のかわりに
dir /a-d /o-d /tc %folder%|findstr "^[0-9]"
とすればdirの出力形式で表示される
出力をフルパスで出す方法はちょっとわからない(for文で%~fIとか使うことは可能だがダメ文字が・・・)

322 :318:2015/10/02(金) 01:12:11.43 ID:2daHSNuh
>>319-321
ありがとうございます。
詳細なソート方法は分かったんですが表示するファイル数を限定出来なかったのでとても助かります。

323 :デフォルトの名無しさん:2015/10/02(金) 01:46:43.29 ID:xI4RFHCV
フリーソフトの tail や head を手に入れてもできる

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

324 :デフォルトの名無しさん:2015/10/02(金) 04:08:29.67 ID:ywG60DzM
@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

325 :デフォルトの名無しさん:2015/10/02(金) 13:30:43.97 ID:Q66dAmly
バッチファイル自身が管理者権限で実行されているかどうかを判断するための
ポイントを教えて下さい。

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

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

Windows10 と Windows7 です。

326 :デフォルトの名無しさん:2015/10/02(金) 16:31:13.60 ID:CZzG8B2R
>>324
引数で渡さずに環境変数で渡すようにしないと
a^b.txt

327 :デフォルトの名無しさん:2015/10/02(金) 17:03:45.75 ID:2DuVHDsa
>>325
whoami /GROUPS|find "High" >NUL||(echo バッチファイル自身が管理者権限で実行されていません) && goto RUNAS
とか (アンド記号は半角で)
判定はMandatory Labelから

328 :デフォルトの名無しさん:2015/10/02(金) 17:34:44.56 ID:c57yEoAI
>>324 行番号で代用すれば、わざわざ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
)

329 :デフォルトの名無しさん:2015/10/02(金) 17:39:55.07 ID:0pgpzEB+
>>327
ありがとうございました、スッキリうまくいきました。
勉強になります。

330 :デフォルトの名無しさん:2015/10/02(金) 18:54:09.58 ID:2DuVHDsa
>>329
http://scripting.cocolog-nifty.com/blog/2010/01/post-f725.html
この辺を参考にしただけ
管理者権限か否かの判定のみなら>>327で用は足りると思うけど、念のため追記

331 :デフォルトの名無しさん:2015/10/02(金) 20:04:45.82 ID:0pgpzEB+
>>330
重ねてありがとうございます。

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

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

332 :デフォルトの名無しさん:2015/10/05(月) 19:28:34.57 ID:SpCxBh4Z
PUSHD 作業フォルダ
〜いろんな作業〜
POPD

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

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

333 :デフォルトの名無しさん:2015/10/05(月) 21:41:49.86 ID:bTT+ZGiB
>>332
ホントに?

334 :デフォルトの名無しさん:2015/10/06(火) 02:00:18.79 ID:mXRqVUnf
>>332
echo on
して本当に popd してるのか確認したのか?

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

336 :デフォルトの名無しさん:2015/10/06(火) 03:03:04.87 ID:QJFP7AtV
別のbatでもstartを使わずにcallでも大丈夫な方法もあった
call|call hoge.bat

337 :デフォルトの名無しさん:2015/10/07(水) 19:03:48.86 ID:nsjlsK3x
イベントでスクリプトを実行するアプリでログオンさせたいんですが、
powershellのスクリプトでログオンて出来ますかね?

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

338 :デフォルトの名無しさん:2015/10/07(水) 19:43:48.86 ID:RUI9/d0r
スレタイ読めカス

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

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

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

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

341 :デフォルトの名無しさん:2015/10/24(土) 22:36:15.42 ID:p7rCtkQ8
>>340 回答ありがとうございます。
そのsendなんちゃらってなんでしょうか。
ヒント頂けないでしょうか。
お手数ですいません…

342 :デフォルトの名無しさん:2015/10/24(土) 23:39:00.99 ID:mJxFzgC6
>>341
SendKeysのことだと思うけど…
たぶんあなたには無理だと思うから、
諦めるか条件を緩める手段をとったほうが良いかと

343 :デフォルトの名無しさん:2015/10/25(日) 21:17:07.24 ID:CKwhkT15
imjpuexc?

344 :デフォルトの名無しさん:2015/10/26(月) 00:24:08.25 ID:zhu5kfAS
imjpuexcは辞書をファイルを使用するかどうかを登録するだけで単語登録できないような

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

346 :デフォルトの名無しさん:2015/10/26(月) 10:35:38.89 ID:g04VwT0z
事件の香りがするクンクン

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

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

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

349 :デフォルトの名無しさん:2015/11/24(火) 01:57:14.13 ID:E5eNrkbC
/a-d

350 :デフォルトの名無しさん:2015/11/24(火) 03:42:46.10 ID:ZLe33KjQ
>>348
set err=0
for /f %%a in ('dir /ad /b') do set err=1
set err
set err=

351 :デフォルトの名無しさん:2015/11/24(火) 04:04:14.14 ID:DOEe32Zv
>>348
何がしたいのかいまいちよく分からないんだが、

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

352 :デフォルトの名無しさん:2015/11/24(火) 19:52:42.07 ID:K+m1Fn13
>>350-351
ありがとうございます。言葉が足らず申し訳ありません

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

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

353 :デフォルトの名無しさん:2015/11/24(火) 23:26:24.37 ID:uLTusmQs
dir +d と dir -d で二回errorlevelを判定したらどうなのだろう

354 :デフォルトの名無しさん:2015/11/26(木) 21:08:59.38 ID:Xx7BS4XN
>>348
Info-ZIP の zip.exe を使用した例

cd /d

355 :デフォルトの名無しさん:2015/11/26(木) 21:11:45.12 ID:Xx7BS4XN
>>348
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%"

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

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

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

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

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

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

357 :デフォルトの名無しさん:2015/12/02(水) 20:00:00.33 ID:G6CksgA0
echo "%ABC%"

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

358 :デフォルトの名無しさん:2015/12/02(水) 21:32:16.52 ID:uZhzBB52
>>357
同じです。

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

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

360 :デフォルトの名無しさん:2015/12/02(水) 23:45:06.29 ID:l4g7T0Fa
command.com懐かしいな
cmd.exeになってからコマンドライン直書きでも展開されるようになったような

361 :デフォルトの名無しさん:2015/12/03(木) 06:14:24.04 ID:rFz6rQx1
ダッセーPROMPTw

362 :デフォルトの名無しさん:2015/12/03(木) 23:14:20.69 ID:351ZeN4c
>>360
記憶がごっちゃになってもうどっちがどっちだったかわからん

363 :デフォルトの名無しさん:2015/12/04(金) 02:45:09.97 ID:K5fLtIai
>>360
そうだったっけ?
全然そんな記憶無いんで、普通に直打ちで変数展開されてたと思う

364 :デフォルトの名無しさん:2015/12/04(金) 04:22:29.66 ID:p/GS1A93
win95のcommand.comで直接echo %PATH% してみたけどちゃんと展開された

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

366 :デフォルトの名無しさん:2015/12/09(水) 01:33:29.59 ID:DMnL3no7
フォルダを指定するとそれ以下の階層の指定したファイルを他のソフトに橋渡ししたいのですがどのように学べば作れますかね?

367 :デフォルトの名無しさん:2015/12/09(水) 03:34:34.37 ID:xJXhqdvp
> それ以下の階層の指定したファイル
どういう指定?拡張子?for /r で出来ると思う

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

369 :デフォルトの名無しさん:2015/12/14(月) 22:34:22.40 ID:A58wbYtQ
@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

370 :デフォルトの名無しさん:2015/12/15(火) 00:46:59.16 ID:o42ChFzI
ついでに秒差から年月日時分秒を逆算するバッチ
@echo off
rem call :a4 yyyymmddhhmmss +sec year month day hour minute second
call :a4 19700101000000 2147483647 y m d h n s
echo %y% %m% %d% %h% %n% %s%
pause
goto :eof

:a4
setlocal
set /a b=10000,c=100,s2=%2
call :a2 1 %1
call :a3 y1 m1 d1 d1
set /a s1+=h1*3600+n1*60,d3=d1+(s1+s2)/86400,s3=(s1+s2)%%86400
set /a h3=s3/3600,n3=s3/60%%60,s3%%=60
call :a5 d3 y3 m3 d3
endlocal & set /a %3=%y3%,%4=%m3%,%5=%d3%,%6=%h3%,%7=%n3%,%8=%s3%
goto :eof

:a5
set /a d=%1,a=305,b=365,c=146097,e=(d+a)/c,f=(d+1+a)/c-e,d-=e
set /a d+=(d-f+a)/36524,c=1461, e=(d+a)/c,f=(d+1+a)/c-e,d-=e
set /a d+=(d-f+a)/b*3+(d+244)/b+(d+183)/b+(d+91)/b+(d+30)/b-1
set /a %2=1+d/372,%3=1+d/31%%12,%4=1+d%%31
goto :eof

rem ここに >>369 の :a2 と :a3 をコピペ

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

372 :デフォルトの名無しさん:2015/12/15(火) 05:13:05.16 ID:DyLWSAr/
a=m+9 は3月起点にする為ですよね
48ヶ月(4年)毎に+1日,1200ヶ月(100年)毎に-1日(4年毎の打ち消し),4800ヶ月(400年)毎に+1日
なるほどです

373 :デフォルトの名無しさん:2015/12/16(水) 20:07:03.65 ID:fy5f41q6
@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みたいにスマートに書ける頭良い奴羨まし

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

374 :デフォルトの名無しさん:2015/12/17(木) 09:52:29.59 ID:pa9hyiSF
>>369
フェアフィールドの公式でもっと簡略化できる

:a3
set /a a=(12-%2)/10,y=%1-a,m=%2+a*12
set /a %4=365*(y-1)+y/4-y/100+y/400+306*(m+1)/10-63+%3

逆算では>>370の:a5の代替となる公式は知らないなあ

375 :デフォルトの名無しさん:2015/12/17(木) 14:48:37.51 ID:ZSvcUJP0
せっかくなんで、誰でも思いつく変換テーブルを使った奴も

:a3
set n= 00 31 61 92122153184214245275306337
set /a y=%1,m=%2,d=%3,y+=(%2+9)/12-1,m=(%2+9)%%12*3
call set /a %4=y*365+(y/4)-(y/100)+(y/400)+%%n:~%m%,3%%+d-1-306
goto :eof

376 :デフォルトの名無しさん:2015/12/17(木) 22:03:19.42 ID:6xd5GL4Z
>>374
>>375
名人芸みたい
set /a で , を使えるのは知らなかった

377 :デフォルトの名無しさん:2015/12/18(金) 20:41:02.17 ID:5v+P6SwD
>フェアフィールドの公式
理解するのに少し時間がかかったけどひとつ賢くなりました。ありがとう

378 :デフォルトの名無しさん:2015/12/19(土) 23:36:20.61 ID:hIm+VLiM
>>374
>>369は差分を取ってるだけだから定数部分は要らない
簡略化したいなら(y-1)はyでいいし、-63も不要だな
でもそうすると>>370で使えなくなるけど

379 :デフォルトの名無しさん:2015/12/20(日) 01:39:29.37 ID:ZqBWpEZf
@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

380 :デフォルトの名無しさん:2015/12/21(月) 08:37:29.96 ID:h62kjpL5
370の:a5が全く分からん。eは0年3月から400年周期が何回あるか?で合ってる?
通日から年月日求める式の解説してるサイトとかあったら教えて欲しい

381 :デフォルトの名無しさん:2015/12/21(月) 09:39:16.04 ID:M1iYKpBu
@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

382 :デフォルトの名無しさん:2015/12/21(月) 10:07:38.96 ID:M1iYKpBu
>>380
> 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年周期での値

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

私も知りたい

383 :デフォルトの名無しさん:2015/12/21(月) 10:32:14.51 ID:M1iYKpBu
>>382>>370の:a5の事です
2chは2種類あるんで、>>を付けないと番号が変わることがある

384 :デフォルトの名無しさん:2015/12/21(月) 16:40:51.02 ID:xEP90Lc1
俺が判った範囲での数値

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

385 :デフォルトの名無しさん:2015/12/21(月) 16:48:15.00 ID:xEP90Lc1
d+305=0年3月1日からの日数
 ↓
d+1+305=0年3月1日からの日数
に訂正

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

387 :デフォルトの名無しさん:2015/12/21(月) 17:00:54.37 ID:M1iYKpBu
>>383
よく考えるとシフト演算式の>>の右側の数値が勝手に変わったりするんだな
やだなあ

388 :デフォルトの名無しさん:2015/12/22(火) 23:27:20.70 ID:GbSBVwIU
> 通日から年月日求める式の解説してるサイトとかあったら教えて欲しい
俺も
誰か概要でも良いので解説お願いします

389 :デフォルトの名無しさん:2015/12/23(水) 11:08:49.70 ID:aiQM95lL
echo aaa >> C:\test.log

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

390 :デフォルトの名無しさん:2015/12/23(水) 12:48:25.38 ID:dDv8KSpn
>>388
躓いてるのは、
30,91,183,244,305,372の数値の意味だろ?
>>384で解説されてるじゃん

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

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

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

392 :デフォルトの名無しさん:2015/12/23(水) 16:15:56.66 ID:dDv8KSpn
月の説明がズレたけどわかるよね?
(d+244)/12 が5月以降
(d+183)/12 が7月以降

ってことね

393 :デフォルトの名無しさん:2015/12/23(水) 18:34:12.63 ID:2AzhQbBP
もはやバッチスレじゃなくなってる

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

395 :デフォルトの名無しさん:2015/12/24(木) 19:51:50.54 ID:k0eMsSdC
>>368 はこいつと同一人物なんだろうな
http://potato.2ch.net/test/read.cgi/software/1387352479/588-594

396 :デフォルトの名無しさん:2015/12/25(金) 01:37:29.49 ID:xjel9170
>>394
これを使えば、キー入力が出来ます。

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

397 :デフォルトの名無しさん:2015/12/25(金) 05:48:22.51 ID:pIvyUHeA
インストーラーのsetup.exeにQuietInstallのオプションが無いか確認して、無いならAutoHotkey使うとか

398 :デフォルトの名無しさん:2015/12/25(金) 14:17:34.47 ID:O30Ofv/O
バッチよりWSHでSendKeysじゃないかな

399 :デフォルトの名無しさん:2015/12/25(金) 23:52:12.53 ID:Q7FXbHS7
今日の大失敗(初歩のバッチ)

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

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

400 :デフォルトの名無しさん:2015/12/26(土) 00:46:33.93 ID:X4YvfGHD
俺も先日vvvに3万個くらいやられたけど、大部分がテンポラリファイルだったから助かったよ

401 :デフォルトの名無しさん:2015/12/26(土) 01:15:18.22 ID:DVIYmgTf
>>399
間違って大量削除したときのために復元ソフトはいつでも動かせるようにしとけ

402 :デフォルトの名無しさん:2015/12/26(土) 02:02:37.73 ID:ORfhhjc6
>>399
cd 〜 && call 削除のための処理
とかすればいいんじゃね

403 :デフォルトの名無しさん:2015/12/26(土) 20:19:18.74 ID:GqwbH3xG
xxx\yyy\zzz フォルダがあっても駄目だろ
せめて cd /d にしろよ

404 :デフォルトの名無しさん:2015/12/27(日) 00:32:23.81 ID:WRaoLAxw
>>402
cd 〜 && call だと cd がエラーでcallは実行されないのに
cd 〜 && echo abc だとcd がエラーでもecho実行、なぜ?

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

405 :デフォルトの名無しさん:2015/12/27(日) 09:53:50.86 ID:g59Yk3Y1
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

406 :デフォルトの名無しさん:2015/12/28(月) 13:00:25.63 ID:dgI6+oKo
>>404
> ファイルかフォルダか区別できないような気がする

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

407 :デフォルトの名無しさん:2015/12/28(月) 13:47:32.36 ID:c+74yIFV
>>404
if existによるディレクトリの確認はこの辺参照
http://d.hatena.ne.jp/otn/20050209/p1

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

409 :デフォルトの名無しさん:2016/01/02(土) 22:28:34.67 ID:R0FqLiWH
スルーされとる

410 :デフォルトの名無しさん:2016/01/04(月) 23:45:48.45 ID:uSRue82f
>>406-408
ありがとうございます、いろいろな方法がありますね、試してみます。
遅くなってごめんなさい

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

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

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

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

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

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

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

413 :デフォルトの名無しさん:2016/01/19(火) 22:03:45.19 ID:IRnEE3xb
http://potato.2ch.net/test/read.cgi/software/1451969491/
http://potato.2ch.net/test/read.cgi/software/1387352479/

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

414 :デフォルトの名無しさん:2016/01/20(水) 00:58:45.36 ID:QphOxfb9
>>411
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

415 :デフォルトの名無しさん:2016/01/20(水) 03:16:35.15 ID:CGJNTMJr
>>412
@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フォルダに移動させる仕様の方が処理が早い

416 :デフォルトの名無しさん:2016/01/20(水) 05:25:10.21 ID:2Q8BlnOV
@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

417 :デフォルトの名無しさん:2016/01/20(水) 07:14:28.26 ID:Mi5py/5P
for %%i in ("フォルダ1\*") do move "フォルダ2\%%~nxi" "フォルダ3\"

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

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

419 :デフォルトの名無しさん:2016/01/24(日) 00:41:52.56 ID:krEiQR2u
訂正

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

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

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

よろしくお願いします

420 :デフォルトの名無しさん:2016/01/24(日) 01:27:04.99 ID:5+KozvoU
>>419
>>418
difして差分取れ

421 :デフォルトの名無しさん:2016/01/24(日) 05:34:39.03 ID:fqtpw7CO
なぜバッチでするの?

PowerShell じゃダメなのか?

422 :デフォルトの名無しさん:2016/01/24(日) 08:03:06.77 ID:bklX6SGr
>>421
それができるならやってる

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

424 :デフォルトの名無しさん:2016/01/25(月) 03:33:01.80 ID:FJlvjxIx
>>418
>>419
ファイル名が例題通りなら
setlocal enabledelayedexpansion

SET Fldr=%USERPROFILE%\Pictures
SET Ext=*.jpg
SET RenBat=RenStrYYMMDD.cmd

echo;cd /d "%Fldr%" > "%RenBat%"

for /f %%0 in ('dir /b "%Fldr%\%Ext%"') do (
set DelNGP=%%~n0
set DelNGP=!DelNGP:年=!
set DelNGP=!DelNGP:月=!
set DelNGP=!DelNGP:日=!
set Str=!DelNGP!
for /l %%C IN (0,1,9) DO @(
set Str=!Str:%%C=!
)
call set YYYYMMDD=%%DelNGP:!Str!=%%
if "!DelNGP!"=="!Str!!YYYYMMDD!" (
echo;ren "%%~nx0" "!Str!!YYYYMMDD:~-6!%%~x0" >> "%RenBat%"
) else (
echo;ren "%%~nx0" "!YYYYMMDD:~-6!!Str!%%~x0" >> "%RenBat%"
)
)
で、出来たバッチファイルの怪しいヤツを編集して実行すればなんとか。
ファイル名がこれに当てはまらないなら、正規表現の出番なので
提示されている、PSとかperl、sed、awk等を仕入れて専用スレでお願いします。

425 :デフォルトの名無しさん:2016/01/25(月) 03:54:11.66 ID:FJlvjxIx
実行結果は

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

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

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

になります。

426 :デフォルトの名無しさん:2016/01/27(水) 05:07:29.42 ID:fJiggefa
@参照中のNTPサーバーを調べる ANTPサーバーとの時刻のズレを表示する バッチなんですが
ズレを表示するコマンドは下記のように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

427 :デフォルトの名無しさん:2016/01/27(水) 06:18:16.88 ID:3u678Fz6
for /f "delims=," %%A in ('w32tm /query /source') do ( echo サーバー: %%A
w32tm /monitor /computers:%%A
)
pause

428 :デフォルトの名無しさん:2016/01/27(水) 06:39:40.57 ID:3u678Fz6
for /f "delims=," %%A in ('w32tm /query /source') do ( echo サーバー: %%A
w32tm /monitor /computers:%%A | findstr "NTP:"
)
pause

429 :デフォルトの名無しさん:2016/01/27(水) 06:50:27.07 ID:3u678Fz6
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

430 :デフォルトの名無しさん:2016/01/27(水) 07:38:45.54 ID:fJiggefa
>>427,428
ありがとうございます
表示もスッキリして頂いてとても勉強になります

431 :デフォルトの名無しさん:2016/01/27(水) 23:21:20.89 ID:bcAMZw4L
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

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

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

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

434 :デフォルトの名無しさん:2016/01/29(金) 21:46:01.22 ID:j1UQgjYg
>>431
ありがとうございます
必要な情報だけ一行に集約されてとても見やすいです
こういうふうに書けるよう理解を深めたいです

435 :デフォルトの名無しさん:2016/01/30(土) 03:15:06.90 ID:hg3OxSOg
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

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

436 :デフォルトの名無しさん:2016/01/30(土) 10:20:23.91 ID:zXGU0vQS
すみません。
ディレクトリの中を見ていき、2GB以下なら圧縮ということをしたく

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

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

437 :デフォルトの名無しさん:2016/01/30(土) 23:03:45.58 ID:ffKBMc7H
再帰で圧縮せずに2GB未満フォルダのリストを作り再帰終了後にリストを元に圧縮
どうでも良いけど、超&以下、以上&未満な

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

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

よろしくお願いします

440 :デフォルトの名無しさん:2016/02/06(土) 11:56:20.12 ID:ilYyGYOR
>>439
@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%/

441 :デフォルトの名無しさん:2016/02/06(土) 12:13:31.62 ID:hbtVaDtk
>>440
作りたかったものが作れました
ありがとうございます

442 :デフォルトの名無しさん:2016/02/07(日) 03:34:31.41 ID:xzt+ySx/
0001〜9999までをカウントするのってどうやればいいですか
常に4桁の文字列が得られるようにしたいです

443 :デフォルトの名無しさん:2016/02/07(日) 03:59:09.24 ID:S13nymNF
>>442
echo %random% を使う
0、10000以上であればやり直す

444 :デフォルトの名無しさん:2016/02/07(日) 04:06:32.80 ID:oI7YLQ9S
>>442
質問の意味がいまいち不明だがこういうことか?
@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

445 :デフォルトの名無しさん:2016/02/07(日) 15:37:11.81 ID:YEUGR+cI
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

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

447 :デフォルトの名無しさん:2016/02/07(日) 17:41:06.71 ID:oI7YLQ9S
>>446
どうしてもって言うのなら、ファイルをフラグに使うとなんとかなるかな
@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

448 :デフォルトの名無しさん:2016/02/07(日) 17:51:21.78 ID:oI7YLQ9S
別の方法として
tasklistからコマンドが消えるのを監視するのがいいかも

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

449 :デフォルトの名無しさん:2016/02/07(日) 20:46:37.41 ID:csmRYXFo
https://www.google.co.jp/#q=tee+%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89+windows

450 :446:2016/02/08(月) 00:34:24.61 ID:tvZTUQzk
>>447-448
やはりちょっと別の工夫が必要なんだねぇ。

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

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

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


御二方、どうもありがとう。

451 :デフォルトの名無しさん:2016/02/08(月) 01:25:16.89 ID:DULBP8IA
>>450
tasklistの結果からそのコマンドのイメージ名が消えるまで適当に表示させながら
ループさせるんじゃいけないの?

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

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

453 :デフォルトの名無しさん:2016/02/08(月) 01:30:33.89 ID:T6p//Vzm
>>451
あ、ダブった

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

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

456 :デフォルトの名無しさん:2016/02/08(月) 01:46:27.75 ID:U7IijhSa
title 処理中です。ウィンドウは絶対に閉じないでください。
echo 処理中です。ウィンドウは絶対に閉じないでください。

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

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

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

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

458 :デフォルトの名無しさん:2016/02/08(月) 21:58:26.82 ID:aeLE2jq+
>>456
高度なプログラムが動き出しちゃうときあるから

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

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

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

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

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

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

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

mmp
lud20160219173145
このスレへの固定リンク: http://5chb.net/r/tech/1424858999/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net ->画像>2枚 」を見た人も見ています:
[EXEファイル可] JavaScript統合開発環境 DX Studio [転載禁止]©2ch.net (27)
本買ってプログラミング始めた20ページで挫折した [転載禁止]©2ch.net (59)
初心者の俺だけど自作で自動発注作りたい!! [転載禁止]©2ch.net (10)
PDF/EPS/PostScriptスレッド (58)
言語を覚えたけど何も作れない(T_T) (67)
サイト作れる人と一緒に事業やりたい (59)
オブジェクト指向の活用方法を教えて下さい (386)
Android SDK以外でのアプリ作成を全面禁止へ (136)
【マック】Macintoshプログラミング質問箱 (599)
MFC vs .NET (307)
フローチャートってどんな時に描く? (59)
php使ってる奴はアホ、これからはRuby on Rails! (187)
Java⇔RDBのMapping-Frameworkを語るスレ Vol.6 (16)
【安定版】ActiveBasicその12【4.24】 (970)
結局プログラム作るのってWinとLinuxどっちがいい? (413)
Message Passing Interface (MPI) 統合スレ (533)
統合開発環境Appmethodスレ (16)
CORBAなら俺に聞け (142)
マルチプラットフォーム プログラミング言語 haXe (231)
相田みつを with プログラム (355)
Microsoft Silverlight その9 (562)
フリーソフトなどに使われる言語は? (245)
Prologの宿題片付けます 第二編 (57)
【VB.NET】LINQ友の会【C#, C♯, C#】 (916)
新言語を開発したい (580)
【StarSuite Basic/OpenOffice.org Basic】 (476)
アセンブラ 13 (207)
BrainFuck Part.3 <[+-.,]> (532)
C/C++のライブラリ総合スレ (302)
.netグレープシティコンポーネント (165)
Jenkins (127)
Hack (プログラミング言語) (90)
C++によるDICOMファイル解析 (190)
【.cmd】 バッチファイルスクリプト %13 【.bat】
IDまちだお(´・ω・`) [転載禁止]©2ch.net (34)
この板は乗っ取った [転載禁止]©2ch.net (13)
15歳女子です、正規表現について質問があります。 [転載禁止]©2ch.net (22)
【初心者歓迎】Small Basic Part 2 【片手間】 [転載禁止]©2ch.net (49)
【.cmd】 バッチファイルスクリプト %5 【.bat】
【Enterprise】Java EEスレ part1【開発】©2ch.net (66)
【緊急】スタバで「いつもありがとうございます♡」とカップに書かれたワイ、ガチでワンチャンだった模様 [無断転載禁止]©2ch.net [992568311]
オナオナ開発プロジェクト [転載禁止]©2ch.net (210)
ニートの俺がプログラミング言語を作るんだけど [転載禁止]©2ch.net (44)
[次世代版] デモシーン(メガデモ)を語る #1 [転載禁止]©2ch.net (35)
【Java】JBuilder Part8 [転載禁止]©2ch.net (56)
【ER図】なんでもリレーション貼るの害悪じゃないかな? [転載禁止]©2ch.net (32)
【会津】パソコン甲子園2004【若松】 (783)
花札ゲームプログラム Xプロジェクト 人探し (21)
GARMIN社のGPSのプログラム (663)
【論理】Prolog【初心者】 (800)
【COBOLから】バッチ処理【Javaまで】 (163)
Io Language (137)
初心者の俺が初めて覚えるプログラム言語 (506)
ファミリーベーシック (144)
【普通のやつらの】 Arc Language 0 【上を行け】 (261)
洋書推薦図書/洋書必読書のためのスレッド 1 (143)
いまだにVC6から離れられない奴の数→ (323)
■WindowsCEプログラミング(EVC PB3含む)Ver2.2■ (645)
Smalltalk総合 Squeak Pharo (305)
構造化ウェブプログラミング言語Dart2 (970)
【コメント】doxygen【コンソメ】 (587)
日下部陽一著 作ってわかるCプログラミング(第6版) (552)
「Cでプログラミングするには人生は短すぎる」か? (332)
float 使うヤツはドシロートかおぢさん (163)
mallocの後にfree不要と言うバカいるの?Part2 (665)
04:29:42 up 1 day, 1:38, 10 users, load average: 70.25, 54.95, 67.00

in 0.072496891021729 sec @[email protected] on 091317