X



【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net
垢版 |
2017/03/11(土) 13:47:11.66ID:2LSSeyH1
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

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

それ以前の過去スレ
%10 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/
0072デフォルトの名無しさん
垢版 |
2017/05/09(火) 16:43:52.50ID:PScyAxKX
助けて下さい!
毎月第二木曜日の16:00になったら
Aフォルダに入っているgファイルにBフォルダに入っているgファイルを上書きする
batファイルを作って下さい
よろしくお願いします
0073デフォルトの名無しさん
垢版 |
2017/05/09(火) 17:29:08.98ID:bjRIYrg3
>>72
ファイル上書きのBAT(c:\xxx.bat)を作成してタスク登録する

schtasks /create /sc monthly /mo second /d thu /st 16:00:00 /tn title /tr "c:\xxx/bat" /ru username /rp userpassword
0075デフォルトの名無しさん
垢版 |
2017/05/12(金) 00:01:39.58ID:1meaH6LX
set txt="C:\scr\a.txt"
for /f "delims=, usebackq tokens=1,2,3,4,5,6,7,8" %%i in (%txt%) do (
set /a X="(%%j-%%i)+(%%l-%%k)+(%%n-%%m)+(%%p-%%o)"
)
echo %X%

forを使った計算について質問ですがa.txtから数値を抜き出し計算したいのですが最後の二つが空の場合があり
この場合は%%pと%%oですがその場合はエラーになって強制終了してしまいます
gotoを使う方法は思いついたのですが他に空だった場合にゼロを代入するなどは可能でしょうか?
0076デフォルトの名無しさん
垢版 |
2017/05/12(金) 08:46:27.33ID:trqCrhEU
set txt="C:\scr\a.txt"
for /f "usebackq tokens=1,2,3,4,5,6,7,8 delims=, " %%i in (%txt%) do (
set /a X=%%j-%%i+%%l-%%k+%%n-%%m, po=%%p-%%o
)
set /a XX=X+po
echo %XX%
0079デフォルトの名無しさん
垢版 |
2017/05/19(金) 17:52:47.97ID:ya28xWZT
特定のフォルダ内のテキストファイルを処理するバッチを作りましたが

@echo off
for /f "usebackq delims=" %%i in (`dir /B /S "E:\text_sc\*.txt"`) do (
echo %%i
call E:\work\syori.bat "%%i"
)

syori.batで処理したテキストを忘れないようにリスト化(syorizumi_list.txt)

aaa
bbb
ccc
のように処理したテキストの名前だけ縦に追記

次回から新しいテキストファイルが同じフォルダに出来た場合にsyorizumi_list.txtの
処理済みのテキストを除外して処理したいのですが
コマンドのアドバイスを頂けないでしょうか
0080デフォルトの名無しさん
垢版 |
2017/05/19(金) 19:38:36.49ID:HiKVEJh7
>>79
もし、その入力ファイルをその後弄らないのならファイル属性を弄るのがいい
例えば、アーカイブ属性を削るとか読み取り専用属性にするとか
そうすれば、forの中のdirに/aで分別できる
それが無理な場合は、こんなかんじでファイルに登録されているかどうかチェックするとかかな
findstr /x "%%~ni" syorizumi_list.txt >nul
if errorlenel 1 (
echo %%i
call E:\work\syori.bat "%%i"
)
)
0081デフォルトの名無しさん
垢版 |
2017/05/19(金) 21:01:19.56ID:ya28xWZT
>>80
レスありがとうございます

読み取り属性の方は最終手段としてとりあえず書かれたコマンドを追記してテストしていますが
エラーで強制終了してしまいます・・・
ヒントは頂けたのでちょっと考えてみます
0082デフォルトの名無しさん
垢版 |
2017/05/19(金) 21:32:14.27ID:8Dg0HTHO
処理済みファイルを下位ファルダに移動させるとかじゃダメなの?
それが1番楽だと思うけど
0083デフォルトの名無しさん
垢版 |
2017/05/19(金) 22:02:54.16ID:ya28xWZT
ダメではないですし意地になってるだけです・・・
すいません
どうしようもなければそうしおうと思います
0086デフォルトの名無しさん
垢版 |
2017/05/19(金) 23:51:05.34ID:ya28xWZT
>>84
修正したら動きました!
ありがとうございます
ただsyorizumi_list.txtに
aaa
bbb
ccc
とあったらaaaしか除外してくれませんね・・・
もう少し調べてみます
0088デフォルトの名無しさん
垢版 |
2017/05/20(土) 08:10:06.10ID:N++czmo3
>>87
眠すぎたのと集中力が散漫で気づいてないだけでした・・・
すいません
それと指摘の通り/c:に変えたら期待通りの動作になりました
サンクス!
0089デフォルトの名無しさん
垢版 |
2017/05/20(土) 21:37:37.96ID:HrYyDnOr
>>88
その言い方に嫌な感じがするんだがちゃんと引数の意味を調べて使ってるよね
/x /c:"%%~ni"としてるんなら、変な勘ぐりスマン
0091デフォルトの名無しさん
垢版 |
2017/05/22(月) 14:12:41.59ID:Q9T2A2Wt
こんなろくに理解せずそのまんまコピペして使ってるとトラップに引っかかるぞ
0092デフォルトの名無しさん
垢版 |
2017/05/22(月) 22:28:16.59ID:b+LuBt/G
下位フォルダに移動することも検討してるなんてレスから
/sが必要だとも思えんよね
0093デフォルトの名無しさん
垢版 |
2017/05/22(月) 22:30:42.85ID:b+LuBt/G
もし/sが意図通りだったら
aaa.txt
aaa\aaa.txt
なんて状況どうするんだって話だし
0094デフォルトの名無しさん
垢版 |
2017/05/26(金) 07:30:18.71ID:/NUGeMQI
>>89
> その言い方に嫌な感じがするんだがちゃんと引数の意味を調べて使ってるよね
同意
88の1行目で奴の人物像がすべて分かる
0096デフォルトの名無しさん
垢版 |
2017/06/15(木) 12:35:49.64ID:j04OpPTD
Cドラのdown配下のmp4とaviを
DドラTozakaruzoSaikonkaraに集約してコピーしたいときはどうするの?

XCOPY "C:\down\*.mp4” "D:\TozakaruzoSaikonkara\" /d /e /h /r /y
XCOPY "C:\down\*.avi" "D:TozakaruzoSaikonkara\" /d /e /h /r /y

ワイルドカード使いたいけど、eroやmoroのところが難しい
for文の記述の方がいいなど、よろしくお願いします。

C:/
├down/
│ └ ero/
│   └ 111.mp4
│ └ moro/
│   └ xx2.avi
│ └ zzz.mp4
│ └xxx.avi

D:/
├TozakaruzoSaikonkara/
│ └ 111.mp4
│ └ xx2.avi
│ └ zzz.mp4
│ └ xxx.avi
0102デフォルトの名無しさん
垢版 |
2017/06/15(木) 17:02:52.10ID:+JrLzVDI
>>98
おー、inの句に並列できるんですね
%%~fiのfはfileの意味でしょうか
いずれにしても無事コピーされました
応用も効きそうなので調べて利用させていただきます!
ありがとう
0105デフォルトの名無しさん
垢版 |
2017/06/17(土) 18:10:57.34ID:hP08xqzx
>>98
ドライブとディレクトリの違いであるのか、コピーと移動の違いであるのか、
教えていただけたらうれしいです。

>>96
で、同じドライブの別フォルダに移動したいとき、下記教えていただいたコマンドを変えて実行すると、
別ドライブのときのようにコピーがされない状況です。


cd /d c:\down
cd c:\TozakaruzoSaikonkara
for /r %%i in (*.avi *mp4) do move /y "%%~fi" c:

---------
下記の用に移動したい
C:/
├down/
│ └ ero/
│   └ 111.mp4
│ └ moro/
│   └ xx2.avi
│ └ zzz.mp4
│ └xxx.avi

C:/
├TozakaruzoSaikonkara/
│ └ 111.mp4
│ └ xx2.avi
│ └ zzz.mp4
│ └ xxx.avi
0107デフォルトの名無しさん
垢版 |
2017/06/17(土) 22:08:13.20ID:hP08xqzx
>>106
ありがとうございます!
比較して、代入の引数iに違いがあるし、もう少し勉強します。

また、わからないことなど出てくるかもしれませんが、その時はよろしくお願いいたします。
0108デフォルトの名無しさん
垢版 |
2017/06/17(土) 22:53:57.13ID:4uF4heHb
参考に言っておくが () の中の引数なんだが、ワイルドカード以外は要注意だ
例えば (*.avi *.mp4 sukebe.jpg) とかにすると
各ディレクトリに sukebe.jpg が無くても強引にコマンド実行してエラーになったりする
0110デフォルトの名無しさん
垢版 |
2017/06/26(月) 00:08:20.51ID:a4kJ2YgH
DIRコマンドでは*を使って検索みたいなことが出来ますね。


【コマンド】
C:\>dir /s /b C:\Windows\System32\host*

【実行結果】
C:\Windows\System32\hostname.exe
C:\Windows\System32\dllcache\hostname.exe
C:\Windows\System32\drivers\etc\hosts


他にもっと複雑な検索も出来るのでしょうか?
0111デフォルトの名無しさん
垢版 |
2017/06/26(月) 00:10:31.02ID:a4kJ2YgH
あと「DIR /?」で出てくるヘルプにはこの機能について触れられていないのはなぜなのでしょう?こんなに便利なのに。
0113デフォルトの名無しさん
垢版 |
2017/06/26(月) 00:27:25.02ID:q7GF7ZpN
>>111
windowsXPで恐縮なんだが、Windowsヘルプ(ヘルプとサポートセンター)では、
Dirの項目の説明の中で、ワイルドカード関係のものとして以下のものが書いてあったよ

解説
・複数の filenames を使用する
 複数の filenames を使用できます。スペース、カンマ、またはセミコロンでファイル名を区切ります。
 FileName でワイルドカード文字 (? と *) を使うと、ファイルのグループを表示することができます。
・ワイルドカードを使用する
 ワイルドカード (? と *) を使うと、ファイルとサブディレクトリのサブセットの一覧を表示できます。


ドライブ C のすべてのディレクトリで、拡張子が .txt のすべてのファイルの一覧を表示するには、次のように入力します。

dir c:\*.txt /w/o/s/p

各ディレクトリにある拡張子が .txt のファイル名が、アルファベット順にソートされた一覧がワイド形式で表示されます。
画面単位で一時停止し、キーが押されると次の画面が表示されます。
0114デフォルトの名無しさん
垢版 |
2017/06/26(月) 01:37:25.73ID:q7GF7ZpN
>>111
つまりコマンドの内蔵ヘルプは簡略版ってことなんだ

それと、なんかちょっと検索してみたら
Windows10には「ヘルプとサポート」がないらしい
なのでオンラインでのコマンドラインリファレンス
https://technet.microsoft.com/ja-jp/library/cc755121%28v=ws.10%29.aspx
XPの「ヘルプとサポート」には
「コマンドラインリファレンス」の他にも、
「新しいコマンドラインツール」
「コマンドシェルの概要」(ここにパイプやリダイレクトの説明が載っている)
ってのがあったんだけどなあ
0115デフォルトの名無しさん
垢版 |
2017/07/01(土) 02:44:43.86ID:mwCfh4Ih
質問があります。
ちょっと事情があってすべての引数をダブルクオーテーションで囲って実行しなければならなくなりました。
例えばこんな感じで

"C:\Software\ffmpeg\ffmpeg.exe" "-i" "%~1" "-vcodec" "utvideo" "-acodec" "pcm_s16le" "%~dpn1_test.avi"

ffmpegでは正常に動くことを確認したのですが他の一般的なソフトウェアもこのような起動方法で動作すると考えてもいいのでしょうか?
0117デフォルトの名無しさん
垢版 |
2017/07/05(水) 22:31:01.85ID:9GxT9B4i
とあるファイルの中身の文字列を置換したいのですが、何かいい方法はありますでしょうか?
とあるファイルはtxtファイルではないですが、テキストエディタで開くと文字列が書いてあります。
0118デフォルトの名無しさん
垢版 |
2017/07/05(水) 22:46:04.03ID:R8zuGv9z
全部テキストならともかくそれ以外のバイナリファイル内の置換はcmdじゃ無理だろ
WSHとかPower Shellとかで探せ
0120デフォルトの名無しさん
垢版 |
2017/07/06(木) 01:41:06.31ID:vizsBHcK
findstr である程度のことはできるけど、置換の条件とかが複雑になってくるとしんどい。
外部コマンドが使用可能なら、onigsedとか、SEDを使った方が多少は楽。
0121デフォルトの名無しさん
垢版 |
2017/07/06(木) 02:34:32.14ID:VUvDmuBp
>>119
拡張子になんの意味があると思ってるの?
なんかそのレベルの知識だったら、メモ帳でも使った方がいいと思うよ。
0123デフォルトの名無しさん
垢版 |
2017/07/09(日) 19:10:43.21ID:Gxva3cTk
バッチファイルからシリアルポートを簡単に読み書き出来る手段って無いですかね?
古くはCOM?を使う方法が有名ですがBluetoothなどで作られた仮想シリアルポート?には使えないようです
0126デフォルトの名無しさん
垢版 |
2017/07/16(日) 11:23:45.75ID:FHjtOHLZ
そもそもバッチファイルって何?
CでもBasicでもなく、メモ帳の拡張子をbatに変えるだけで良くて、
コマンドブロンプトとかいう、MS-DOSと何が違うのかわからないような画面で動いて、
何なの?
0136デフォルトの名無しさん
垢版 |
2017/07/19(水) 00:19:58.81ID:wIP5zHZ/
とにかく>>126は色々とおかしい
どこから突っ込めばいいのかわからんくらいにアチコチおかしい

PC初心者板ならともかく、なぜム板にこんな人が居るんだ?ってレベル
迷い込んできたのか?
0140デフォルトの名無しさん
垢版 |
2017/07/19(水) 22:27:12.79ID:caLBuZR5
コピー系コマンドのコピー速度って

遅 copy < xcopy < robocopy 早

で良いですよね?
これはVista、7、10のどのOSでも同じでしょうか?
0142140
垢版 |
2017/07/20(木) 03:04:39.26ID:R4lBeVK+
>>141
コマンド打ち込むにも時間がかかりますから一理ありますね。copyは引数指定も直感的だし…


って常にコマンド手打ちする訳でもないですし!w
0146デフォルトの名無しさん
垢版 |
2017/07/29(土) 01:24:32.19ID:ocuZvBLs
@.bat や =.bat
ファイルを作ることはできるが、実行しようとしてもコマンドプロンプトに無視されて実行できなかった
0147デフォルトの名無しさん
垢版 |
2017/07/29(土) 02:07:03.67ID:0L2d7SO5
@.bat はフルパスで C:\work\@bat ってするか、キャレットでエスケープして ^@.bat で実行できる
=.bat はフルパスでもダメだけど、キャレットでエスケープすればいける
0148デフォルトの名無しさん
垢版 |
2017/08/01(火) 00:45:45.45ID:7i1X54Qd
>>147
キャレットって何かわからなかったが、^をつけることなんですね
^@ や ^= でたしかに実行できました
0151デフォルトの名無しさん
垢版 |
2017/08/14(月) 22:38:23.70ID:3xlVGOet
すみません助けてください
遅延関数を宣言してるところから、下記の親ディレクトリの名前だけ引くサブルーチンに
ファイルフルパス投げて、戻そうとしているのですが
for文のところでDEST_DIRに値が入らなくて困っています

windows7環境で遅延関数について調べているのですが
なんで値が入らないのかわからず。 %%Pをechoすると中身が表示されるのですが
それをSETするときに何をやっても入りません。。。助けてください

:GET_PARENTDIR
setlocal enabledelayedexpansion

SET PathLF=%1
SET PathLF=%PathLF:~0,-1%

SET PathLF=!PathLF:\=^

!

for /F %%P in ("!PathLF!") do SET DEST_DIR = %%P
endlocal && set DEST_DIR = %DEST_DIR%
echo %DEST_DIR%

exit /b
0153デフォルトの名無しさん
垢版 |
2017/08/14(月) 23:55:08.58ID:pZiLFUe+
>>151
これって例えばc:\aaa\bbb\ccc\test.txtってファイルを投げたら
最終的にtest.txって文字を得たいの?
cccを得たいの?
0154デフォルトの名無しさん
垢版 |
2017/08/15(火) 02:10:26.85ID:F71LHla5
>>151
まずは

SET DEST_DIR = %%P
endlocal && set DEST_DIR = %DEST_DIR%

の空白がいけないのでは?

SET DEST_DIR=%%P
endlocal && set DEST_DIR=%DEST_DIR%
0155デフォルトの名無しさん
垢版 |
2017/08/15(火) 08:22:11.69ID:ltV5IdSe
>>154
後輩にその空白を入れられたことがある
「可読性を良くしようと思って…」って言ってたな
普通の高級言語やってる奴は=の前後に空白入れただけで不具合起こるなんて考えもしないわな
コマンドプロンプトはホント昔の仕様を引きずり過ぎだわ
0156デフォルトの名無しさん
垢版 |
2017/08/15(火) 08:51:21.42ID:J2u+qflL
setlocal enabledelayedexpansion使うとファイル名に!が入ってるとめんどくさいから極力使わないようにしてるんだけど俺だけ?みんなはどうしてる?
0157デフォルトの名無しさん
垢版 |
2017/08/15(火) 08:55:13.27ID:GzAS59pw
>>155
C言語で言うマクロ置換みたいなもんだからしょうがない
もう新規の奴はPowerShellに移行するしかない
0159デフォルトの名無しさん
垢版 |
2017/08/17(木) 23:34:26.73ID:jGLnJoZN
スペースが入ったファイル名からスペースを取り除くには一行では無理ですか?
0162デフォルトの名無しさん
垢版 |
2017/08/20(日) 03:39:45.42ID:w/lVOYHU
バッチでよく使う pslist.exe はプロセス名が日本語だと間違える
pslist v1.4 sysonternals
0163デフォルトの名無しさん
垢版 |
2017/08/20(日) 16:32:29.32ID:7nn0chG1
フォルダD:\XXXX直下の、
AAAA、BBBB、CCCCの3つの隠しファイル(拡張子なし)を、
定期的にE:\backupフォルダにバックアップするためのバッチファイルを作りたい
フォルダXXXX以下には、YYYY、ZZZZというフォルダがあり、
この下にもAAAA、BBBB、CCCCと同名のファイルが存在するが、
それはバックアップしなくていい
copyコマンドでは隠しファイルはコピーできない
xcopyコマンドではサブディレクトリ以下の同名ファイルもコピーされてしまう
バッチファイルで処理するためにはどうすればいいのでしょうか?
できればアトリビュートはいじりたくないです
よろしくお願いいたします
0166デフォルトの名無しさん
垢版 |
2017/08/20(日) 17:25:05.34ID:7nn0chG1
>>165
実験してみたんですが、
xcopy D:\XXXX\AAAA E:\backup\
とすると、backupフォルダには、
AAAA
\YYYY\AAAA
\ZZZZ\AAAA
の3ファイルがコピーされちゃうんですよ
\YYYYと\ZZZZのはいらないのでどうしたもんかなと質問させていただきました
0168デフォルトの名無しさん
垢版 |
2017/08/20(日) 17:43:47.57ID:7nn0chG1
>>167
テストありがとうございます
あれ?
なんか余計なスイッチ入れるとかしちゃってたかな?
今出先なんで帰ったら再度実験してみます
0169デフォルトの名無しさん
垢版 |
2017/08/20(日) 19:15:30.58ID:T95gEh5X
>>161
cd /d "%~dp1" & set "File=%~nx1" & call ren "%%File%%" "%%File: =%%"

>>163
cd /d "D:\XXXX"
for %%i in (AAAA BBBB CCCC) do xcopy /h /y "%%~i" "E:\backup"
0170デフォルトの名無しさん
垢版 |
2017/08/22(火) 19:19:28.49ID:rIu52qT/
以前こちらで聞いて試行錯誤しているのですが、何分初心者で四苦八苦しております。
そこでご教授願いたいのですが、
@rem 引数有無と引数名チェック
if "%USR_INPUT_STR1%"=="" goto ERROR
echo;%USR_INPUT_STR1%|findstr /R /C:"^http" /C:"openrec" >NUL||(echo "%1" を処理できません) && goto ERROR

@rem URLのアドレスとHTMLを環境変数へ設定
set ADDR=%USR_INPUT_STR1%
for %%I in (%USR_INPUT_STR1%) do set HTML=%%~nxI

@rem HTMLダウンロード
curl -L --max-redirs 10 -R -O %ADDR%
if not %ERRORLEVEL%==0 goto ERROR

@rem HTMLから文字列抽出
for /F "tokens=2 delims=<>| " %%I in ('type %HTML%^|findstr /R /C:"<title>"') do set TITLE=%%~I
for /F "tokens=3 delims=, " %%I in ('type %HTML%^|find /I "m3u8"') do set TARGET=%%~I

ffmpeg -c copy "%TITLE%" -i "%TARGET%"
pause
exit

:ERROR
echo 引数が無効のため処理できませんでした
pause
exit

このままだと、ファイル名がUTF-8で文字化けしてしまいます。
これを、面倒なのでファイル名で出力したいと思ったのですが、正規表現が弱く全く前に進みません。

丸投げで申し訳ございませんが、どうか手直ししていただけませんでしょうか。
よろしくお願い致します。
■ このスレッドは過去ログ倉庫に格納されています