【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
助けて下さい! 毎月第二木曜日の16:00になったら Aフォルダに入っているgファイルにBフォルダに入っているgファイルを上書きする batファイルを作って下さい よろしくお願いします >>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 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を使う方法は思いついたのですが他に空だった場合にゼロを代入するなどは可能でしょうか? 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% >>76 空の場合に1が代入されてエラーを回避できました サンクス 特定のフォルダ内のテキストファイルを処理するバッチを作りましたが @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の 処理済みのテキストを除外して処理したいのですが コマンドのアドバイスを頂けないでしょうか >>79 もし、その入力ファイルをその後弄らないのならファイル属性を弄るのがいい 例えば、アーカイブ属性を削るとか読み取り専用属性にするとか そうすれば、forの中のdirに/aで分別できる それが無理な場合は、こんなかんじでファイルに登録されているかどうかチェックするとかかな findstr /x "%%~ni" syorizumi_list.txt >nul if errorlenel 1 ( echo %%i call E:\work\syori.bat "%%i" ) ) >>80 レスありがとうございます 読み取り属性の方は最終手段としてとりあえず書かれたコマンドを追記してテストしていますが エラーで強制終了してしまいます・・・ ヒントは頂けたのでちょっと考えてみます 処理済みファイルを下位ファルダに移動させるとかじゃダメなの? それが1番楽だと思うけど ダメではないですし意地になってるだけです・・・ すいません どうしようもなければそうしおうと思います >>81 ただのtypoだから(errorlevel) あと処理済ファイルの指定はフルパスにしないとダメかも あと、移動させるなら下位フォルダはダメだよ dir /sではそれも対象だから >>84 修正したら動きました! ありがとうございます ただsyorizumi_list.txtに aaa bbb ccc とあったらaaaしか除外してくれませんね・・・ もう少し調べてみます >>86 まあこっちが悪いっちゃ悪いんだけど、これくらい修正して使って欲しかった /c:"%%~ni" >>87 眠すぎたのと集中力が散漫で気づいてないだけでした・・・ すいません それと指摘の通り/c:に変えたら期待通りの動作になりました サンクス! >>88 その言い方に嫌な感じがするんだがちゃんと引数の意味を調べて使ってるよね /x /c:"%%~ni"としてるんなら、変な勘ぐりスマン >>89 /x /c:"%%~ni"で問題なく動作しています 細かいところまでありがとう こんなろくに理解せずそのまんまコピペして使ってるとトラップに引っかかるぞ 下位フォルダに移動することも検討してるなんてレスから /sが必要だとも思えんよね もし/sが意図通りだったら aaa.txt aaa\aaa.txt なんて状況どうするんだって話だし >>89 > その言い方に嫌な感じがするんだがちゃんと引数の意味を調べて使ってるよね 同意 88の1行目で奴の人物像がすべて分かる 引数 %1 %2 ,, は%9 までだが shiftで取り出せば%10以上でも取り出せた 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 >>96 cd /d c:\down cd d:TozakaruzoSaikonkara for /r %%i in (*.avi *mp4) do copy /y "%%~fi" d: cd d:\TozakaruzoSaikonkara の方がいいか もしフォルダが無いなら md d:\TozakaruzoSaikonkara 追加してくれ *.mp4 だった 穴だらけだな 俺もボケてきたか >>98 おー、inの句に並列できるんですね %%~fiのfはfileの意味でしょうか いずれにしても無事コピーされました 応用も効きそうなので調べて利用させていただきます! ありがとう いや、フルパスかな 初めてだったので、楽しみます ありがとう >>103 俺がもっといいやり方がないか調査するからとりあえずmoroフォルダをうp! >>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 for /r c:\down %%i in (*.avi *.mp4) do move /y "%%~i" c:\TozakaruzoSaikonkara >>106 ありがとうございます! 比較して、代入の引数iに違いがあるし、もう少し勉強します。 また、わからないことなど出てくるかもしれませんが、その時はよろしくお願いいたします。 参考に言っておくが () の中の引数なんだが、ワイルドカード以外は要注意だ 例えば (*.avi *.mp4 sukebe.jpg) とかにすると 各ディレクトリに sukebe.jpg が無くても強引にコマンド実行してエラーになったりする moroとかsukebeとか名付けがオッサン臭いんだがw 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 他にもっと複雑な検索も出来るのでしょうか? あと「DIR /?」で出てくるヘルプにはこの機能について触れられていないのはなぜなのでしょう?こんなに便利なのに。 >>111 windowsXPで恐縮なんだが、Windowsヘルプ(ヘルプとサポートセンター)では、 Dirの項目の説明の中で、ワイルドカード関係のものとして以下のものが書いてあったよ 解説 ・複数の filenames を使用する 複数の filenames を使用できます。スペース、カンマ、またはセミコロンでファイル名を区切ります。 FileName でワイルドカード文字 (? と *) を使うと、ファイルのグループを表示することができます。 ・ワイルドカードを使用する ワイルドカード (? と *) を使うと、ファイルとサブディレクトリのサブセットの一覧を表示できます。 例 ドライブ C のすべてのディレクトリで、拡張子が .txt のすべてのファイルの一覧を表示するには、次のように入力します。 dir c:\*.txt /w/o/s/p 各ディレクトリにある拡張子が .txt のファイル名が、アルファベット順にソートされた一覧がワイド形式で表示されます。 画面単位で一時停止し、キーが押されると次の画面が表示されます。 >>111 つまりコマンドの内蔵ヘルプは簡略版ってことなんだ それと、なんかちょっと検索してみたら Windows10には「ヘルプとサポート」がないらしい なのでオンラインでのコマンドラインリファレンス https://technet.microsoft.com/ja-jp/library/cc755121%28v=ws.10%29.aspx XPの「ヘルプとサポート」には 「コマンドラインリファレンス」の他にも、 「新しいコマンドラインツール」 「コマンドシェルの概要」(ここにパイプやリダイレクトの説明が載っている) ってのがあったんだけどなあ 質問があります。 ちょっと事情があってすべての引数をダブルクオーテーションで囲って実行しなければならなくなりました。 例えばこんな感じで "C:\Software\ffmpeg\ffmpeg.exe" "-i" "%~1" "-vcodec" "utvideo" "-acodec" "pcm_s16le" "%~dpn1_test.avi" ffmpegでは正常に動くことを確認したのですが他の一般的なソフトウェアもこのような起動方法で動作すると考えてもいいのでしょうか? とあるファイルの中身の文字列を置換したいのですが、何かいい方法はありますでしょうか? とあるファイルはtxtファイルではないですが、テキストエディタで開くと文字列が書いてあります。 全部テキストならともかくそれ以外のバイナリファイル内の置換はcmdじゃ無理だろ WSHとかPower Shellとかで探せ テキストファイルだけど、拡張子がtxtではないファイルのことです findstr である程度のことはできるけど、置換の条件とかが複雑になってくるとしんどい。 外部コマンドが使用可能なら、onigsedとか、SEDを使った方が多少は楽。 >>119 拡張子になんの意味があると思ってるの? なんかそのレベルの知識だったら、メモ帳でも使った方がいいと思うよ。 >>119 ren Nullpo.unko Nullpo.txt バッチファイルからシリアルポートを簡単に読み書き出来る手段って無いですかね? 古くはCOM?を使う方法が有名ですがBluetoothなどで作られた仮想シリアルポート?には使えないようです >>123 232C→USB変換ケーブルみたいなのあったような そもそもバッチファイルって何? CでもBasicでもなく、メモ帳の拡張子をbatに変えるだけで良くて、 コマンドブロンプトとかいう、MS-DOSと何が違うのかわからないような画面で動いて、 何なの? CだってBASICだってメモ帳の拡張子を適当に変えれば行けますよ >>126 >メモ帳の拡張子をbatに変える notepad.exeの拡張子をbatに変えたら動かなくなりますよ >>129 なんでメモ帳って書いてあるのにnotepad.exeをいじるわけ? >>130 お前の言う「メモ帳」とはnotepad.exeでない何か他のものなのか? >>126 についていうなら、その辺のいい加減さが理解を妨げてると言える とにかく>>126 は色々とおかしい どこから突っ込めばいいのかわからんくらいにアチコチおかしい PC初心者板ならともかく、なぜム板にこんな人が居るんだ?ってレベル 迷い込んできたのか? 説明はできないが揚げ足は取れる、ということですね。 コピー系コマンドのコピー速度って 遅 copy < xcopy < robocopy 早 で良いですよね? これはVista、7、10のどのOSでも同じでしょうか? >>141 コマンド打ち込むにも時間がかかりますから一理ありますね。copyは引数指定も直感的だし… って常にコマンド手打ちする訳でもないですし!w プラスバッドって、何か格好いいな。 カンマバットはダセェけど。 では、 £.bat γ.bat ラプラスバットと、ガンマバットでは、どうだろう? @.bat や =.bat ファイルを作ることはできるが、実行しようとしてもコマンドプロンプトに無視されて実行できなかった @.bat はフルパスで C:\work\@bat ってするか、キャレットでエスケープして ^@.bat で実行できる =.bat はフルパスでもダメだけど、キャレットでエスケープすればいける >>147 キャレットって何かわからなかったが、^をつけることなんですね ^@ や ^= でたしかに実行できました すみません助けてください 遅延関数を宣言してるところから、下記の親ディレクトリの名前だけ引くサブルーチンに ファイルフルパス投げて、戻そうとしているのですが 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 >>151 これって例えばc:\aaa\bbb\ccc\test.txtってファイルを投げたら 最終的にtest.txって文字を得たいの? cccを得たいの? >>151 まずは SET DEST_DIR = %%P endlocal && set DEST_DIR = %DEST_DIR% の空白がいけないのでは? SET DEST_DIR=%%P endlocal && set DEST_DIR=%DEST_DIR% >>154 後輩にその空白を入れられたことがある 「可読性を良くしようと思って…」って言ってたな 普通の高級言語やってる奴は=の前後に空白入れただけで不具合起こるなんて考えもしないわな コマンドプロンプトはホント昔の仕様を引きずり過ぎだわ setlocal enabledelayedexpansion使うとファイル名に!が入ってるとめんどくさいから極力使わないようにしてるんだけど俺だけ?みんなはどうしてる? >>155 C言語で言うマクロ置換みたいなもんだからしょうがない もう新規の奴はPowerShellに移行するしかない 名前ソートで上に持ってきたいフォルダには名前の頭に!をつけてる スペースが入ったファイル名からスペースを取り除くには一行では無理ですか? こんな感じ? set "File=%~1" & ren "%File%" "remove=%File: =%" 間違えた set "File=%~1" & ren "%File%" "%File: =%" バッチでよく使う pslist.exe はプロセス名が日本語だと間違える pslist v1.4 sysonternals フォルダD:\XXXX直下の、 AAAA、BBBB、CCCCの3つの隠しファイル(拡張子なし)を、 定期的にE:\backupフォルダにバックアップするためのバッチファイルを作りたい フォルダXXXX以下には、YYYY、ZZZZというフォルダがあり、 この下にもAAAA、BBBB、CCCCと同名のファイルが存在するが、 それはバックアップしなくていい copyコマンドでは隠しファイルはコピーできない xcopyコマンドではサブディレクトリ以下の同名ファイルもコピーされてしまう バッチファイルで処理するためにはどうすればいいのでしょうか? できればアトリビュートはいじりたくないです よろしくお願いいたします >>163 xcopyでAAAAなどのファイルを一つずつ指定してコピーするというのは? >>165 実験してみたんですが、 xcopy D:\XXXX\AAAA E:\backup\ とすると、backupフォルダには、 AAAA \YYYY\AAAA \ZZZZ\AAAA の3ファイルがコピーされちゃうんですよ \YYYYと\ZZZZのはいらないのでどうしたもんかなと質問させていただきました >>166 こちらの方でもテストしたけど1ファイルだけコピーになるんだけどな なんでだろ >>167 テストありがとうございます あれ? なんか余計なスイッチ入れるとかしちゃってたかな? 今出先なんで帰ったら再度実験してみます >>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" 以前こちらで聞いて試行錯誤しているのですが、何分初心者で四苦八苦しております。 そこでご教授願いたいのですが、 @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で文字化けしてしまいます。 これを、面倒なのでファイル名で出力したいと思ったのですが、正規表現が弱く全く前に進みません。 丸投げで申し訳ございませんが、どうか手直ししていただけませんでしょうか。 よろしくお願い致します。 >>170 よく分からないけどbat自体をUTF-8で書いてchcp 65001というのは? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる