【.cmd】 バッチファイルスクリプト %12 【.bat】©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/
2017/03/11(土) 14:16:25.14ID:tWxSSf/m
2GET
2017/03/11(土) 17:24:01.08ID:aIgw+L4R
そろそろ次スレ立てた方がいいと思う
2017/03/11(土) 19:08:44.39ID:ayh8mOJp
タヒ
2017/03/12(日) 22:04:13.40ID:LKmH3irJ
達人の方々!お教えください
set文による文字列の置き換えで
=を置き換えたいのですが
どのように記述すればよいのでしょうか?
2017/03/13(月) 02:51:46.65ID:ieWeiZc+
>>5
setの文字列置換では無理
=の個数が決まっているのならforでderims==
不特定なら一文字ずつ=かどうかを判定し=なら置換したい文字列を付け足し
テストしてないから不備があるかもだけど以下みたいな感じで出来ると思う

:ReplaceEqual
if "%~1"=="" (echo ERROR&exit /b)
set "str=%~1"
set output=
:CheckEqual
if not defined str exit /b
pause
if "%str:~0,1%"=="=" (
set "output=%output%置換後文字列"
set "str=%str:~1%"
goto :CheckEqual
)
set "output=%output%%str:~0,1%"
set "str=%str:~1%"
goto :CheckEqual
2017/03/13(月) 02:56:02.96ID:ieWeiZc+
済まん pause テストするつもりで入れてたのを消すの忘れてた
まあそのままテストしてみて
2017/03/13(月) 03:26:40.42ID:Kv5ZfyaF
:ReplaceEqual
set "str=%~1"
set output=
:CheckEqual
if "%str:~0,1%"=="=" (
set "output=%output%置換後文字列"
set "str=%str:~1%"
) else (
set "output=%output%%str:~0,1%"
set "str=%str:~1%"
)
if defined str goto :CheckEqual
exit /b
2017/03/13(月) 07:40:38.20ID:KSFKLeET
>>6-8
ありがとうございます
色々試して見ます
2017/03/13(月) 22:53:05.48ID:UotY540z
>>8と同じだけど、もう少し使いやすいI/Fにしたもの
@echo off
rem 文字列中には、",%(1つのみ) を入れないこと
set "var==abc=def=!#$&'()=^~|-+*;:{}<>,./?\_%%"
call :replace var "=" "="
echo "%var%"

rem savety stopper
goto :eof
:replace
setlocal
set i=0
set s=
:replace_loop
call set "c=%%%1:~%i%,1%%"
if not defined c (endlocal&set "%1=%s%"&goto :eof)
if "%c%" equ "%~2" (set "s=%s%%~3") else (set "s=%s%%c%")
set /a i+=1
goto :replace_loop
2017/03/15(水) 08:22:32.42ID:Ekd3hMdD
cmderいいな
この手のツールで表示が崩れたりせずまともに動くやつ見るの初めてだ
2017/03/15(水) 19:39:27.45ID:sbz59NLr
for /r %%i in (*.jpg) のようなコマンドで取得した絶対パスをカレントフォルダとの相対パスに変換するにはどうするのが一番ですか?
現在はsetコマンドの置換機能でカレントフォルダの部分のパスを消しているんですがパスに変な文字列が入っていると誤作動を起こしそうで少し不安です。
もっとスマートなやり方はありますか?
2017/03/16(木) 01:00:29.70ID:DixFGYK0
>パスに変な文字列が入っていると
どのみち%が入っているとバッチだと詰む。やれなくないけど物凄く面倒
バッチでは完全な文字列操作は無理だと割り切った方がいい
PowerShell使えば?
ttps://www.google.co.jp/search?&q=powershell+%E7%9B%B8%E5%AF%BE%E3%83%91%E3%82%B9+%E5%A4%89%E6%8F%9B
2017/03/16(木) 01:47:18.14ID:9KCSEqzj
>>13
分かりました、何か別の方法を考えます
2017/03/16(木) 02:25:05.07ID:iKA3O6Cf
>>14
実際の有効なパスが対象なんだから
問題となるのは上に出てきたequalを含んだフォルダがある場合だけだろう
setlocal
echo %cd%>tmpfile
for %%i in (tmpfile) do set /a size=%%~zi-2
del tmpfile
if %size% neq 3 set /a size+=1
for /r %%i in (*.txt) do (
set "p=%%~i"
call set "p=%%p:~%size%%%"
call echo ".\%%p%%"
)
endlocal
2017/03/16(木) 02:32:32.21ID:iKA3O6Cf
肝心なのは、文字列操作、表示まで扱う場合は
文字列を必ず""で括るようにすること
& % ^ 等を含んでると括ってないとおかしくなる
2017/03/16(木) 04:08:08.29ID:gadu0oc0
chcp 437
2017/03/16(木) 11:46:49.75ID:iKA3O6Cf
>>17
ファイルサイズじゃ根本的にダメだったね
(それにecho %cd%も""で括ってなきゃいけなかったし)
call :length "%cd%" n
for /r %%i in (*.txt) do (
set "p=%%~i"
call set "p=%%p:~%n%%%"
call echo ".\%%p%%"
)

goto :eof
:length
setlocal
set s=%1
set n=0
:length_1
call set "c=%%s:~%n%,1%%"
if defined c set /a n+=1&goto :length_1
if %n% neq 5 set /a n+=1
endlocal&set /a %2=%n%-2
goto :eof
2017/03/16(木) 12:49:57.48ID:iKA3O6Cf
訂正
call :length cd n
for /r %%i in (*.txt) do (
set "p=%%~i"
call set "p=%%p:~%n%%%"
call echo "%%p%%"
)

goto :eof
:length
setlocal
set n=0
:length_1
call set "c=%%%1:~%n%,1%%"
if defined c set /a n+=1&goto :length_1
if %n% neq 3 set /a n+=1
endlocal&set /a %2=%n%
goto :eof
2012
垢版 |
2017/03/16(木) 18:53:00.18ID:9KCSEqzj
>>15
ありがとうございます
文字列を置換することばかり考えていたのでカレントフォルダ分の文字数を削るという発想に行き着きませんでした
これで何とかなりそうな気がします
21デフォルトの名無しさん
垢版 |
2017/03/17(金) 21:12:58.50ID:V4hZYsin
どなたかお詳しい方、ご教示ください
windows7を起動後、自動で特定のアカウントパスワード入力後にログインし、
ログイン後、デスクトップの特定座標を自動でクリックするという操作を行わせたいです
このような処理はbatファイルで可能でしょうか?
win7初期状態にインストールされているものであれば他のものを使用してもよいのですが。
キーワードだけでも結構ですので、お助けいただければ幸いです
2017/03/17(金) 21:46:29.02ID:93Jxn9OB
胡散臭すぎるだろ・・・
2017/03/17(金) 22:18:36.30ID:Pk7DeofX
ログインとはWindows7の登録ユーザーってことか?
それともWebブラウザを起動してどっかのサイトにログインするってことか?
あと何故マウスクリックなのか?
デスクトップに表示してるアイコンなら別に直接起動できるだろうに
2017/03/18(土) 09:01:42.64ID:KPOks79l
>>21
無理です
2017/03/18(土) 15:14:23.81ID:cDGLzqpd
start https://www.google.co.jp/search?q=windows7+自動ログイン
2017/03/20(月) 17:14:02.44ID:QMGJB+5Y
だいぶ使い道ないけど、DIRって複数フォルダの内容を1回で表示できるんだね。

 DIR C:\tmp C:\tmp2
2017/03/24(金) 13:17:40.14ID:jo55dHfH
for文が同一フォルダに自分で出力したファイルを
一つだけ拾っちゃうんだけど、何か対策はありませんか?

for %%I in (*.jpg) do copy %%I %%~dpI_%%~nxI
って感じに処理すると
1.jpg 2.jpg → _1.jpg _2.jpg __1.jpg
となっちゃう…
2017/03/24(金) 13:52:45.87ID:OsTTofqK
for /f "delims=" %%a in ('dir /a-d /b *.jpg') do
2017/03/25(土) 20:50:35.80ID:8s6m96Ov
なるほどDIRか…
ありがとうございました。
30デフォルトの名無しさん
垢版 |
2017/03/28(火) 18:35:13.10ID:oEoZ8De2
バッチファイルで

echo %*

とすると引数がすべて表示されるけど

%0=自分自身だけ無いのはなんで?
*で0だけハブられるなんて可哀想……
2017/03/28(火) 18:52:24.94ID:IKXgMhqU
少し考えれば分かりそうなものだが
%cmdcmdline%
2017/03/30(木) 01:42:37.50ID:gGp/SYAm
なんか真似しそう(笑)
2017/04/03(月) 06:06:20.82ID:awE7Wvau
バッチ書くのにオススメのエディタあったら教えて
最近目がめっきり弱くなって来たので色分け表示とかの視認性上がるものや
便利そうな機能があるものを知りたい
頻繁に使うわけじゃないからこそ探すの面倒で先人の知識をお借りしたい
2017/04/03(月) 07:06:14.38ID:pL1jzkCs
>>33
VisualBatは?
文字に色もつくしいろいろ設定できるよ
batをexe形式にすることもできる
2017/04/03(月) 07:12:25.04ID:5ummjK72
サクラエディタ
2017/04/03(月) 07:33:25.19ID:uEU30p4H
マジレスすると目が悪いならでかいモニタ買ってフォントサイズでかくするのが一番良い

PowerShell、Ruby, PythonとかならVSCodeでブレークポイント張ったり変数のインスペクトしたりできるけど
その手の支援機能が全く期待できないBatじゃどれ使っても同じだろう
手に馴染んだエディタ使えばいいしないならフリーのどれか一つ覚えればいい
キーワードの色分け程度なら大抵用意されてるし

VisualBatはちょくちょく見かけるけどそれ専用の環境を覚えるくらなら普通のエディタ使ったほうがいい気がする
個人的にはBatから別の言語のコード書いて呼び出す事が多いし

自作マクロになるけど
↓みたいなコードを一つのファイルに書いて##!!に挟まれたカーソル位置のコードを切り出して実行する機能が
言語の学習やちょっとしたテストに便利で気に入っているのでエディタマクロ覚えて作ってみるのお勧め

##!! echo test
echo hello

##!! for test
for %i in (a,b,c) do echo %i

##!! calc test
set a=1
set /a a+=2
echo %a%
2017/04/03(月) 07:56:40.92ID:wDpIbVKg
中身のない長文要らんわ
2017/04/03(月) 22:35:33.81ID:TkzGFBjq
>>33
黒背景に白地の文字が視認性あがるよ
フォントはゴシックで文字サイズも大きくする
俺の使ってるのは一般的にはオススメではないのでどうかと思うが
(New)QXエディタ(一応シェアウェアだが未登録でも機能制限も期間制限も無い)
2017/04/03(月) 22:53:09.08ID:jFb9lqNm
真っ黒背景に真っ白文字は目がズキズキする
2017/04/03(月) 22:58:56.52ID:TkzGFBjq
>>39
確かに、目のいい人にとってはそうかもしれないけどね
コマンドプロンプト画面がエディタ画面だと思ってもらえれば想像できるよね
2017/04/03(月) 23:14:57.75ID:rmwiW03F
color 0f
は目に痛い
2017/04/03(月) 23:18:55.00ID:TkzGFBjq
目のいい人がコメントしたって意味ないだろ
老眼やかすみ目で文字が読みにくくなったらわかるよ
特に、カンマとピリオドの区別が付かないとストレス溜まるぜ
2017/04/03(月) 23:37:00.86ID:mc8PKhXW
>>33
サクラエディタ入れて
IPAゴシックフォントにする
2017/04/04(火) 00:06:37.41ID:m/ZONOLH
背景は薄い黄緑色にしてる
目が疲れない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況