【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
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というのは? >>172 それも考えたのですが、不特定多数のPCで使う機会があるので手間が増えてしまうなと思い諦めました。 そこで、URLからIDとなる文字列を抽出してそれをファイル名に使おうと考えました。 参考URL:https://www.openrec.tv/live/7cuVKOAY3lv この末尾の7cuVKOAY3lvの部分だけを、TITLEに代入したいと思ったのですが、思うようにいかなくて・・・。 結局、実行batのディレクトリ内にnkf32を導入し、 nkf -s --overwrite %HTML% と書き加えて対処致しました フォルダの中に、あああ_1.flv あああ_2.flv … あああ_100.flvのようなファイルがあるときに、あああ_1.flvをあああ_001.flvのようにリネームしたりできないんでしょうか お〜瑠璃ね〜むで十分やぞ D&D用のショトカも作れるしな >>175 「のようなファイルがあるときに」の条件がどこまでかわからないが >>176 が一番早いのは間違いない 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!" >>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 >>180 変換の数字の前が_文字じゃないかもしれないし _文字がファイル名の中に混じっている可能性もあるし どのスレでも一緒だが質問の要件が分かりにくいのはめんどうだな なんでか知らないけど他人に勝手にマルチポストされたけど>>175 の質問は元のスレで解決したのでもういいです cd \ pushd D:\abc setlocal popd としても元の \ に戻らなかった >>184 そうならなきゃ逆にダメでしょ setlocalでは(親の環境を引き継いだ)別の環境の上で実行されている カレントを移動しようが環境変数を操作しようが元の環境には影響しない pushd D:\abc setlocal endlocal popd または setlocal pushd D:\abc endlocal >>185 ありがとうございました そういうことでしたか 今さらバッチファイル入門て… 余計な被害者増やさずPowerShellにしろよ これだからIT後進国は 超入門コマンドプロンプト:バッチコマンドで定型処理を行う (1/3) - @IT http://www.atmarkit.co.jp/ait/articles/1709/15/news034.html 017年09月15日 05時00分 公開 >>187 このスレのタイトル見てから言えよ それとも、お前は、自分が使ってないソフトのスレ行って 「別のソフト使え」って言って巡るのが趣味なのか? PowerShellに移行しようと思ったこともあるけどファイルをD&D出来ないから断念した あと他人の環境で動くのか分からないから渡しにくいし まあbatに面倒臭いとこがあるのも理解できるけど せめて正規表現と小数の計算くらいはあればよかったんだが 自分で使うにはPoweShellはめちゃめちゃ便利だけど 一般的に定着してるかというとそうじゃないし PowerShell は起動が遅いから小さいバッチをループで呼び出すのには向いてないんじゃないかな。 いったんロードしたオブジェクトを関数形式で呼び出せばいいんだろうけどよくわからなくてめんどくさいし。 最近、フリーソフトとかの小さいやつの管理がめんどくさくなって メニュー代わりにバッチファイルを使うことにしたんですよ。 全部をVHDに入れてマウントなんで、持ち運びは仮想ディスクファイル1個をコピーするだけ。 起動が素早いのがメリット。 アイコンが出ないのがデメリット。 アイコン出そうと思ったら全環境で共通のドライブ名に固定してショートカットを使ったらいいと思うけど。 プログラムの入ったフォルダ Program Files 3 バッチファイルの入ったフォルダ Program Link [FirefoxPortable.bat] set pathname1=%~d0\Program Files 3\FireFoxPortable52.0.2\FirefoxPortable\FirefoxPortable.exe start "" "%pathname1%" それだけならバッチ作るまでもなくハードリンクにすればアイコン問題も解決では あ、すまんそれだと実行ファイルと同じフォルダのDLL読めないからダメか 短いファイル名に関していくつか質問 1 短いファイル名はダブルクオーテーションで囲まなくても実行可能? 2 短いファイル名は取得して一ヶ月経っても変動せずにそのパスを実行出来る? >>196 「1」は、多分可能 「2」は、他にファイルが出来なければが前提かと 「dir c:\*1」と「dir c:\*1 /x」を実行して挙動を確かめて下さい。 少なくともNTFSではファイルの情報としてショートファイルネームも格納されるから ファイルが存在したままある日突然名前が変わることはないはず そのファイルを削除して似たようなロングファイルネームの別のファイルを作った時 同名だけど別のファイルが出来てしまう事はありえる レスありがとうございます。 ちなみに自分がやりたかったのは↓と同じケースで自作のbatをタスクスケジューラに登録したいというものでした。 schtasksで半角スペースを含むパスを実行させたい (DOSプロンプト活用相談室LOG) http://fpcu.on.coocan.jp/dosvcmd/bbs/log/taskkillstart/at/4-0842.html "を\"と書いてエスケープさせるやり方もあるようですがそちらではbatにダブルクォーテーションで囲った引数を渡すと不可解な動作をすることがあり上手くいきせんでした。 batのパスにスペースを含んだ場合 起動しない batのパスにスペースを含まない場合 %~dp0を実行したときにbatのフォルダパスの頭にカレントディレクトリの文字列も追加される ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる