[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/09 05:32 / Filesize : 301 KB / Number-of Response : 1052
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sageteoff [2017/03/11(土) 13:47:11.66 ID:2LSSeyH1.net]
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

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

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

152 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 21:54:16.62 ID:BFQhJ/Te.net]
"@ とか "= とか

153 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 22:38:23.70 ID:3xlVGOet.net]
すみません助けてください
遅延関数を宣言してるところから、下記の親ディレクトリの名前だけ引くサブルーチンに
ファイルフルパス投げて、戻そうとしているのですが
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

154 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 22:39:38.44 ID:3xlVGOet.net]
ああああ遅延変数でした
もうやだああぁ

155 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 23:55:08.58 ID:pZiLFUe+.net]
>>151
これって例えばc:\aaa\bbb\ccc\test.txtってファイルを投げたら
最終的にtest.txって文字を得たいの?
cccを得たいの?

156 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 02:10:26.85 ID:F71LHla5.net]
>>151
まずは

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

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

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

157 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 08:22:11.69 ID:ltV5IdSe.net]
>>154
後輩にその空白を入れられたことがある
「可読性を良くしようと思って…」って言ってたな
普通の高級言語やってる奴は=の前後に空白入れただけで不具合起こるなんて考えもしないわな
コマンドプロンプトはホント昔の仕様を引きずり過ぎだわ

158 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 08:51:21.42 ID:J2u+qflL.net]
setlocal enabledelayedexpansion使うとファイル名に!が入ってるとめんどくさいから極力使わないようにしてるんだけど俺だけ?みんなはどうしてる?

159 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 08:55:13.27 ID:GzAS59pw.net]
>>155
C言語で言うマクロ置換みたいなもんだからしょうがない
もう新規の奴はPowerShellに移行するしかない

160 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 10:13:39.94 ID:x5EZUuTK.net]
名前ソートで上に持ってきたいフォルダには名前の頭に!をつけてる



161 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 23:34:26.73 ID:jGLnJoZN.net]
スペースが入ったファイル名からスペースを取り除くには一行では無理ですか?

162 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 00:59:25.98 ID:Oq4EZT3J.net]
こんな感じ?
set "File=%~1" & ren "%File%" "remove=%File: =%"

163 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 01:00:23.41 ID:Oq4EZT3J.net]
間違えた
set "File=%~1" & ren "%File%" "%File: =%"

164 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 03:39:45.42 ID:w/lVOYHU.net]
バッチでよく使う pslist.exe はプロセス名が日本語だと間違える
pslist v1.4 sysonternals

165 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 16:32:29.32 ID:7nn0chG1.net]
フォルダD:\XXXX直下の、
AAAA、BBBB、CCCCの3つの隠しファイル(拡張子なし)を、
定期的にE:\backupフォルダにバックアップするためのバッチファイルを作りたい
フォルダXXXX以下には、YYYY、ZZZZというフォルダがあり、
この下にもAAAA、BBBB、CCCCと同名のファイルが存在するが、
それはバックアップしなくていい
copyコマンドでは隠しファイルはコピーできない
xcopyコマンドではサブディレクトリ以下の同名ファイルもコピーされてしまう
バッチファイルで処理するためにはどうすればいいのでしょうか?
できればアトリビュートはいじりたくないです
よろしくお願いいたします

166 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 16:35:22.92 ID:T95gEh5X.net]
>>161
誰もツッコミ無しなの?

167 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 16:53:03.09 ID:vBwVL8I3.net]
>>163
xcopyでAAAAなどのファイルを一つずつ指定してコピーするというのは?

168 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 17:25:05.34 ID:7nn0chG1.net]
>>165
実験してみたんですが、
xcopy D:\XXXX\AAAA E:\backup\
とすると、backupフォルダには、
AAAA
\YYYY\AAAA
\ZZZZ\AAAA
の3ファイルがコピーされちゃうんですよ
\YYYYと\ZZZZのはいらないのでどうしたもんかなと質問させていただきました

169 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 17:36:31.70 ID:vBwVL8I3.net]
>>166
こちらの方でもテストしたけど1ファイルだけコピーになるんだけどな
なんでだろ

170 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 17:43:47.57 ID:7nn0chG1.net]
>>167
テストありがとうございます
あれ?
なんか余計なスイッチ入れるとかしちゃってたかな?
今出先なんで帰ったら再度実験してみます



171 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 19:15:30.58 ID:T95gEh5X.net]
>>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"

172 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 19:19:28.49 ID:rIu52qT/.net]
以前こちらで聞いて試行錯誤しているのですが、何分初心者で四苦八苦しております。
そこでご教授願いたいのですが、
@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

173 名前: "%TARGET%"
pause
exit

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

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

丸投げで申し訳ございませんが、どうか手直ししていただけませんでしょうか。
よろしくお願い致します。
[]
[ここ壊れてます]

174 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 20:10:25.50 ID:uGuLhv+Q.net]
powershellに切り替えたら?

175 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 20:50:12.77 ID:1dHyDD35.net]
>>170
よく分からないけどbat自体をUTF-8で書いてchcp 65001というのは?

176 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 20:52:58.84 ID:rIu52qT/.net]
>>172
それも考えたのですが、不特定多数のPCで使う機会があるので手間が増えてしまうなと思い諦めました。
そこで、URLからIDとなる文字列を抽出してそれをファイル名に使おうと考えました。
参考URL:https://www.openrec.tv/live/7cuVKOAY3lv
この末尾の7cuVKOAY3lvの部分だけを、TITLEに代入したいと思ったのですが、思うようにいかなくて・・・。

177 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 21:10:23.56 ID:rIu52qT/.net]
結局、実行batのディレクトリ内にnkf32を導入し、
nkf -s --overwrite %HTML%
と書き加えて対処致しました

178 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 14:35:48.67 ID:91TLAHUR.net]
フォルダの中に、あああ_1.flv あああ_2.flv … あああ_100.flvのようなファイルがあるときに、あああ_1.flvをあああ_001.flvのようにリネームしたりできないんでしょうか

179 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 15:34:02.29 ID:ZSKrJS0x.net]
>>175
Flexible Renamer

180 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 16:50:10.59 ID:iDduY4Qi.net]
お〜瑠璃ね〜むで十分やぞ
D&D用のショトカも作れるしな



181 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 17:11:24.47 ID:1aRkt9bd.net]
>>175
「のようなファイルがあるときに」の条件がどこまでかわからないが
>>176が一番早いのは間違いない

182 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 20:06:42.61 ID:KnTCuJQc.net]
set "a=あああ_"
set "b=.flv"
setlocal enabledelayedexpansion
for /L %%i in (1,1,99) do set /a c=%%i+1000 & ren "!a!%%i!b!" "!a!!c:~1!!b!"

183 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:38:58.30 ID:omILiWW+.net]
>>175
pushd "%~dp1"
:LOOP
for /f "tokens=1,2 delims=_" %%a in ("%~n1") do (
set FNAME=%%a
set /a FN=%%b+1000
)
ren "%~1" "%FNAME%_%FN:~-3%%~x1"
shift
if not "%~1"=="" goto :LOOP

184 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 17:02:31.64 ID:KsdTyPQv.net]
>>180
変換の数字の前が_文字じゃないかもしれないし
_文字がファイル名の中に混じっている可能性もあるし

185 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 17:53:19.91 ID:Vr+Gp9oD.net]
どのスレでも一緒だが質問の要件が分かりにくいのはめんどうだな

186 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 18:00:47.56 ID:kMuf1wHV.net]
なんでか知らないけど他人に勝手にマルチポストされたけど>>175の質問は元のスレで解決したのでもういいです

187 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 22:03:48.56 ID:BJjXydYg.net]
cd \
pushd D:\abc
setlocal
popd

としても元の \ に戻らなかった

188 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 00:02:37.80 ID:pBY/MKIa.net]
>>184
そうならなきゃ逆にダメでしょ
setlocalでは(親の環境を引き継いだ)別の環境の上で実行されている
カレントを移動しようが環境変数を操作しようが元の環境には影響しない
pushd D:\abc
setlocal
endlocal
popd
または
setlocal
pushd D:\abc
endlocal

189 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 01:15:44.81 ID:24unggVp.net]
>>185
ありがとうございました
そういうことでし

190 名前:たか []
[ここ壊れてます]



191 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 05:02:43.18 ID:cRJ1WDqm.net]
今さらバッチファイル入門て…
余計な被害者増やさずPowerShellにしろよ
これだからIT後進国は

超入門コマンドプロンプト:バッチコマンドで定型処理を行う (1/3) - @IT
www.atmarkit.co.jp/ait/articles/1709/15/news034.html
017年09月15日 05時00分 公開

192 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 05:59:12.53 ID:TbhIjs8j.net]
>>187
このスレのタイトル見てから言えよ
それとも、お前は、自分が使ってないソフトのスレ行って
「別のソフト使え」って言って巡るのが趣味なのか?

193 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 06:09:12.67 ID:NzFbxZfY.net]
PowerShellに移行しようと思ったこともあるけどファイルをD&D出来ないから断念した
あと他人の環境で動くのか分からないから渡しにくいし

194 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 06:11:20.82 ID:NzFbxZfY.net]
まあbatに面倒臭いとこがあるのも理解できるけど
せめて正規表現と小数の計算くらいはあればよかったんだが

195 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 11:00:27.02 ID:Nvo3nRRv.net]
自分で使うにはPoweShellはめちゃめちゃ便利だけど
一般的に定着してるかというとそうじゃないし

196 名前:デフォルトの名無しさん [2017/09/17(日) 11:17:50.05 ID:jtG62g+O.net]
PowerShell は起動が遅いから小さいバッチをループで呼び出すのには向いてないんじゃないかな。
いったんロードしたオブジェクトを関数形式で呼び出せばいいんだろうけどよくわからなくてめんどくさいし。

197 名前:デフォルトの名無しさん [2017/09/17(日) 11:23:06.30 ID:jtG62g+O.net]
最近、フリーソフトとかの小さいやつの管理がめんどくさくなって
メニュー代わりにバッチファイルを使うことにしたんですよ。
全部をVHDに入れてマウントなんで、持ち運びは仮想ディスクファイル1個をコピーするだけ。
起動が素早いのがメリット。
アイコンが出ないのがデメリット。
アイコン出そうと思ったら全環境で共通のドライブ名に固定してショートカットを使ったらいいと思うけど。

プログラムの入ったフォルダ
Program Files 3

バッチファイルの入ったフォルダ
Program Link

[FirefoxPortable.bat]
set pathname1=%~d0\Program Files 3\FireFoxPortable52.0.2\FirefoxPortable\FirefoxPortable.exe
start "" "%pathname1%"

198 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 12:31:00.83 ID:z++LvPT9.net]
それだけならバッチ作るまでもなくハードリンクにすればアイコン問題も解決では

199 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 12:37:46.24 ID:z++LvPT9.net]
あ、すまんそれだと実行ファイルと同じフォルダのDLL読めないからダメか

200 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 00:06:56.51 ID:AVBMNnfo.net]
短いファイル名に関していくつか質問

1 短いファイル名はダブルクオーテーションで囲まなくても実行可能?
2 短いファイル名は取得して一ヶ月経っても変動せずにそのパスを実行出来る?



201 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 23:50:36.04 ID:2dThcY7y.net]
>>196
「1」は、多分可能
「2」は、他にファイルが出来なければが前提かと

「dir c:\*1」と「dir c:\*1 /x」を実行して挙動を確かめて下さい。

202 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 00:09:36.87 ID:I5t298fo.net]
少なくともNTFSではファイルの情報としてショートファイルネームも格納されるから
ファイルが存在したままある日突然名前が変わることはないはず

そのファイルを削除して似たようなロングファイルネームの別のファイルを作った時
同名だけど別のファイルが出来てしまう事はありえる

203 名前:196 mailto:sage [2017/09/19(火) 01:33:17.50 ID:FIGNw+kF.net]
レスありがとうございます。
ちなみに自分がやりたかったのは↓と同じケ

204 名前:ースで自作のbatをタスクスケジューラに登録したいというものでした。

schtasksで半角スペースを含むパスを実行させたい (DOSプロンプト活用相談室LOG)
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/taskkillstart/at/4-0842.html

"を\"と書いてエスケープさせるやり方もあるようですがそちらではbatにダブルクォーテーションで囲った引数を渡すと不可解な動作をすることがあり上手くいきせんでした。

batのパスにスペースを含んだ場合 起動しない
batのパスにスペースを含まない場合 %~dp0を実行したときにbatのフォルダパスの頭にカレントディレクトリの文字列も追加される
[]
[ここ壊れてます]

205 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 02:17:59.79 ID:Lhe/hdFe.net]
mklinkやsubstを使って違う名前でアクセスするのはどうなのでしょう
うまくいくかどうかわかりませんが

ファイル名フォルダ名に空白や%^!みたいな記号があると困ることが多いですね

206 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 03:12:37.88 ID:aIPv0JYK.net]
>>199
この書き方に準じていないだけでは?

A Scheduled Task Does Not Run When You Use Schtasks.exe to Create It and When the Path of the Scheduled Task Contains a Space
https://support.microsoft.com/en-us/help/823093/a-scheduled-task-does-not-run-when-you-use-schtasks-exe-to-create-it-a

Schtasks.exe を使用して、スケジュールされたタスクのパスにスペースが含まれている場合を作成するときにスケジュールされたタスクが実行されません。
https://support.microsoft.com/ja-jp/help/823093/a-scheduled-task-does-not-run-when-you-use-schtasks-exe-to-create-it-a

失敗例
schtasks /create /tn "my task" /tr "c:\foldername containing spaces\script.bat arguments" /sc once /sd 07/29/2003 /st 10:01

成功例
schtasks /create /tn "my task" /tr "\"c:\foldername name containing spaces\script.bat\" arguments" /sc once /sd 07/29/2003 /st 10:01

207 名前:196 mailto:sage [2017/09/20(水) 06:44:59.65 ID:w13Y3qRA.net]
>>201
自分の説明が下手で伝わらなかったんだと思いますが、成功例の方の記述でパスにスペースを含むbatは起動できるのですがそのbatにダブルクオーテーションを含む引数を渡すと動作がおかしくなるのです。
引数にダブルクオーテーションを含まない場合は正常に起動できます。

208 名前:196 mailto:sage [2017/09/20(水) 07:01:29.72 ID:w13Y3qRA.net]
一応追記しておくと、おかしくなるのはタスクスケジューラから起動した場合限定で通常の起動では問題ありません。
呼び出すbat内の記述にミスがあるとかそういうのではないと思います。

209 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 11:18:59.39 ID:WXZB4PjF.net]
%CMDCMDLINE%はどうなってる?

210 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 18:15:09.28 ID:X0F1M9Qy.net]
argumentにダブルクォーテションがある場合もパスと同様に\"してる?



211 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 18:35:03.44 ID:uKBRYTKY.net]
test

212 名前:196 mailto:sage [2017/09/21(木) 18:38:58.99 ID:uKBRYTKY.net]
NGワードが含まれていたようなので他所に書きました
https://pastebin.com/9yMQfC37

213 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 20:04:30.28 ID:0vysq0yQ.net]
基本的に引数の中の半角スペースはデリミタであり
そこより左に " が奇数個あればデリミタじゃなくなる

それに関しては \" とか ^" とかあっても関係ないんじゃね

214 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 14:27:46.65 ID:aNTDK6ge.net]
>>207
もう見てないかも知れないけど

schtasks /create /tn "test\test" /sc once /st 23:00 /tr "cmd /s /c \"\"C:\schtasks test\schtaskstest.bat\" hoge1 hoge2 \"ho ge3\" \"h oge4\"\""

これだと実行ファイルのパスにスペースがあっても問題ない

215 名前:196 mailto:sage [2017/09/26(火) 15:58:12.82 ID:dvSxVtoZ.net]
>>209
なるほど、直接batを登録するのではなくてcmdのほうを登録すれば良かったんですね
思いつ

216 名前:きませんでした
助かりました、ありがとうございます
[]
[ここ壊れてます]

217 名前:デフォルトの名無しさん mailto:sage [2017/10/10(火) 23:43:05.86 ID:Z33TeZgR.net]
文字コードがUTF8のテキストファイルが2つあるのですが
FCコマンドで差分を出力したところ文字化けしてしまいました。
何か良い方法はないでしょうか?

218 名前:デフォルトの名無しさん mailto:sage [2017/10/11(水) 07:47:52.42 ID:S/IKnpLv.net]
メモ帳でSJISで保存する

219 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 16:57:41.08 ID:c/LUECgg.net]
なんでSJISなんだよ、unicodeにすればいいじゃん(Windows2000,XPは除く)
@echo off
set f1=%1
set f2=%2
if not defined f2 echo 引数1.2に比較するファイルパスを指定してください& goto :eof
if not exist %f1% echo ファイル %1 がありません& goto :eof
if not exist %f2% echo ファイル %2 がありません& goto :eof
start "" /min /wait cmd /u /c "chcp 65001 & type %1>u_%1 & type %2>u_%2"
chcp 932>nul
fc /u /n u_%1 u_%2
del u_%1 u_%2

220 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 18:25:29.18 ID:c/LUECgg.net]
start付けるとうまくいかないな
訂正
start "" /min /wait cmd /c "chcp 65001&cmd /u /c type %1>u_%1&cmd /u /c type %2>u_%2"
fc /u /n u_%1 u_%2



221 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 01:07:49.23 ID:rrtzmh2c.net]
バッチファイル作っておいて以下のようなフォルダの名前の変更を毎回ダブルクリック一発で済ませたいのですが
いろいろやってみたのですが、というほどの力もなく
お知恵お貸し下さい

処理前のフォルダ名一覧
1008安住紳一郎の日曜天国
10月15日安住紳一郎の日曜天国
10月15日爆笑問題の日曜サンデー (1)
10月15日爆笑問題の日曜サンデー (2)

処理後のフォルダ名
1008安住紳一郎の日曜天国
1015安住紳一郎の日曜天国
1015爆笑問題の日曜サンデー (1)
1015爆笑問題の日曜サンデー (2)

222 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 04:34:03.61 ID:3Tj/cKOj.net]
vbs 正規表現置換 ファイルリネーム

223 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 08:11:27.58 ID:GL/w6Jlo.net]
>>215
for /f "delims=" %%a in ('dir /ad /b ^| findstr /b /r "[0-9][0-9]月[0-9][0-9]日"') do call :SUB "%%~a"
exit /b
:SUB
set s=%~1
ren %1 "%s:~0,2%%s:~3,2%%s:~6%"

224 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:00:12.58 ID:rrtzmh2c.net]
>>216
ヒント下さったようでありがとうございます。でも、ゼロから書き始めることが出来ないんです。

>>217
私の求めていた動作です。これで完璧、ありがとうございます
ひと安心して解析に移ったわけです。。。
1.
"[0-9][0-9]月[0-9][0-9]日"
↑これでは22月33日にも対応というわけか、こやつめハハハ
フォルダ名の行頭部分は日付として機械的に生成される予想できる値ですので[0-9]で何の問題もないです。
勉強の為に、ここをいじってみました。
Month部分は、1 2 3...10 11 12、なら[1-12]で済むのかな。
ところが0埋めなので、01 02 03...10 11 12、となると、0[1-9]|1[0-2]、かな。
Day部分は、01 02 03...29 30 31、うーん0[1-9]|[1-2][0-9]|3[0-1]、となる。
これらを書き換えてみて、はい、動きませんでした。
今回のような自分用プログラムは動けばよいわけで、教えて下さった[0-9]で何の問題もない。
これ以上無駄な時間を掛けても&シンプルな方が可読性がよい

225 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:01:09.80 ID:rrtzmh2c.net]
2.
for a in ('標準出力 パイプ 標準入力') do
この部分、パイプの縦棒の左にくっついてる^は何者なのでしょう。。。初めて見ました。
アッ、日付部分が行頭だからか?いやfindstrに行頭オプションの/Bが付いてるし、そもそもパイプの左になぜ?
検索してみたのですがわからずここで冷や汗が出てきて
ウーンこれはなんなんだろう。そもそもメタ文字なのか銅貨さえわからない。
3.
そもそも何をしているのかというとradikoという

226 名前:vログラムでお気に入りのラジオ番組を録音しています。
AMラジオ番組ではCMのほとんどが過払い金のCMで聞きたくないのでスキップしたいのです。
ウォークマンで右ボタンを長押しすると早送り再生になるのですが、突然入るCMにイラッときて
長押しではなく短く押してしまって次のmp3ファイルに飛んでしまうのです。イライラッ!
そこで1分ごとに分割してしまうことにしました。mp3directcutというソフトを使って切り出すことが出来ることを
知りました。そのうち、切り出し作業が面倒になって調べていくうちにコマンドラインでの実行も可能と分かり、
バッチファイル化の作業に掛かりました。出来上がったのは以下のような4行のバッチファイルです。
@echo on
echo %*
for /D %%a in (%*) do (mkdir "%%~na")&(copy 1min.mpd "%%~na".mpd)&(mp3directcut "%%~fa" /autocue "%~dp1%%~na")&(del "%%~fa")&(del "%%~na".mpd)
pause

1min.mpdというのは1分ごとに切る指定が記述されているキューファイルです。同名の.mpdファイルがあるとそれを使ってくれるみたいなので、最初に元ファイルとして作っておきます。
1分ごとに切り分けられたものを再生してもけっこう大丈夫で、音楽だと気付く程度です。
いろいろ書いてしまいましたが頭が精一杯なのでとりあえずお礼申し上げ失礼ます
[]
[ここ壊れてます]

227 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:34:41.57 ID:1IRdIkAf.net]
>>219
^(キャレット)はエスケープ文字
これを付けずに実行すると、コマンドラインパーサで式評価時にパイプとして機能しちゃう
つまりfor文の途中にパイプが現れてそこで途切れちゃうことになる
やりたいことは、この行の最初の評価時には単なる|の文字として取り扱ってもらい
次の''で括ったコマンドの評価時にはパイプとして機能してほしいってわけ
1回の評価を→で表すとすると、
^| → |
^^| → ^| → |
^^^^| → ^^| → ^| → |
って感じに展開されていく(俺は3回まで使ったことがある)
%a%とかの環境変数の評価も似たようなもんだね
%%a%% → %a%

228 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:49:53.08 ID:1IRdIkAf.net]
環境変数の評価を遅延させる方法はつまり
%%temp%%と%^temp%との2通り書けるわけだ
(結果的に同じになるけど動作は違う)

229 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:57:55.48 ID:1IRdIkAf.net]
>>221
これはコマンドプロンプトでのことでbatに書くときはダメだね

230 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 00:03:17.05 ID:bWF1v8hX.net]
評価と展開がごっちゃになってる
俺の理解が浅い(忘れっぽい)せいだな



231 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 07:18:41.23 ID:3NFRyYoM.net]
ここで言ってる遅延と、いわゆる「遅延展開」は別物ですか?

232 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 09:05:40.81 ID:fpIKg5e5.net]
>>218
>Month部分は、1 2 3...10 11 12、なら[1-12]
[]は文字集合。[]内の文字のうち何れか1文字という意味。文字列は扱えない
[1-12]だと"1-1"と"2"という意味で1か2になる
01-12月、01-31日を表すのなら [01][0-9]月[0-3][0-9]日
[01]が0か1で十の位、[0-9]が0から9で一の位
桁の揃っている01なら可能だが1-12月はfindstrの貧弱な正規表現では1度に表すのは無理なので
1桁の場合と2桁の場合とを別けて検索文字列に設定する必要がある

ちょ、誰か
findstr /r "検索文字列" とfindstr /r /c:"検索文字列" の違いを教えてくれ。忘れた

233 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 10:39:26.27 ID:AWu3veoe.net]
>>225
解説ありがとうございます
とりあえず日付の所いろいろやってみてるのですがうまく行かないままです。
正規表現といわず直接文字列を指定して | が有効になる

234 名前:ゥどうかというところから実験してます。

for /f "delims=" %%a in ('dir /ad /b ^| findstr /b /r ""10月15日"|"10月16日""') do call :SUB "%%~a"
pause
exit /b
:SUB
rem set s=%~1
rem ren %1 "%s:~0,2%%s:~3,2%%s:~6%"


findstrについての解説は検索で出てきた
http://www.atmarkit.co.jp/ait/articles/0412/18/news018.html
を読みました。読んだだけです。頑張ります
[]
[ここ壊れてます]

235 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 11:38:46.09 ID:fpIKg5e5.net]
>""10月15日"|"10月16日""
"で""を囲えないしfindstrの正規表現で|は使えない
findstr /?

まともな正規表現を使いたければvbsやPowerShell、Perlとか別のスクリプトに行ったほうがいい
バッチだと"&"や"%"とかダメ文字があるし凝った事をやろうとするといずれ行き詰まる
急がば回れ

236 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 22:45:54.56 ID:bWF1v8hX.net]
参考にWSHでもどうぞ(hoge.jsファイルとして作成)、コマンドプロンプトから
hoge "フォルダ名" (又は cscript //nologo hoge.js "フォルダ名")
又は、エクスプローラ等からフォルダをこのjsファイル(又はショートカット)にドロップして実行
var fso = new ActiveXObject("Scripting.FileSystemObject");
var args = WScript.Arguments;
if(args.length<1) throw Error("引数にフォルダを指定してください");
if(!fso.FolderExists(args(0))) throw Error("指定のフォルダが存在しません");
var folder = fso.GetFolder(args(0)), s = "", success = [], fail = [], name, name2, em, i, r;
var re = /^(\d{1,2})月(\d{1,2})日(.*)$/;
var func_new_name = function(all,mm,dd,ss) {
if(mm<1 || mm>12 || dd<1 || dd>31) return "";
return ("0"+mm).substr(mm.length-1) + ("0"+dd).substr(dd.length-1) + ss;
};
em = new Enumerator(folder.SubFolders);
for(em.moveFirst();!em.atEnd();em.moveNext()) {
name = em.item().Name;
if(re.test(name)) {
name2 = name.replace(re,func_new_name);
if(name2) {
try{em.item().Name = name2; success.push(" "+name+" -> "+name2);}
catch(e) {fail.push(" "+name+" -> "+name2);}
}
}
}
if(success.length>0) s = "リネーム成功\n"+success.join("\n");
if(fail.length>0) s += "\nリネーム失敗\n"+fail.join("\n");
WScript.Echo(s || "対象フォルダなし");

237 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 23:49:36.84 ID:G9wCIPXR.net]
もうPowerShellのRename-Item使おうぜ
個人用途だろうし制約ないでしょ

238 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 02:49:24.30 ID:nuzaMfIv.net]
覚えたてによく居るよね
要件無視した勝手な仕様でエラー判定とか結果ダイアログとかゴテゴテ実装してドヤ顔で持ってきちゃう子

239 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 02:57:26.06 ID:O0s7d+Fx.net]
まあダブルクリックで不意に実行されちゃうようなのは作りたくないよな

240 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 07:04:24.46 ID:G1+K6kx+.net]
>>215 無理やりバッチファイルの例

for /d %%i in (*) do set "a=%%~nxi" & call :w
goto :eof
:w
setlocal enabledelayedexpansion
set "e=m" & set /a b=0,m=0,d=0
:x
set "c=!a:~%b%,1!"
if not defined c goto :eof
for /L %%j in (0,1,9) do if "!c!"=="%%j" set /a !e!=!e!*10+c & goto y
if not



241 名前:"!c!"=="月" goto z
if not "!e!"=="m" goto :eof
if !m! gtr 12 goto :eof
set "e=d"
:y
set /a b+=1 & goto x
:z
if not "!c!"=="日" goto :eof
if not "!e!"=="d" goto :eof
if !d! gtr 31 goto :eof
set /a f=m*d,m+=100,d+=100,b+=1
if !f! gtr 0 ren "!a!" "!m:~1!!d:~1!!a:~%b%!"
[]
[ここ壊れてます]

242 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 22:17:20.50 ID:on6I0HDV.net]
>>231
うちの現場のバッチは例え内部で使わなかろうが最低1つは必ず引数を渡す仕様になってる。
そしてそれが渡されなかった場合は処理せずに終了する作りになっている。
理由は誤ってダブクリしちゃった場合の対策なんだってさ。

243 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 22:23:22.61 ID:hY2xT5yc.net]
batって大体はD&Dして使うようなの書いてるな

244 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 01:03:03.64 ID:cgLUQcTs.net]
>>230
なんか癇に障ったみたいだけど、言い訳すると
俺は、質問者によって回答内容を変えてる
今回の質問者は初心者だと感じたし、さらには細かい拘りを持っているように見受けられた
(13月32日なんて作らないだろうし、もしあったって1332に変換されて悪いことはないと思う)
色々と手を加えて試行錯誤することが好きなんだろうなって思ったから
役に立ちそうな追加部分を記述した
それに1レスで書く分には、数行増えようが関係ないだろうと思ったしね

245 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 08:32:22.21 ID:ny4cf+Vz.net]
>>233
なるほど

246 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 22:12:55.60 ID:JROgBEvY.net]
ザ・ワールド、時よ止まれ。

247 名前:デフォルトの名無しさん [2017/10/20(金) 03:00:35.66 ID:1Na2h1P4.net]
キッティングの自動化をしたいんだが、参考になるサイトない?

248 名前:デフォルトの名無しさん [2017/10/20(金) 03:00:59.71 ID:1Na2h1P4.net]
対象のレジストリ見つけるとかめんどい

249 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 23:41:00.84 ID:aZN6SiIl.net]
どの程度の自動化?

250 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 08:56:40.19 ID:Nsvn2WYb.net]
>>238
何を自動化するん?



251 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 16:42:48.10 ID:DofUW9OG.net]
そんなんツールが出てるんだからその説明でも読めよ

252 名前:デフォルトの名無しさん [2017/10/21(土) 18:43:14.12 ID:TBS9tbdH.net]
一発で、ファイアウォールの受信規則とかインターネットオプションとか






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<301KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef