【.cmd】 バッチファイルスクリプト %12 【.bat】at TECH
【.cmd】 バッチファイルスクリプト %12 【.bat】 - 暇つぶし2ch2:デフォルトの名無しさん
17/03/11 14:16:25.14 tWxSSf/m.net
2GET

3:デフォルトの名無しさん
17/03/11 17:24:01.08 aIgw+L4R.net
そろそろ次スレ立てた方がいいと思う

4:デフォルトの名無しさん
17/03/11 19:08:44.39 ayh8mOJp.net
タヒ

5:デフォルトの名無しさん
17/03/12 22:04:13.40 LKmH3irJ.net
達人の方々!お教えください
set文による文字列の置き換えで
=を置き換えたいのですが
どのように記述すればよいのでしょうか?

6:デフォルトの名無しさん
17/03/13 02:51:46.65 ieWeiZc+.net
>>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

7:デフォルトの名無しさん
17/03/13 02:56:02.96 ieWeiZc+.net
済まん pause テストするつもりで入れてたのを消すの忘れてた
まあそのままテストしてみて

8:デフォルトの名無しさん
17/03/13 03:26:40.42 Kv5ZfyaF.net
: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

9:デフォルトの名無しさん
17/03/13 07:40:38.20 KSFKLeET.net
>>6-8
ありがとうございます
色々試して見ます

10:デフォルトの名無しさん
17/03/13 22:53:05.48 UotY540z.net
>>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

11:デフォルトの名無しさん
17/03/15 08:22:32.42 Ekd3hMdD.net
cmderいいな
この手のツールで表示が崩れたりせずまともに動くやつ見るの初めてだ

12:デフォルトの名無しさん
17/03/15 19:39:27.45 sbz59NLr.net
for /r %%i in (*.jpg) のようなコマンドで取得した絶対パスをカレントフォルダとの相対パスに変換するにはどうするのが一番ですか?
現在はsetコマンドの置換機能でカレントフォルダの部分のパスを消しているんですがパスに変な文字列が入っていると誤作動を起こしそうで少し不安です。
もっとスマートなやり方はありますか?

13:デフォルトの名無しさん
17/03/16 01:00:29.70 DixFGYK0.net
>パスに変な文字列が入っていると
どのみち%が入っているとバッチだと詰む。やれなくないけど物凄く面倒
バッチでは完全な文字列操作は無理だと割り切った方がいい
PowerShell使えば?
URLリンク(www.google.co.jp)

14:デフォルトの名無しさん
17/03/16 01:47:18.14 9KCSEqzj.net
>>13
分かりました、何か別の方法を考えます

15:デフォルトの名無しさん
17/03/16 02:25:05.07 iKA3O6Cf.net
>>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

16:デフォルトの名無しさん
17/03/16 02:32:32.21 iKA3O6Cf.net
肝心なのは、文字列操作、表示まで扱う場合は
文字列を必ず""で括るようにすること
& % ^ 等を含んでると括ってないとおかしくなる

17:デフォルトの名無しさん
17/03/16 04:08:08.29 gadu0oc0.net
chcp 437

18:デフォルトの名無しさん
17/03/16 11:46:49.75 iKA3O6Cf.net
>>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

19:デフォルトの名無しさん
17/03/16 12:49:57.48 iKA3O6Cf.net
訂正
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

20:12
17/03/16 18:53:00.18 9KCSEqzj.net
>>15
ありがとうございます
文字列を置換することばかり考えていたのでカレントフォルダ分の文字数を削るという発想に行き着きませんでした
これで何とかなりそうな気がします

21:デフォルトの名無しさん
17/03/17 21:12:58.50 V4hZYsin.net
どなたかお詳しい方、ご教示ください
windows7を起動後、自動で特定のアカウントパスワード入力後にログインし、
ログイン後、デスクトップの特定座標を自動でクリックするという操作を行わせたいです
このような処理はbatファイルで可能でしょうか?
win7初期状態にインストールされているものであれば他のものを使用してもよいのですが。
キーワードだけでも結構ですので、お助けいただければ幸いです

22:デフォルトの名無しさん
17/03/17 21:46:29.02 93Jxn9OB.net
胡散臭すぎるだろ・・・

23:デフォルトの名無しさん
17/03/17 22:18:36.30 Pk7DeofX.net
ログインとはWindows7の登録ユーザーってことか?
それともWebブラウザを起動してどっかのサイトにログインするってことか?
あと何故マウスクリックなのか?
デスクトップに表示してるアイコンなら別に直接起動できるだろうに

24:デフォルトの名無しさん
17/03/18 09:01:42.64 KPOks79l.net
>>21
無理です

25:デフォルトの名無しさん
17/03/18 15:14:23.81 cDGLzqpd.net
start URLリンク(www.google.co.jp)自動ログイン

26:デフォルトの名無しさん
17/03/20 17:14:02.44 QMGJB+5Y.net
だいぶ使い道ないけど、DIRって複数フォルダの内容を1回で表示できるんだね。
 DIR C:\tmp C:\tmp2

27:デフォルトの名無しさん
17/03/24 13:17:40.14 jo55dHfH.net
for文が同一フォルダに自分で出力したファイルを
一つだけ拾っちゃうんだけど、何か対策はありませんか?
for %%I in (*.jpg) do copy %%I %%~dpI_%%~nxI
って感じに処理すると
1.jpg 2.jpg → _1.jpg _2.jpg __1.jpg
となっちゃう…

28:デフォルトの名無しさん
17/03/24 13:52:45.87 OsTTofqK.net
for /f "delims=" %%a in ('dir /a-d /b *.jpg') do

29:デフォルトの名無しさん
17/03/25 20:50:35.80 8s6m96Ov.net
なるほどDIRか…
ありがとうございました。

30:デフォルトの名無しさん
17/03/28 18:35:13.10 oEoZ8De2.net
バッチファイルで
echo %*
とすると引数がすべて表示されるけど
%0=自分自身だけ無いのはなんで?
*で0だけハブられるなんて可�


31:」想……



32:デフォルトの名無しさん
17/03/28 18:52:24.94 IKXgMhqU.net
少し考えれば分かりそうなものだが
%cmdcmdline%

33:デフォルトの名無しさん
17/03/30 01:42:37.50 gGp/SYAm.net
なんか真似しそう(笑)

34:デフォルトの名無しさん
17/04/03 06:06:20.82 awE7Wvau.net
バッチ書くのにオススメのエディタあったら教えて
最近目がめっきり弱くなって来たので色分け表示とかの視認性上がるものや
便利そうな機能があるものを知りたい
頻繁に使うわけじゃないからこそ探すの面倒で先人の知識をお借りしたい

35:デフォルトの名無しさん
17/04/03 07:06:14.38 pL1jzkCs.net
>>33
VisualBatは?
文字に色もつくしいろいろ設定できるよ
batをexe形式にすることもできる

36:デフォルトの名無しさん
17/04/03 07:12:25.04 5ummjK72.net
サクラエディタ

37:デフォルトの名無しさん
17/04/03 07:33:25.19 uEU30p4H.net
マジレスすると目が悪いならでかいモニタ買ってフォントサイズでかくするのが一番良い
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%

38:デフォルトの名無しさん
17/04/03 07:56:40.92 wDpIbVKg.net
中身のない長文要らんわ

39:デフォルトの名無しさん
17/04/03 22:35:33.81 TkzGFBjq.net
>>33
黒背景に白地の文字が視認性あがるよ
フォントはゴシックで文字サイズも大きくする
俺の使ってるのは一般的にはオススメではないのでどうかと思うが
(New)QXエディタ(一応シェアウェアだが未登録でも機能制限も期間制限も無い)

40:デフォルトの名無しさん
17/04/03 22:53:09.08 jFb9lqNm.net
真っ黒背景に真っ白文字は目がズキズキする

41:デフォルトの名無しさん
17/04/03 22:58:56.52 TkzGFBjq.net
>>39
確かに、目のいい人にとってはそうかもしれないけどね
コマンドプロンプト画面がエディタ画面だと思ってもらえれば想像できるよね

42:デフォルトの名無しさん
17/04/03 23:14:57.75 rmwiW03F.net
color 0f
は目に痛い

43:デフォルトの名無しさん
17/04/03 23:18:55.00 TkzGFBjq.net
目のいい人がコメントしたって意味ないだろ
老眼やかすみ目で文字が読みにくくなったらわかるよ
特に、カンマとピリオドの区別が付かないとストレス溜まるぜ

44:デフォルトの名無しさん
17/04/03 23:37:00.86 mc8PKhXW.net
>>33
サクラエディタ入れて
IPAゴシックフォントにする

45:デフォルトの名無しさん
17/04/04 00:06:37.41 m/ZONOLH.net
背景は薄い黄緑色にしてる
目が疲れない

46:デフォルトの名無しさん
17/04/04 00:16:41.83 Q0uaZ4Jg.net
そういえば昔のホスト端末とかって黒背景に緑字が多かったよね?
あれってなんでだろ?

47:デフォルトの名無しさん
17/04/04 02:35:10.99 G7XsiAet.net
>>45
グリーンディスプレイがあったからじゃね?

48:デフォルトの名無しさん
17/04/04 02:45:05.78 ti2ez7YV.net
緑やオレンジの蛍光体の方がTVの白蛍光体より刺激が少ないから採用されていたらしい

49:デフォルトの名無しさん
17/04/04 04:37:33.60 RiJvnB3V.net
>>40
適当な画像エディタのスポイトで抽出してみればわかるけど
コマンドプロンプトは黒と白じゃなくて黒とグレー
理由は目への配慮
DQも同じ

50:33
17/04/04 05:42:06.14 ldgn2Vfw.net
皆様たくさんのレスありがとうございます
VisualBat試してみました
デバッガとしては便利そうですがTab文字打てないのでエディタとしてはまだちょっと使えなさそうです
for や if の()で自動インデントとかしてくれるようになると便利かも
今後の更新に期待します
他、挙げて頂いたアドバイスも順次時間が取れ次第試して行きたいと思っております
次はサクラエディタを試用する予定。他候補にMery、QX
コマンドプロンプトは color 07 不透明度80 で使っております
かすみ目、乱視、老眼、ド近眼、何れも酷いです
他に思い付いたアドバイス等ございましたらよろしくお願いします

51:デフォルトの名無しさん
17/04/04 06:03:57.35 o7weIbXl.net
>>43
フォントはVLゴシックのほうがいいと思う

52:デフォルトの名無しさん
17/04/04 12:05:28.05 h1EI1nbQ.net
gPadは色弄りやすい

53:デフォルトの名無しさん
17/04/04 12:56:18.88 CQgziqhI.net
>>50
あのフォントゼロに斜線が入ってるから使ってる

54:デフォルトの名無しさん
17/04/05 00:03:13.02 jDUjKmAY.net
>>48
>DQも同じ
ドラクエ?

55:デフォルトの名無しさん
17/04/08 17:14:16.29 3YaJnUcz.net
ms製wgetなんてあったんだな
何故か異様に遅いが
bitsadmin /Transfer htmlget URLリンク(www.google.co.jp) c:\logo.png

56:デフォルトの名無しさん
17/04/08 17:15:28.84 3YaJnUcz.net
フォントはMyricaがClearTypeと相性がいい

57:デフォルトの名無しさん
17/04/08 17:52:42.60 RJCKk6tM.net
VLゴシックは行間空き過ぎ
同じ行数が表示出来るようフォントサイズで調整した場合
VLゴシックのフォントサイズ10に対しIPAゴシック12、MSゴシック13
やたらと空行入れたがる脳みそスカスカの空行厨が好みそうなフォント
自分にはIPAゴシックよりVLが良い点が見当たらないので
>>50さん、どの辺が良いのか具体的に教えていただけると助かります

58:デフォルトの名無しさん
17/04/08 18:14:54.54 xnWSKOe7.net
>>54
これは知らんかった
バッチファイルで夜間にダウンロードとかに便利だな

59:デフォルトの名無しさん
17/04/08 18:57:28.10 LC0ZcHdg.net
>>54
動かなかったんで/helpしてみたら、WindowsXPのbitsadminには/Transfarが無かった(version 1.0 [ 5.1.2600.0 ])
調べてみたら、
Windows XP Service Pack 2 サポート ツール
URLリンク(www.microsoft.com)
をインストールすればいいことが判った
version 2.0 [ 6.6.2600.2180 ]

60:デフォルトの名無しさん
17/04/09 11:47:08.97 z+t/KLMw.net
Myrica良いね
|が破線なのと\→\バックスラッシュに違和感あるけど慣れればこっちの方が見分け楽そう

61:デフォルトの名無しさん
17/04/11 20:07:11.55 bvJ+shyZ.net
set test=%1
for /f "delims=" %%f in (%test%) do (
E:\test\test.bat %%f
)
上記のfor処理にテキストのファイルパスを一つずつ読み込ませて専用batで処理した後に
全部終わったらシャットダウン処理をしたいのですが
ループ処理に割り込ませる方法って何かありますか?

62:デフォルトの名無しさん
17/04/11 21:42:41.83 ZiByT+J4.net
質問の意味が不明瞭
全部終わった後でいいならforの後にshutdown書けばいいんでないの?
for中に割り込ませたいのは何故?

63:デフォルトの名無しさん
17/04/11 22:02:51.00 bvJ+shyZ.net
set test=%1
for /f "delims=" %%f in (%test%) do (
E:\test\test.bat %%f
)
shutdown /S /T 30
単純にこれでうまくいかなかったので割り込ませる必要があるのかと思い質問しましたが
やっぱりそんなわけないですよね・・・
単純なミスをしてる可能性が高そうなのでもう一回見直してみます

64:デフォルトの名無しさん
17/04/11 22:31:07.73 U8R3p0c1.net
callしてないからtest.batから帰ってこないだけでは

65:デフォルトの名無しさん
17/04/11 22:39:54.03 bvJ+shyZ.net
あちゃーほんとだ
普通に動いてたから気づかなかった・・・
アホですね
ちょっと修正してテストしてみます
指摘ありがとう

66:デフォルトの名無しさん
17/04/15 01:17:56.44 yuPX0yl1.net
ソフトを起動した際に出るライセンスキーを入力する画面に値を自動でいれたいです。
batで可能でしょうか?

67:デフォルトの名無しさん
17/04/15 08:13:42.82 eG98vJ7n.net
ahk

68:デフォルトの名無しさん
17/04/15 23:02:38.65 a3PF4w5O.net
batでgrep検索をしようと思ってるんだけど、
検索結果にファイルのフルパスを出力する方法を教えてください><
現状だとファイル名+行の内容しか出ない・・・

69:デフォルトの名無しさん
17/04/27 06:44:05.61 Ek2Yalzm.net
複数のファイルがあり、ぞれぞれ中身が
fileID: aaaa within(
);

fileID: akf within(
);
などfileID: ~ within();は固定です。
各ファイルのaaaaやakfを読み込みの際に変数に取り込みたいのですがどのように書けばいいでしょうか?
fileID: aaaa within(はファイルの一行目なので set /p fl=< %inputFile% でとれました。

70:デフォルトの名無しさん
17/04/27 07:31:26.21 LF40VtKG.net
テストしてないけどこんな感じ。必要ならusebackqとかも。aaaaに&とか入るならsetでクオートする必要がある
for /f "tokens=2* delims= " %%a in (%inputFile%) do (
set ID=%%b
goto :NEXT
)
:NEXT
または
set /p fl=< %inputFile%
for /f "tokens=2* delims= " %%a in (%fl%) do set ID=%%b
または
for /f "tokens=2* delims= " %%a in ('findstr /b /c:"fileID" "%inputFile%"') do set ID=%%b

71:デフォルトの名無しさん
17/04/29 21:00:05.56 GvSnly4L.net
>>69
"within("しか取れませんでした。

72:デフォルトの名無しさん
17/04/29 23:45:46.56 AyX6Tpbc.net
書いたコマンドとテストした対象ファイルの1行目をコピペで貼ってみ

73:デフォルトの名無しさん
17/05/09 16:43:52.50 PScyAxKX.net
助けて下さい!
毎月第二木曜日の16:00になったら
Aフォルダに入っているgファイルにBフォルダに入っているgファイルを上書きする
batファイルを作って下さい
よろしくお願いします

74:デフォルトの名無しさん
17/05/09 17:29:08.98 bjRIYrg3.net
>>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

75:デフォルトの名無しさん
17/05/09 18:58:44.41 PScyAxKX.net
>>73
ありがとうございます!

76:デフォルトの名無しさん
17/05/12 00:01:39.58 1meaH6LX.net
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を使う方法は思いついたのですが他に空だった場合にゼロを代入するなどは可能でしょうか?

77:デフォルトの名無しさん
17/05/12 08:46:27.33 trqCrhEU.net
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%

78:デフォルトの名無しさん
17/05/12 11:05:40.92 lLM9Jqdl.net
echo ^
とすると more? と出る
??

79:デフォルトの名無しさん
17/05/12 12:02:37.54 +kEWkBL6.net
>>76
空の場合に1が代入されてエラーを回避できました
サンクス

80:デフォルトの名無しさん
17/05/19 17:52:47.97 ya28xWZT.net
特定のフォルダ内のテキストファイルを処理するバッチを作りましたが
@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の
処理済みのテキストを除外して処理したいのですが
コマンドのアドバイスを頂けないでしょうか

81:デフォルトの名無しさん
17/05/19 19:38:36.49 HiKVEJh7.net
>>79
もし、その入力ファイルをその後弄らないのならファイル属性を弄るのがいい
例えば、アーカイブ属性を削るとか読み取り専用属性にするとか
そうすれば、forの中のdirに/aで分別できる
それが無理な場合は、こんなかんじでファイルに登録されているかどうかチェックするとかかな
findstr /x "%%~ni" syorizumi_list.txt >nul
if errorlenel 1 (
echo %%i
call E:\work\syori.bat "%%i"
)
)

82:デフォルトの名無しさん
17/05/19 21:01:19.56 ya28xWZT.net
>>80
レスありがとうございます
読み取り属性の方は最終手段としてとりあえず書かれたコマンドを追記してテストしていますが
エラーで強制終了してしまいます・・・
ヒントは頂けたのでちょっと考えてみます

83:デフォルトの名無しさん
17/05/19 21:32:14.27 8Dg0HTHO.net
処理済みファイルを下位ファルダに移動させるとかじゃダメなの?
それが1番楽だと思うけど

84:デフォルトの名無しさん
17/05/19 22:02:54.16 ya28xWZT.net
ダメではないですし意地になってるだけです・・・
すいません
どうしようもなければそうしおうと思います

85:デフォルトの名無しさん
17/05/19 22:41:00.81 HiKVEJh7.net
>>81
ただのtypoだから(errorlevel)
あと処理済ファイルの指定はフルパスにしないとダメかも

86:デフォルトの名無しさん
17/05/19 22:45:30.06 HiKVEJh7.net
あと、移動させるなら下位フォルダはダメだよ
dir /sではそれも対象だから

87:デフォルトの名無しさん
17/05/19 23:51:05.34 ya28xWZT.net
>>84
修正したら動きました!
ありがとうございます
ただsyorizumi_list.txtに
aaa
bbb
ccc
とあったらaaaしか除外してくれませんね・・・
もう少し調べてみます

88:デフォルトの名無しさん
17/05/20 02:30:44.06 HrYyDnOr.net
>>86
まあこっちが悪いっちゃ悪いんだけど、これくらい修正して使って欲しかった
/c:"%%~ni"

89:デフォルトの名無しさん
17/05/20 08:10:06.10 N++czmo3.net
>>87
眠すぎたのと集中力が散漫で気づいてないだけでした・・・
すいません
それと指摘の通り/c:に変えたら期待通りの動作になりました
サンクス!

90:デフォルトの名無しさん
17/05/20 21:37:37.96 HrYyDnOr.net
>>88
その言い方に嫌な感じがするんだがちゃんと引数の意味を調べて使ってるよね
/x /c:"%%~ni"としてるんなら、変な勘ぐりスマン

91:デフォルトの名無しさん
17/05/20 22:35:16.21 N++czmo3.net
>>89
/x /c:"%%~ni"で問題なく動作しています
細かいところまでありがとう

92:デフォルトの名無しさん
17/05/22 14:12:41.59 Q9T2A2Wt.net
こんなろくに理解せずそのまんまコピペして使ってるとトラップに引っかかるぞ

93:デフォルトの名無しさん
17/05/22 22:28:16.59 b+LuBt/G.net
下位フォルダに移動することも検討してるなんてレスから
/sが必要だとも思えんよね

94:デフォルトの名無しさん
17/05/22 22:30:42.85 b+LuBt/G.net
もし/sが意図通りだったら
aaa.txt
aaa\aaa.txt
なんて状況どうするんだって話だし

95:デフォルトの名無しさん
17/05/26 07:30:18.71 /NUGeMQI.net
>>89
> その言い方に嫌な感じがするんだがちゃんと引数の意味を調べて使ってるよね
同意
88の1行目で奴の人物像がすべて分かる

96:デフォルトの名無しさん
17/05/26 16:05:36.92 OOQCykcT.net
引数 %1 %2 ,, は%9 までだが
shiftで取り出せば%10以上でも取り出せた

97:デフォルトの名無しさん
17/06/15 12:35:49.64 j04OpPTD.net
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

98:デフォルトの名無しさん
17/06/15 13:13:57.77 6QOS5lbl.net
robocopy /?

99:デフォルトの名無しさん
17/06/15 15:41:43.67 y+UEOWCj.net
>>96
cd /d c:\down
cd d:TozakaruzoSaikonkara
for /r %%i in (*.avi *mp4) do copy /y "%%~fi" d:

100:デフォルトの名無しさん
17/06/15 15:46:23.72 y+UEOWCj.net
cd d:\TozakaruzoSaikonkara の方がいいか

101:デフォルトの名無しさん
17/06/15 15:50:20.24 y+UEOWCj.net
もしフォルダが無いなら
md d:\TozakaruzoSaikonkara 追加してくれ

102:デフォルトの名無しさん
17/06/15 16:07:02.35 y+UEOWCj.net
*.mp4 だった
穴だらけだな
俺もボケてきたか

103:デフォルトの名無しさん
17/06/15 17:02:52.10 +JrLzVDI.net
>>98
おー、inの句に並列できるんですね
%%~fiのfはfileの意味でしょうか
いずれにしても無事コピーされました
応用も効きそうなので調べて利用させていただきます!
ありがとう

104:デフォルトの名無しさん
17/06/15 17:08:46.74 +JrLzVDI.net
いや、フルパスかな
初めてだったので、楽しみます
ありがとう

105:デフォルトの名無しさん
17/06/16 01:17:16.66 fojoWyA2.net
>>103
俺がもっといいやり方がないか調査するからとりあえずmoroフォルダをうp!

106:デフォルトの名無しさん
17/06/17 18:10:57.34 hP08xqzx.net
>>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

107:デフォルトの名無しさん
17/06/17 21:48:00.86 4uF4heHb.net
for /r c:\down %%i in (*.avi *.mp4) do move /y "%%~i" c:\TozakaruzoSaikonkara

108:デフォルトの名無しさん
17/06/17 22:08:13.20 hP08xqzx.net
>>106
ありがとうございます!
比較して、代入の引数iに違いがあるし、もう少し勉強します。
また、わからないことなど出てくるかもしれませんが、その時はよろしくお願いいたします。

109:デフォルトの名無しさん
17/06/17 22:53:57.13 4uF4heHb.net
参考に言っておくが () の中の引数なんだが、ワイルドカード以外は要注意だ
例えば (*.avi *.mp4 sukebe.jpg) とかにすると
各ディレクトリに sukebe.jpg が無くても強引にコマンド実行してエラーになったりする

110:デフォルトの名無しさん
17/06/19 21:06:26.56 HM1jnBNt.net
moroとかsukebeとか名付けがオッサン臭いんだがw

111:デフォルトの名無しさん
17/06/26 00:08:20.51 a4kJ2YgH.net
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

他にもっと複雑な検索も出来るのでしょうか?

112:デフォルトの名無しさん
17/06/26 00:10:31.02 a4kJ2YgH.net
あと「DIR /?」で出てくるヘルプにはこの機能について触れられていないのはなぜなのでしょう?こんなに便利なのに。

113:デフォルトの名無しさん
17/06/26 00:24:40.04 1HPve1dM.net
ワイルドカードはDIR固有じゃないけど

114:デフォルトの名無しさん
17/06/26 00:27:25.02 q7GF7ZpN.net
>>111
windowsXPで恐縮なんだが、Windowsヘルプ(ヘルプとサポートセンター)では、
Dirの項目の説明の中で、ワイルドカード関係のものとして以下のものが書いてあったよ
解説
・複数の filenames を使用する
 複数の filenames を使用できます。スペース、カンマ、またはセミコロンでファイル名を区切ります。
 FileName でワイルドカード文字 (? と *) を使うと、ファイルのグループを表示することができます。
・ワイルドカードを使用する
 ワイルドカード (? と *) を使うと、ファイルとサブディレクトリのサブセットの一覧を表示できます。

ドライブ C のすべてのディレクトリで、拡張子が .txt のすべてのファイルの一覧を表示するには、次のように入力します。
dir c:\*.txt /w/o/s/p
各ディレクトリにある拡張子が .txt のファイル名が、アルファベット順にソートされた一覧がワイド形式で表示されます。
画面単位で一時停止し、キーが押されると次の画面が表示されます。

115:デフォルトの名無しさん
17/06/26 01:37:25.73 q7GF7ZpN.net
>>111
つまりコマンドの内蔵ヘルプは簡略版ってことなんだ
それと、なんかちょっと検索してみたら
Windows10には「ヘルプとサポート」がないらしい
なのでオンラインでのコマンドラインリファレンス
URLリンク(technet.microsoft.com)
XPの「ヘルプとサポート」には
「コマンドラインリファレンス」の他にも、
「新しいコマンドラインツール」
「コマンドシェルの概要」(ここにパイプやリダイレクトの説明が載っている)
ってのがあったんだけどなあ

116:デフォルトの名無しさん
17/07/01 02:44:43.86 mwCfh4Ih.net
質問があります。
ちょっと事情があってすべての引数をダブルクオーテーションで囲って実行しなければならなくなりました。
例えばこんな感じで
"C:\Software\ffmpeg\ffmpeg.exe" "-i" "%~1" "-vcodec" "utvideo" "-acodec" "pcm_s16le" "%~dpn1_test.avi"
ffmpegでは正常に動くことを確認したのですが他の一般的なソフトウェアもこのような起動方法で動作すると考えてもいいのでしょうか?

117:デフォルトの名無しさん
17/07/01 03:37:58.17 QCoLM9eW.net
引数の仕様はそれぞれだが問題無い

118:デフォルトの名無しさん
17/07/05 22:31:01.85 9GxT9B4i.net
とあるファイルの中身の文字列を置換したいのですが、何かいい方法はありますでしょうか?
とあるファイルはtxtファイルではないですが、テキストエディタで開くと文字列が書いてあります。

119:デフォルトの名無しさん
17/07/05 22:46:04.03 R8zuGv9z.net
全部テキストならともかくそれ以外のバイナリファイル内の置換はcmdじゃ無理だろ
WSHとかPower Shellとかで探せ

120:デフォルトの名無しさん
17/07/06 00:29:11.58 l/JVwvz3.net
テキストファイルだけど、拡張子がtxtではないファイルのことです

121:デフォルトの名無しさん
17/07/06 01:41:06.31 vizsBHcK.net
findstr である程度のことはできるけど、置換の条件とかが複雑になってくるとしんどい。
外部コマンドが使用可能なら、onigsedとか、SEDを使った方が多少は楽。

122:デフォルトの名無しさん
17/07/06 02:34:32.14 VUvDmuBp.net
>>119
拡張子になんの意味があると思ってるの?
なんかそのレベルの知識だったら、メモ帳でも使った方がいいと思うよ。

123:デフォルトの名無しさん
17/07/07 17:03:51.39 peDYPYbs.net
>>119
ren Nullpo.unko Nullpo.txt

124:デフォルトの名無しさん
17/07/09 19:10:43.21 Gxva3cTk.net
バッチファイルからシリアルポートを簡単に読み書き出来る手段って無いですかね?
古くはCOM?を使う方法が有名ですがBluetoothなどで作られた仮想シリアルポート?には使えないようです

125:デフォルトの名無しさん
17/07/13 00:28:41.39 m+WJUz/m.net
シリアルポートってなんだ?RS-232Cとかか?

126:デフォルトの名無しさん
17/07/13 00:45:21.62 CfPNRtgi.net
>>123
232C→USB変換ケーブルみたいなのあったような

127:デフォルトの名無しさん
17/07/16 11:23:45.75 FHjtOHLZ.net
そもそもバッチファイルって何?
CでもBasicでもなく、メモ帳の拡張子をbatに変えるだけで良くて、
コマンドブロンプトとかいう、MS-DOSと何が違うのかわからないような画面で動いて、
何なの?

128:デフォルトの名無しさん
17/07/16 15:58:56.60 30vHB81v.net
CだってBASICだってメモ帳の拡張子を適当に変えれば行けますよ

129:デフォルトの名無しさん
17/07/18 02:02:06.89 Bi+xDIbE.net
「拡張子とは何か」から始めとけ

130:デフォルトの名無しさん
17/07/18 09:43:40.29 YNdL6SIO.net
>>126
>メモ帳の拡張子をbatに変える
notepad.exeの拡張子をbatに変えたら動かなくなりますよ

131:デフォルトの名無しさん
17/07/18 12:15:15.33 +17jTjCv.net
>>129
なんでメモ帳って書いてあるのにnotepad.exeをいじるわけ?

132:デフォルトの名無しさん
17/07/18 12:23:23.94 lxnTGpj5.net
そらメモ帳の実体はnotepad.exeやし

133:デフォルトの名無しさん
17/07/18 19:54:35.52 qQbuN+bc.net
>>130
お前の言う「メモ帳」とはnotepad.exeでない何か他のものなのか?

134:デフォルトの名無しさん
17/07/18 20:32:10.68 wtRY8Rgw.net
もう夏休みか

135:デフォルトの名無しさん
17/07/18 23:42:51.89 Wjn/rMX6.net
揚げ足の取り方が寒い。

136:デフォルトの名無しさん
17/07/19 00:03:00.46 oeGL8Gu+.net
>>126についていうなら、その辺のいい加減さが理解を妨げてると言える

137:デフォルトの名無しさん
17/07/19 00:19:58.81 wIP5zHZ/.net
とにかく>>126は色々とおかしい
どこから突っ込めばいいのかわからんくらいにアチコチおかしい
PC初心者板ならともかく、なぜム板にこんな人が居るんだ?ってレベル
迷い込んできたのか?

138:デフォルトの名無しさん
17/07/19 00:23:24.87 I6a60LYe.net
しかし誰もきちんと説明できないという

139:デフォルトの名無しさん
17/07/19 02:27:06.77 Gwnbk1WK.net
どこから説明始めたらいいのかわからん程だし

140:デフォルトの名無しさん
17/07/19 21:02:00.27 WMMf4PqS.net
説明はできないが


141:揚げ足は取れる、ということですね。



142:デフォルトの名無しさん
17/07/19 22:27:12.79 caLBuZR5.net
コピー系コマンドのコピー速度って
遅 copy < xcopy < robocopy 早
で良いですよね?
これはVista、7、10のどのOSでも同じでしょうか?

143:デフォルトの名無しさん
17/07/19 23:32:30.26 I6a60LYe.net
copyの方が早くね?4文字だし。

144:140
17/07/20 03:04:39.26 R4lBeVK+.net
>>141
コマンド打ち込むにも時間がかかりますから一理ありますね。copyは引数指定も直感的だし…

って常にコマンド手打ちする訳でもないですし!w

145:デフォルトの名無しさん
17/07/22 00:59:36.62 J1O+P69V.net
+.bat や ,.bat もOKだった

146:デフォルトの名無しさん
17/07/22 21:18:13.40 yBUCBb6t.net
プラスバッドって、何か格好いいな。
カンマバットはダセェけど。

147:デフォルトの名無しさん
17/07/23 16:18:49.88 sxzHAQSA.net
では、
£.bat
γ.bat
ラプラスバットと、ガンマバットでは、どうだろう?

148:デフォルトの名無しさん
17/07/29 01:24:32.19 ocuZvBLs.net
@.bat や =.bat
ファイルを作ることはできるが、実行しようとしてもコマンドプロンプトに無視されて実行できなかった

149:デフォルトの名無しさん
17/07/29 02:07:03.67 0L2d7SO5.net
@.bat はフルパスで C:\work\@bat ってするか、キャレットでエスケープして ^@.bat で実行できる
=.bat はフルパスでもダメだけど、キャレットでエスケープすればいける

150:デフォルトの名無しさん
17/08/01 00:45:45.45 7i1X54Qd.net
>>147
キャレットって何かわからなかったが、^をつけることなんですね
^@ や ^= でたしかに実行できました

151:デフォルトの名無しさん
17/08/10 19:56:28.38 gQNT5BPl.net
(^_^)

152:デフォルトの名無しさん
17/08/10 21:54:16.62 BFQhJ/Te.net
"@ とか "= とか

153:デフォルトの名無しさん
17/08/14 22:38:23.70 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:デフォルトの名無しさん
17/08/14 22:39:38.44 3xlVGOet.net
ああああ遅延変数でした
もうやだああぁ

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

156:デフォルトの名無しさん
17/08/15 02:10:26.85 F71LHla5.net
>>151
まずは
SET DEST_DIR = %%P
endlocal && set DEST_DIR = %DEST_DIR%
の空白がいけないのでは?
SET DEST_DIR=%%P
endlocal && set DEST_DIR=%DEST_DIR%

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

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

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

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

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

162:デフォルトの名無しさん
17/08/18 00:59:25.98 Oq4EZT3J.net
こんな感じ?
set "File=%~1" & ren "%File%" "remove=%File: =%"

163:デフォルトの名無しさん
17/08/18 01:00:23.41 Oq4EZT3J.net
間違えた
set "File=%~1" & ren "%File%" "%File: =%"

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

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

166:デフォルトの名無しさん
17/08/20 16:35:22.92 T95gEh5X.net
>>161
誰もツッコミ無しなの?

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

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

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

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

171:デフォルトの名無しさん
17/08/20 19:15:30.58 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:デフォルトの名無しさん
17/08/22 19:19:28.49 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:デフォルトの名無しさん
17/08/22 20:10:25.50 uGuLhv+Q.net
powershellに切り替えたら?

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

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

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

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

179:デフォルトの名無しさん
17/08/29 15:34:02.29 ZSKrJS0x.net
>>175
Flexible Renamer

180:デフォルトの名無しさん
17/08/29 16:50:10.59 iDduY4Qi.net
お~瑠璃ね~むで十分やぞ
D&D用のショトカも作れるしな

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

182:デフォルトの名無しさん
17/08/29 20:06:42.61 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:デフォルトの名無しさん
17/08/31 16:38:58.30 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:デフォルトの名無しさん
17/08/31 17:02:31.64 KsdTyPQv.net
>>180
変換の数字の前が_文字じゃないかもしれないし
_文字がファイル名の中に混じっている可能性もあるし

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

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

187:デフォルトの名無しさん
17/09/03 22:03:48.56 BJjXydYg.net
cd \
pushd D:\abc
setlocal
popd
としても元の \ に戻らなかった

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

189:デフォルトの名無しさん
17/09/04 01:15:44.81 24unggVp.net
>>185
ありがとうございました
そういうことでし


190:たか



191:デフォルトの名無しさん
17/09/16 05:02:43.18 cRJ1WDqm.net
今さらバッチファイル入門て…
余計な被害者増やさずPowerShellにしろよ
これだからIT後進国は
超入門コマンドプロンプト:バッチコマンドで定型処理を行う (1/3) - @IT
URLリンク(www.atmarkit.co.jp)
017年09月15日 05時00分 公開

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

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

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

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

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

197:デフォルトの名無しさん
17/09/17 11:23:06.30 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:デフォルトの名無しさん
17/09/17 12:31:00.83 z++LvPT9.net
それだけならバッチ作るまでもなくハードリンクにすればアイコン問題も解決では

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

200:デフォルトの名無しさん
17/09/18 00:06:56.51 AVBMNnfo.net
短いファイル名に関していくつか質問
1 短いファイル名はダブルクオーテーションで囲まなくても実行可能?
2 短いファイル名は取得して一ヶ月経っても変動せずにそのパスを実行出来る?

201:デフォルトの名無しさん
17/09/18 23:50:36.04 2dThcY7y.net
>>196
「1」は、多分可能
「2」は、他にファイルが出来なければが前提かと
「dir c:\*1」と「dir c:\*1 /x」を実行して挙動を確かめて下さい。

202:デフォルトの名無しさん
17/09/19 00:09:36.87 I5t298fo.net
少なくともNTFSではファイルの情報としてショートファイルネームも格納されるから
ファイルが存在したままある日突然名前が変わることはないはず
そのファイルを削除して似たようなロングファイルネームの別のファイルを作った時
同名だけど別のファイルが出来てしまう事はありえる

203:196
17/09/19 01:33:17.50 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:デフォルトの名無しさん
17/09/19 02:17:59.79 Lhe/hdFe.net
mklinkやsubstを使って違う名前でアクセスするのはどうなのでしょう
うまくいくかどうかわかりませんが
ファイル名フォルダ名に空白や%^!みたいな記号があると困ることが多いですね

206:デフォルトの名無しさん
17/09/20 03:12:37.88 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
URLリンク(support.microsoft.com)
Schtasks.exe を使用して、スケジュールされたタスクのパスにスペースが含まれている場合を作成するときにスケジュールされたタスクが実行されません。
URLリンク(support.microsoft.com)
失敗例
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
17/09/20 06:44:59.65 w13Y3qRA.net
>>201
自分の説明が下手で伝わらなかったんだと思いますが、成功例の方の記述でパスにスペースを含むbatは起動できるのですがそのbatにダブルクオーテーションを含む引数を渡すと動作がおかしくなるのです。
引数にダブルクオーテーションを含まない場合は正常に起動できます。

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

209:デフォルトの名無しさん
17/09/21 11:18:59.39 WXZB4PjF.net
%CMDCMDLINE%はどうなってる?

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

211:デフォルトの名無しさん
17/09/21 18:35:03.44 uKBRYTKY.net
test

212:196
17/09/21 18:38:58.99 uKBRYTKY.net
NGワードが含まれていたようなので他所に書きました
URLリンク(pastebin.com)

213:デフォルトの名無しさん
17/09/24 20:04:30.28 0vysq0yQ.net
基本的に引数の中の半角スペースはデリミタであり
そこより左に " が奇数個あればデリミタじゃなくなる
それに関しては \" とか ^" とかあっても関係ないんじゃね

214:デフォルトの名無しさん
17/09/25 14:27:46.65 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
17/09/26 15:58:12.82 dvSxVtoZ.net
>>209
なるほど、直接batを登録するのではなくてcmdのほうを登録すれば良かったんですね
思いつ


216:きませんでした 助かりました、ありがとうございます



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

218:デフォルトの名無しさん
17/10/11 07:47:52.42 S/IKnpLv.net
メモ帳でSJISで保存する

219:デフォルトの名無しさん
17/10/12 16:57:41.08 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:デフォルトの名無しさん
17/10/12 18:25:29.18 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:デフォルトの名無しさん
17/10/16 01:07:49.23 rrtzmh2c.net
バッチファイル作っておいて以下のようなフォルダの名前の変更を毎回ダブルクリック一発で済ませたいのですが
いろいろやってみたのですが、というほどの力もなく
お知恵お貸し下さい
処理前のフォルダ名一覧
1008安住紳一郎の日曜天国
10月15日安住紳一郎の日曜天国
10月15日爆笑問題の日曜サンデー (1)
10月15日爆笑問題の日曜サンデー (2)
処理後のフォルダ名
1008安住紳一郎の日曜天国
1015安住紳一郎の日曜天国
1015爆笑問題の日曜サンデー (1)
1015爆笑問題の日曜サンデー (2)

222:デフォルトの名無しさん
17/10/16 04:34:03.61 3Tj/cKOj.net
vbs 正規表現置換 ファイルリネーム

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

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

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

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

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

232:デフォルトの名無しさん
17/10/17 09:05:40.81 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:デフォルトの名無しさん
17/10/17 10:39:26.27 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:デフォルトの名無しさん
17/10/17 11:38:46.09 fpIKg5e5.net
>""10月15日"|"10月16日""
"で""を囲えないしfindstrの正規表現で|は使えない
findstr /?
まともな正規表現を使いたければvbsやPowerShell、Perlとか別のスクリプトに行ったほうがいい
バッチだと"&"や"%"とかダメ文字があるし凝った事をやろうとするといずれ行き詰まる
急がば回れ

236:デフォルトの名無しさん
17/10/17 22:45:54.56 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:デフォルトの名無しさん
17/10/17 23:49:36.84 G9wCIPXR.net
もうPowerShellのRename-Item使おうぜ
個人用途だろうし制約ないでしょ

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

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

240:デフォルトの名無しさん
17/10/18 07:04:24.46 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:デフォルトの名無しさん
17/10/18 22:17:20.50 on6I0HDV.net
>>231
うちの現場のバッチは例え内部で使わなかろうが最低1つは必ず引数を渡す仕様になってる。
そしてそれが渡されなかった場合は処理せずに終了する作りになっている。
理由は誤ってダブクリしちゃった場合の対策なんだってさ。

243:デフォルトの名無しさん
17/10/18 22:23:22.61 hY2xT5yc.net
batって大体はD&Dして使うようなの書いてるな

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

245:デフォルトの名無しさん
17/10/19 08:32:22.21 ny4cf+Vz.net
>>233
なるほど

246:デフォルトの名無しさん
17/10/19 22:12:55.60 JROgBEvY.net
ザ・ワールド、時よ止まれ。

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

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

249:デフォルトの名無しさん
17/10/20 23:41:00.84 aZN6SiIl.net
どの程度の自動化?

250:デフォルトの名無しさん
17/10/21 08:56:40.19 Nsvn2WYb.net
>>238
何を自動化するん?

251:デフォルトの名無しさん
17/10/21 16:42:48.10 DofUW9OG.net
そんなんツールが出てるんだからその説明でも読めよ

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

253:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 07:51:26.89 eb/3UN8i.net
>>215
$before = ls -Directory | Where-Object { $_ -match "^\d+月\d+日" }
$after = $before | foreach { $_.Name -replace '^(\d+)月(\d+)日', '$1$2' }
$idx = 0;
$before | foreach {
Rename-Item -WhatIf $_.FullName $after[$idx];
$idx++;
}
PowerShell で書いたので、cd で、そのフォルダへ移動して実行して。
-WhatIf が付いているので、本当には実行せずに、結果だけを見れる。
本当に実行する際は、-WhatIf を削除して実行して
配列 $before には「02月03日」などで始まるフォルダだけを、入れる。
配列 $after には「02月03日」の部分だけを「0203」に変換した、フォルダ名を入れる
Rename-Item で、該当する全フォルダ名を変換する

254:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 14:53:59.01 1YRZU7Jo.net
問題は、月を01~12まで、日を01~31までのチェックを入れることだけどね

255:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 16:29:48.93 rLFHcAK9.net
>>244
ls <directory-name> -directory | ren -newname {$_.name -replace '^(¥d+)月(¥d+)日', '$1$2' }
lsの-filterやwhere-object使ってもいいけど



256:の例の場合は不要だと思うよ



257:デフォルトの名無しさん
17/10/23 07:20:31.59 A3jhOkfm.net
ls -directory | ren -WhatIf -newname {$_.name -replace '^(\d+)月(\d+)日', '$1$2' }
上記で、where-object が無いと、
変更されないフォルダまで、表示されるのが気持ち悪い

258:デフォルトの名無しさん
17/10/23 22:30:10.89 TV21zs/8.net
Windows7SP1では、Get-ChildItemに-directoryオプションは無いんでエラーが表示された
調べたら、3.0以降でこのオプションが付いた模様
この際なので、5.0,5.1をインストールした
Windows7の人の参考まで

259:デフォルトの名無しさん
17/10/24 18:41:12.61 QQrV41zo.net
PowerShellのスクリプトファイルの拡張子は普通.ps1を使うが
デフォルトではファイルの実行を許可してないし、
また許可後もダイレクトにファイル名を指定しても実行できない
って保険かけすぎで入門者には敷居が高いだろと思わないでもないなあ
>>247
where-objectを入れてみた
(まだ2時間ぐらいしかやってないんでもっといい書き方があるかも)
$re='^(\d+)月(\d+)日';ls -directory|? name -match $re|ren -whatif -newname {$_.name -replace $re,'$1$2'}
このスレ的にはアリアス使うなら、lsよりもdirが合ってる気もするけど

260:デフォルトの名無しさん
17/11/03 20:22:18.43 +gpl8JNW.net
ここで聞くべきか迷ったのですが…
自分のマシンからリモートデスクトップで接続できるサーバー(確かWin2008R2)があって
そのサーバーと同じネットワーク内にクライアント端末(Win7)があります。
そのクライアント端末のプロセスをリモートデスクトップで接続したサーバーから確認することは可能でしょうか?
(サーバーには管理者権限で接続しています)
要はクライアント端末でtasklistコマンドを打った結果が見たいのですが。
ちなみにクライアント端末はDHCP設定なので起動のたびにIPアドレスが変わります…
今は1日に何度も遠くにあるクライアント端末まで行ってプロセスを確認しています。
1回だけ行ってIPアドレスをメモるぐらいなら全然構わないので何か方法があれば教えて下さい。

261:デフォルトの名無しさん
17/11/03 21:42:45.24 91m0YuAi.net
クライアントに自分のタスクリストをファイルを記録する周期ジョブを作成しておく
必要であれば暗号化しておく
そのファイルをメールで自動送付するようにしておくか、
クライアントにwebエリアがあればそこに置きこちらから見にいく

262:デフォルトの名無しさん
17/11/03 21:52:08.46 z1gogpom.net
>>250
サーバから tasklist /s クライアント端末名 (/u user /p pass) を実行では見れないんですか?
ファイアウォールの設定が必要かもしれませんけど。

263:デフォルトの名無しさん
17/11/03 22:47:57.34 +QQUmgGP.net
>>250
1) 他のPCのプロセス状態を知りたい
2) DHCPで設定されているPCのIPアドレスを知りたい
ってことでいいかな
1) はtasklist の /s オプションで知りたいPCのIPアドレスを指定すれば行けるはず
ただし事前にPC側に設定が必要
かつPCにログインできる情報が必要
2) は
2-1) 直接見に行ってipconfigで確認する
2-2) MACアドレスわかってるならサーバーからそのネットワークアドレス全体にpingを打ちつつarpコマンドで相手のMACアドレス確認していけばいい
2-3) DHCPサーバーを管理してるならPCのIPアドレスを確認する方法があるかも、まあそれならPCのIPアドレスを固定した方がいいかも
2-4) >>251みたいな方法で定期的にIPアドレスを通知してもらう

264:250
17/11/04 18:18:26.62 HSP2f8JH.net
みなさん情報ありがとうございます。
来週になったらとりあえず>>252さんの方法を試してみます。(一番手軽なので…汗)
それでダメな場合は一日一�


265:シ接IPアドレスを確認しにいく方式にします。 というのもpingのブロードキャストは現場のルールで禁止されてるっぽいので。 クライアント端末も特別な用途のためのものなのでタスク作ったり何かを仕掛けるのは厳しそうです。 仕掛けられれば業務はすごく楽になるんですけど「セキュリティ上問題が…」とか言われて突っぱねられる可能性大です。>< 尚、pingブロードキャスト以外の方法でIPを知る方法については自分でも調べてみます。 どうもありがとうございます。助かりました!



266:デフォルトの名無しさん
17/11/04 18:30:41.27 sTeHaJ1X.net
>>254
>>252-253に書いてあるけど事前にクライアント側の設定しないとtasklist /sでプロセス情報見れないけど、そこは大丈夫なの?

267:デフォルトの名無しさん
17/11/05 10:20:45.02 rFS24mxQ.net
set infilenm=001.txt
set outfilenm=002.txt
set beforestr=""""
set afterstr=""
type nul >%outfilenm%
setlocal enabledelayedexpansion
for /f "delims=" %%A in (%infilenm%) do (
set line=%%A
echo !line:%beforestr%=%afterstr%!>>%outfilenm%
)
endlocal
001.txtからダブルクォーテーションを削除して002.txtに保存したいだけなんですが、
3行目と4行目の表記がわからず、考えられる限り書き直して、うまくいきません。
あるいは別のBATでもいいのですが教えてください。

268:デフォルトの名無しさん
17/11/05 11:42:01.62 vm51NJQ8.net
>>256
set beforestr=^^"
set afterstr=^^
でどうかな?

269:デフォルトの名無しさん
17/11/05 11:56:26.30 vm51NJQ8.net
ただ001.txtのデータ次第でうまくいかない場合があるんで
別のスクリプト言語(PowerShellやWSH等)で書いたほうがいい

270:256
17/11/05 12:18:29.39 rFS24mxQ.net
>>257
>>258
素早いお答えありがとうございます。
>>257
>set beforestr=^^"
>set afterstr=^^
ダブルクォーテーション消えました!
ありがとうございました。

271:デフォルトの名無しさん
17/11/05 13:20:27.79 vm51NJQ8.net
>>259
どういうことに使うのか知らないけど、大切なデータなら止めとくべき
改行だけの行が消えるのは知ってると思うけど以下のような行があると(回避は可能だが)
ab!cd!ef
a! "b ^

272:デフォルトの名無しさん
17/11/05 13:40:33.57 rFS24mxQ.net
>>260
ご心配ありがとうございます。
大丈夫です。ものは、<a href とかのhtmlタグで作成したリンクリストで、
正規表現とかエスケープっぽい記号等はなく、
そもそもプライベートファイルなので、これで素早くリストができて万々歳です。

273:デフォルトの名無しさん
17/11/06 15:18:34.73 K1roLwuw.net
>>260 これじゃダメか?
ていうかダメな例を教えてほしい
for /f "delims=" %%i in (1.txt) do (
set a=%%i
setlocal enabledelayedexpansion
echo !a:^"=!>>2.txt
endlocal
)

274:デフォルトの名無しさん
17/11/06 15:59:22.60 K1roLwuw.net
半角スペースだけの行は化けるな

275:デフォルトの名無しさん
17/11/06 19:12:27.47 Mdq5cGE3.net
echo,とか、echo;とかで

276:デフォルトの名無しさん
17/11/06 23:15:25.56 RrRem/45.net
バッチファイルに渡された引数が1つなのか2つなのかを判定したいのですが
どのように記述すれば良いのでしょうか?
以下ではダメでした。
if defined %2 echo 引数は2つです else echo 引数は1つです

277:デフォルトの名無しさん
17/11/07 01:14:40.14 xsgE2wk0.net
if not '%2=='

278:デフォルトの名無しさん
17/11/07 07:09:27.79 4pg/kk0r.net
>>264 ありがとう
for /f "delims=" %%i in (001.txt) do (
set "a=%%i"
setlocal enabledelayedexpansion
set "a=!a:"=!"
echo.!a!>>002.txt
endlocal
)
これで空行以外は完璧かな?

279:デフォルトの名無しさん
17/11/07 10:05:04.55 1287flJj.net
>>262の奴で
"echo "を"echo."にするとダメなのに"echo,"にするとOKなのは何故なんだぜ?
今まで、ピリオドとカンマ、セミコロンに違いがあるとは思ってなかったから
ずっとピリオド使ってたのに

280:デフォルトの名無しさん
17/11/07 22:51:26.28 4pg/kk0r.net
>>267
"eol=" を指定しないと行頭文字が ; だと読み飛ばす
"delims=" を指定しないと行頭の空白が無くなる
両方同時に指定する方法はあるのか?

281:デフォルトの名無しさん
17/11/08 00:22:28.07 X1Aytah6.net
for /f delims^=^ eol^=

282:265
17/11/08 00:40:11.94 pQrS+Zxc.net
>>266
バッチリでした!THANKS!

283:デフォルトの名無しさん
17/11/08 19:40:30.74 VTzaN0jn.net
>>268
「,」「;」「=」は特別区切り文字だから。
例えば、C:\直下に「a」ってフォルダ作って
「b.cmd」
for /f %%a in ('echo,b') do echo,%%a
「b b.cmd」
echo;c %1
pause
のバッチ作成して、コマンドプロンプトで「C:\a」に移動してから
「b.cmd」を実行すると、()の中の「,」が消えた状態で表示される
「b b.cmd」を実行すると、「b.cmd」が実行される
「"b b.cmd"」を実行すると、「b b.cmd」が実行される
今度はファイル名を指定して実行で
cmd /c "C:\a\b b.cmd"
cmd /c "C:\a\b b.cmd" dを実行すると、pauseで止まるけど
cmd /c "C:\a\b b.cmd" "d"を実行すると、一瞬で終わる
cmd /c,"C:\a\b b.cmd" "d"なら動く
結構知られていないんだよね。

284:デフォルトの名無しさん
17/11/08 22:40:59.50 ZHWfUJ7q.net
>>270 ありがとう。完全に動作しました
そもそも eol の既定値が ; だとかヘルプに書いてないぞ
ちなみに "eol=" とすると eol が空になるのかと思ったら
今度は行頭に " があると読み飛ばすようです
何なんだ、これは。for 文のバグですかね

285:デフォルトの名無しさん
17/11/09 12:26:56.09 NEfZ8eBs.net
@echo off
prompt $g
set a=/?
set b=exe
set c= off
echo on
echo,%a%
echo;%a%
echo.%a%
echo.%b%
echo.%c%
echo
pause

286:デフォルトの名無しさん
17/11/10 12:50:53.03 5BeFn7Xg.net
一時的なwindows資格情報の付与
付与→(再起動)→ポップアップを閉じるまで作業→(再起動)
の流れをバッチ実行一発で済ませたいと思ってる。
(○.bat)
cmdkey 書き込み
copy **.batを配置
schtasks 再起動後のタスク登録(**.bat実行)
shutdown 再起動
↓ (ログイン)
(**.bat)
echoでmsgbox表示(閉じるまで待つ)
cmdkey /delete ←ここで資格情報が消えない
schtasks /Delete タスク消去
del /f "%~dp0 自己消去
タスクは一応highest
タスク実行だとcmdkey通らないとかある?
bat素人で何が原因で消えないのかわからない・・・
ポップアップ表示中にcmd開いてcmdkey打つとちゃんと消える

287:275
17/11/10 18:22:22.05 5BeFn7Xg.net
回りくどい方法ですが自己解決できました。
.vbsにcmdkey /deleteを入れ
cmdの管理者権限起動用ショートカットを作成
schtasks からhighestをぬいて、管理者権限でcmdを再起動
vbsを実行で資格情報を消すことができました。

288:デフォルトの名無しさん
17/11/11 23:58:13.74 Smy5DbHD.net
copy /b 1.mp4+2.mp4 3.mp4
上記で結合した3.mp4の動画に2.mp4の内容が追加されないのですがなぜかわかりますか?
3.mp4のファイルサイズだけは1.mp4+2.mp4の容量になっています
すぐ出来ると思ったのにつまづいた泣

289:デフォルトの名無しさん
17/11/12 01:15:27.00 1rXZudmc.net
>>277
ちゃんと結合されている
バイナリで結合してフォーマットが1.mp4の分しかないだけ
コマンドプロンプトでなく動画フォーマットの勉強しろ

290:デフォルトの名無しさん
17/11/12 01:38:03.29 /fk063EO.net
>>278
ありがとうございます
出直します

291:デフォルトの名無しさん
17/11/12 14:54:34.48 GpB3XqQ3.net
動画形式の勉強など、自分でやるものじゃない
動画編集アプリを使うべき

292:デフォルトの名無しさん
17/11/12 14:57:17.00 43gC7oaU.net
今の編集アプリだとmp4


293:再エンコしなくてもそのまま繋げられるのかな?



294:デフォルトの名無しさん
17/11/12 15:08:29.51 MOg5phwx.net
>>280
バッチから結合を指示できる動画編集アプリよろしくね

295:デフォルトの名無しさん
17/11/12 15:14:20.67 Xj6DjuPw.net
ffmpegでええやん

296:デフォルトの名無しさん
17/11/20 14:42:11.56 rhJshzCP.net
64bitOS環境
バッチ1つでWOW64内のcmdで実行する方法ってありますか?

297:デフォルトの名無しさん
17/11/20 15:06:54.45 rhJshzCP.net
すみません普通にSTARTで呼んでできました…

298:デフォルトの名無しさん
17/11/22 13:08:53.67 i4qRIFe0.net
呼び出し元バッチに戻る終了方法を追加してほしい
exit /B だとcmdを終わるだけ戻らない
call で呼び出さなくても戻る機能をつけてほしい
exit /r や return文で

299:デフォルトの名無しさん
17/11/23 17:36:40.78 cAVsYuht.net
startに待つオプションあるだろ

300:デフォルトの名無しさん
17/12/06 10:57:13.74 RImq1PQL.net
>>281
昔から無劣化で繋げられるけど??

301:ファイルアクセス監視
17/12/23 19:00:05.09 Jw1Bivzx.net
ダウンロードしたローカルアプリ(Jane Styleなど)が
重要な場所のローカルファイルから情報を盗もうとしてないかどうか念のため監視したいのですが、
URLリンク(technet.microsoft.com)
このdosで使える handle は出力ファイル名の日本語が文字化けするんですが、何かいい方法ないですか?
文字化け以外に関しては非常に便利です
出力をdosで加工してエクスプローラーのログを除外して、ユーザー+プロセス+ファイル名が初登場の時だけ出力してます
これでもし見慣れないファイルアクセスがあったら目立ちます(GUI系はリアルタイムで消えるので)

302:デフォルトの名無しさん
17/12/23 22:54:57.75 FPRjmoIB.net
ファイル名のようなシステム要件には、半角英数字だけを使う。
半角空白も使うな。Mac でバグる
すべてのアプリの開発者が、多国語のファイル名では、テストしていないから、
多くのアプリでバグる
特に、書庫を使う、圧縮解凍アプリでバグる

303:デフォルトの名無しさん
17/12/24 08:43:36.04 WeE5WMFr.net
echo.
で空行を表示できると知りましたが
この「.」には何の意味があるのでしょうか?

304:デフォルトの名無しさん
17/12/24 15:38:49.19 9EARh1KB.net
>>291
意味を考えてはいけません。調べてませんが、英語のピリオドなので文字列なしで終わりという意味合いからそうしたのでしょう。

305:デフォルトの名無しさん
17/12/24 15:51:26.20 nsKMF0PM.net
echoの直後の文字列は出力されないんだっけ?
「.」の以外の文字列でも空行になるけど1番問題が起きにくいとかそんなのかな

306:デフォルトの名無しさん
17/12/24 18:22:33.52 T/PAdelQ.net
ちょっと前にその辺の話が出てた
>>264-274

307:デフォルトの名無しさん
17/12/26 01:03:48.59 9+DFjrUc.net
特別区切り文字というものがあるなんてここで初めて知ったんだけど…(本当かどうかはまだ確かめていない)。
もはや紙媒体で信用できる会社からの体形的な出版物が無いのよね。
…ある??

308:デフォルトの名無しさん
17/12/26 01:08:10.71 NGPwifm5.net
こんなのは仕様じゃなくて実装上の結果にすぎない
undocumennt specと言ってもいいが、正式な本に仕様として載るようなもんじゃないと思う

309:デフォルトの名無しさん
17/12/26 01:23:11.58 9+DFjrUc.net
>>296
そりゃ分かるんだけど…。
UNIX の bash だっておかしいところが結構あってさ。
でも「構文解析が未熟な時代、全てを(記号ですら)コマンドだと置いた結果」という説明の仕方ができるそうな。
C言語の仕様だっていい加減後付けが多い。でも説明を試みた結果がANSI。無理が多いけど。
Windows界隈ってそういうのが貧しいと思う。
スレ違いだけど、PowerShell も Core とか言い出してからなんかおかしくないか?

310:デフォルトの名無しさん
17/12/27 01:13:01.79 1X8kZn43.net
bashはかなーり最近のプロダクトだと思うのだが

311:デフォルトの名無しさん
17/12/27 19:45:46.24 8XzWQMmb.net
>>297
特別区切り文字という言葉はアレだけど
cmd /? で表示されるヘルプの最終行に
=;, は特別な文字として列挙されてますよ。

312:デフォルトの名無しさん
17/12/28 06:04:09.70 HvFHYdEd.net
>>297
要はさんざん検証して挙動を確認しないと恐くて使えないってこったなw

313:デフォルトの名無しさん
17/12/28 07:32:44.10 psxJdr/O.net
関係ない話ですまんが
いまだに cmd /? の表示が変だな、一部重複してる
マイクロソフトは直す気が無いのか
たぶんNTの頃から変なんだが

314:デフォルトの名無しさん
17/12/28 08:43:15.72 V28V958v.net
バグレポートに誰も上げていないか、
あるいは上げられていても優先順位がものすごく低いのでしょう。

315:デフォルトの名無しさん
17/12/28 18:35:17.03 QlD4+lUL.net
>>302
非成長分野、非収益持ち出し分野とみなされて、最低限の人数しかいないのでは
おまけに優秀なのは来ない

316:デフォルトの名無しさん
17/12/28 19:17:17.28 uuf5XAZw.net
優秀な奴はさらっと変更して賞賛されるけど、
そうじゃない奴がさらっと変更すると、
勝手なことすんなって怒られるんだよな。

317:デフォルトの名無しさん
17/12/28 22:46:38.96 8hIgR6GI.net
bash が最近のプロダクトだとか…ヨボヨボの痴呆が入ったおじいちゃんか?
UNIX で bash が出たのって 20世紀なんだが。
>>299
これのことか?明らかに違う。
> 引用符が必要な特別な文字は次のとおりです:
> <スペース>
> &()[]{}^=;!'+,`~
>>300
自分が新規で書けるなら VBScript でいい。
「これは例外、あれも例外、それも例外」なブツなんか触りたくない。
そんな時間があるなら生産的な言語に費やしたい。
触らざるを得ないからイラつく。阿呆か。
PowerShell は Windows の自動化から管理系を抜き出した方向に行こうとしているので何だかねぇ…

318:デフォルトの名無しさん
17/12/29 00:43:01.22 oAr+Y8wr.net
>>305
GNU後の新造品じゃねーか。モダンもいいところだろ。
歴史を知らないバカとは話が出来ないってのは本当だな。

319:デフォルトの名無しさん
17/12/29 07:36:55.45 kfbFSvw+.net
今時VBScriptとか言ってる老害の相手するなよ...

320:デフォルトの名無しさん
17/12/29 08:54:48.93 oAr+Y8wr.net
年寄りのくせにGNU前を知らないんだとしたら、死んだ方がいいね。

321:デフォルトの名無しさん
17/12/29 10:58:34.56 dNvcaBYU.net
VBScriptは依然として結構イケると思うけどな

322:デフォルトの名無しさん
17/12/29 14:50:59.06 Xr0syokO.net
真面目にそう思ってるならちょっとヤバイぞ

323:デフォルトの名無しさん
17/12/29 17:11:52.20 oAr+Y8wr.net
VBAと混同してる人がいるようだ

324:デフォルトの名無しさん
17/12/29 23:12:55.18 1POkgVP3.net
>>298
はあ?

325:デフォルトの名無しさん
17/12/30 17:45:4


326:8.22 ID:RVllgMXp.net



327:デフォルトの名無しさん
18/01/01 14:25:38.32 TmlLnuaw.net
>>301-302
コマンドのバグ          ⇒ 全世界のユーザーに影響出るから下手に直せない
コマンドのヘルプの文言誤り ⇒ 優先度低いのでなかなか直さない
ってことかなるほど。

328:デフォルトの名無しさん
18/01/03 18:47:59.00 G1jkbehM.net
>>313
cscriptで自身を実行する外見バッチ中身WSHみたいなんもあるにはあるし…

329:デフォルトの名無しさん
18/01/03 20:04:05.34 NAv6VFfd.net
>>313
元を辿ってみると、>>297が話を逸らしたせいだ
そこからどんどん逸れてvbに行き着いた
>>315
batに埋め込めるのはjscript(条件コンパイルの構文がbatとうまい具合にかみ合った)だけでvbscriptは無理

330:デフォルトの名無しさん
18/01/03 20:12:05.39 lLEkaf6s.net
>>316
> vbscriptは無理
ちょっとはググれよ
URLリンク(blogs.yahoo.co.jp)

331:デフォルトの名無しさん
18/01/03 21:17:45.06 NAv6VFfd.net
>>317
wsfの手があったか、あとjsでもスクリプトエンコードで書けばなんとかなるね

332:デフォルトの名無しさん
18/01/13 16:23:41.90 t3TbTPGI.net
powershellで似たような事はできませんか?
1ファイルにしたくて

333:デフォルトの名無しさん
18/01/13 16:32:17.66 9pJBMU57.net
>>319
【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net
スレリンク(tech板)

334:デフォルトの名無しさん
18/01/18 18:41:19.43 lAsosfYH.net
どうしても分からないので質問致します。

@echo off
@rem バッチファイルのディレクトリに移動
cd /d %~d0%~p0
set USR_INPUT_STR1=URLリンク(www.openrec.tv)
@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 Shift-JISに文字コード変換
nkf -s --overwrite %HTML%

335:デフォルトの名無しさん
18/01/18 18:41:39.14 lAsosfYH.net
set TARGET=%TARGET:playlist=chunklist%
@rem ffmpegで動画吸い出し
ffmpeg -c copy "%TITLE%.ts" -i "%TARGET%"
@rem 最後にcurlで出力したソースファイルを削除
@rem for /R %%f in (*.) do del /Q "%%f"
pause
exit
:ERROR
echo 引数が無効のため処理できませんでした
pause
exit

このようなbatファイルを作ったのですが、どうしても最後に
sourcefile=URLリンク(station303.openrec.tv) Invalid argument
と無効な引数と言われてしまい動画の吸い出しが出来ません
完全に手詰まりなため、丸投げにはなってしまいますがご教授いただければと思います
よろしくお願いします

336:デフォルトの名無しさん
18/01/18 19:11:35.69 r+5+UL4/.net
>>322
とりあえず最初の行を
rem @echo off
にしてどこでエラーになってのか確認しろ


337:よ



338:デフォルトの名無しさん
18/01/18 19:15:53.38 pm/tv2ru.net
>>322
これ途中の処理抜けてない?
TARGETにURLが入らないんだけど

339:デフォルトの名無しさん
18/01/18 19:34:30.33 pm/tv2ru.net
170のやつを適当に書き直したら動いたよ
for /F tokens^=2^ delims^=^" %%I in ('type %HTML%^|find /I "data-sourcefile"') do set "TARGET=%%~I"

340:デフォルトの名無しさん
18/01/18 19:58:03.19 lAsosfYH.net
>>322の最初が抜けてました・・・
@rem HTMLから文字列抽出
for /F "tokens=2 delims=<>| " %%I in ('type %HTML%^|findstr /R /C:"<title>"') do set TITLE=%%~I
for /F "tokens=* delims=data-file= " %%I in ('type %HTML%^|find /I "playlist.m3u8"') do set TARGET=%%~I

341:デフォルトの名無しさん
18/01/18 20:06:19.33 lAsosfYH.net
>>325
ありがとうございます・・・
エラーを見たのですが、なぜかsourcefile=が付いてしまっていました
何度もありがとうございます

342:デフォルトの名無しさん
18/01/29 01:16:37.30 s5lQXlw3.net
echo abc 1>x1 1>x11 2>x2 3>x3
とするとDOS窓が応答しなくなった
x11 x2 x3 ファイルができるが x1ファイルはできない

343:デフォルトの名無しさん
18/01/29 14:21:26.57 e8Iu9+Yp.net
compフォルダ配下にはa,b,c,…ってフォルダがあって、
そのフォルダの中にはzipとrarの圧縮ファイルがある
compopenってフォルダを作って、compの中のフォルダ階層は変えないで、compopenフォルダ内のaやb,cのフォルダにそれぞれすべて展開させたいときってどうするの?
zipやrar毎にフォルダ作って展開させたい
D:/
├comp/
│ └ a/
│   └ 111.zip
│   └ 222.zip
│ └ b/
│   └ xx1.rar
│   └ xx2.rar
│ └ c/
│   └ ttt.zip
│   └ rrr.rar
D:/
├compopen/
│ └ a/
│   └ 111/
│   └ 222/
│ └ b/
│   └ xx1/
│   └ xx2/
│ └ c/
│   └ ttt/
│   └ rrr/

344:デフォルトの名無しさん
18/01/29 15:15:09.99 LZ9wDs2K.net
>>329
>>12-19の方法で相対パスを取得すれば出来ると思うよ

345:デフォルトの名無しさん
18/01/29 16:22:04.20 LZ9wDs2K.net
自分用に書いたbatを流用してみた
多分こんな感じで動くはず
URLリンク(pastebin.com)

346:デフォルトの名無しさん
18/01/30 00:28:24.66 fZrZLUfh.net
>>329
set "a=D:\comp" & set "b=D:\compopen"
setlocal enabledelayedexpansion
for /L %%i in (4,1,1000) do if "!a:~%%i,1!"=="" set "c=%%i" & goto x
:x
endlocal & set "c=%c%"
for /r "%a%" %%i in (*.zip *.rar) do set "d=%%~dpni" & set "e=%%~i" & call :y
goto :eof
:y
setlocal enabledelayedexpansion
7z x -o"!b!!d:~%c%!" "!e!"

347:330
18/01/30 04:04:55.14 I+jPXl6+.net
>>332
なるほど
自分のは冗長に書きすぎてたね

348:デフォルトの名無しさん
18/01/30 16:28:50.07 /nodnUUg.net
>>329
使い回しあんまり考えなければ
-------- ここから
set path=C:\Program Files\7-Zip;%path%
cd /d D:\comp
for /f "usebackq delims=" %%i in (`dir /ad /s /b`) do (
echo,"%%~i"
set "tmppath0=%%~i"
call set "tmppath1=D:\compopen%%tmppath0:~7%%"
pushd "%%~i"
call 7z.exe x *.* -spe -bso0 -o"%%tmppath1%%\*" 2>>D:\compopen\errlog.txt
popd
)
-------- ここまで
マズいフォルダ(パス)名が無いことを前提に、もろもろ 7-Zip に良きにはからってもらう

349:デフォルトの名無しさん
18/01/30 17:10:39.08 25OUwAYA.net
>>332
>>334
ありがとうございます!
150GBくらいあるから、まだ展開し終えてないけど、
動き出しました。
実際のcompの中のa,b,c,・・・フォルダの中のzipやrarの名前は、
今のところ、下記みたいにフォルダの文字列含んでて、階層を上にしてもよかったかなと思いつつ、



350:例外も出てくるかもしれないので、このまま走らせてみます。 しっかり解凍しだしてフォルダ生成してくれてます。 D:/ ├comp/ │ └ a/ │   └ a111.zip │   └ a222.zip │ └ b/ │   └ xx1b.rar │   └ xx2b.rar │ └ c/ │   └ cttt.zip │   └ crrr.rar



351:デフォルトの名無しさん
18/01/31 00:35:03.40 ah9e2u9N.net
そもそも、そんな複雑な手続きには、PowerShell, Ruby などを使えw

352:デフォルトの名無しさん
18/02/03 09:54:54.05 y+J4EMEq.net
コマンドプロンプトの仕様についてだけど、遅延展開ってデフォでONじゃダメだったのかな?
あれ打ち込むのマンドクサ('A`)

353:デフォルトの名無しさん
18/02/05 04:53:11.12 j3KUW6ez.net
1.test.exeという実行ファイルがある。
2.test.exeのフルパスは必要に応じて「test.exeをShift+右クリック」→「パスをコピー」して変数testExeに格納してもらう。
  このフルパスには"D:\a bc\test.exe"のように空白が含まれることがあるとする。
3.FOR文でこのtest.exeを--helpオプションつきで実行し、結果からfindstr&setしたい。
---作成バッチ---
@echo off
cd /d %~dp0
set testExe="D:\a bc\test.exe"
FOR /F "tokens=3" %%a IN ('%testExe% --help ^| findstr "TargetStr"') DO (
set kekka=%%a
)
@echo %kekka%
pause
---実行結果---
'D:\a' は、内部コマンドまたは外部コマン ド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
---解1---
testExeを設定する際、全体をダブルクォートで囲むのではなく、
空白を含むフォルダだけをダブルクォートで囲むようにする。
set testExe=D:\"a bc"\test.exe
 
 
解1はtestExeの設定が地味に面倒になってしまうので回避したいのですが、何か良い方法はないでしょうか?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch