[過去ログ] 【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
192: 2017/09/17(日)11:17 ID:jtG62g+O(1/2) AAS
PowerShell は起動が遅いから小さいバッチをループで呼び出すのには向いてないんじゃないかな。
いったんロードしたオブジェクトを関数形式で呼び出せばいいんだろうけどよくわからなくてめんどくさいし。
193: 2017/09/17(日)11:23 ID:jtG62g+O(2/2) AAS
最近、フリーソフトとかの小さいやつの管理がめんどくさくなって
メニュー代わりにバッチファイルを使うことにしたんですよ。
全部をVHDに入れてマウントなんで、持ち運びは仮想ディスクファイル1個をコピーするだけ。
起動が素早いのがメリット。
アイコンが出ないのがデメリット。
アイコン出そうと思ったら全環境で共通のドライブ名に固定してショートカットを使ったらいいと思うけど。

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

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

[FirefoxPortable.bat]
set pathname1=%~d0\Program Files 3\FireFoxPortable52.0.2\FirefoxPortable\FirefoxPortable.exe
start "" "%pathname1%"
194: 2017/09/17(日)12:31 ID:z++LvPT9(1/2) AAS
それだけならバッチ作るまでもなくハードリンクにすればアイコン問題も解決では
195: 2017/09/17(日)12:37 ID:z++LvPT9(2/2) AAS
あ、すまんそれだと実行ファイルと同じフォルダのDLL読めないからダメか
196
(6): 2017/09/18(月)00:06 ID:AVBMNnfo(1) AAS
短いファイル名に関していくつか質問

1 短いファイル名はダブルクオーテーションで囲まなくても実行可能?
2 短いファイル名は取得して一ヶ月経っても変動せずにそのパスを実行出来る?
197: 2017/09/18(月)23:50 ID:2dThcY7y(1) AAS
>>196
「1」は、多分可能
「2」は、他にファイルが出来なければが前提かと

「dir c:\*1」と「dir c:\*1 /x」を実行して挙動を確かめて下さい。
198: 2017/09/19(火)00:09 ID:I5t298fo(1) AAS
少なくともNTFSではファイルの情報としてショートファイルネームも格納されるから
ファイルが存在したままある日突然名前が変わることはないはず

そのファイルを削除して似たようなロングファイルネームの別のファイルを作った時
同名だけど別のファイルが出来てしまう事はありえる
199
(1): 196 2017/09/19(火)01:33 ID:FIGNw+kF(1) AAS
レスありがとうございます。
ちなみに自分がやりたかったのは↓と同じケースで自作のbatをタスクスケジューラに登録したいというものでした。

schtasksで半角スペースを含むパスを実行させたい (DOSプロンプト活用相談室LOG)
外部リンク[html]:fpcu.on.coocan.jp

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

batのパスにスペースを含んだ場合 起動しない
batのパスにスペースを含まない場合 %~dp0を実行したときにbatのフォルダパスの頭にカレントディレクトリの文字列も追加される
200: 2017/09/19(火)02:17 ID:Lhe/hdFe(1) AAS
mklinkやsubstを使って違う名前でアクセスするのはどうなのでしょう
うまくいくかどうかわかりませんが

ファイル名フォルダ名に空白や%^!みたいな記号があると困ることが多いですね
201
(1): 2017/09/20(水)03:12 ID:aIPv0JYK(1) AAS
>>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
外部リンク:support.microsoft.com

Schtasks.exe を使用して、スケジュールされたタスクのパスにスペースが含まれている場合を作成するときにスケジュールされたタスクが実行されません。
外部リンク: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
202: 196 2017/09/20(水)06:44 ID:w13Y3qRA(1/2) AAS
>>201
自分の説明が下手で伝わらなかったんだと思いますが、成功例の方の記述でパスにスペースを含むbatは起動できるのですがそのbatにダブルクオーテーションを含む引数を渡すと動作がおかしくなるのです。
引数にダブルクオーテーションを含まない場合は正常に起動できます。
203: 196 2017/09/20(水)07:01 ID:w13Y3qRA(2/2) AAS
一応追記しておくと、おかしくなるのはタスクスケジューラから起動した場合限定で通常の起動では問題ありません。
呼び出すbat内の記述にミスがあるとかそういうのではないと思います。
204: 2017/09/21(木)11:18 ID:WXZB4PjF(1) AAS
%CMDCMDLINE%はどうなってる?
205: 2017/09/21(木)18:15 ID:X0F1M9Qy(1) AAS
argumentにダブルクォーテションがある場合もパスと同様に\"してる?
206: 2017/09/21(木)18:35 ID:uKBRYTKY(1/2) AAS
test
207
(1): 196 2017/09/21(木)18:38 ID:uKBRYTKY(2/2) AAS
NGワードが含まれていたようなので他所に書きました
外部リンク:pastebin.com
208: 2017/09/24(日)20:04 ID:0vysq0yQ(1) AAS
基本的に引数の中の半角スペースはデリミタであり
そこより左に " が奇数個あればデリミタじゃなくなる

それに関しては \" とか ^" とかあっても関係ないんじゃね
209
(1): 2017/09/25(月)14:27 ID:aNTDK6ge(1) AAS
>>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\"\""

これだと実行ファイルのパスにスペースがあっても問題ない
210: 196 2017/09/26(火)15:58 ID:dvSxVtoZ(1) AAS
>>209
なるほど、直接batを登録するのではなくてcmdのほうを登録すれば良かったんですね
思いつきませんでした
助かりました、ありがとうございます
211: 2017/10/10(火)23:43 ID:Z33TeZgR(1) AAS
文字コードがUTF8のテキストファイルが2つあるのですが
FCコマンドで差分を出力したところ文字化けしてしまいました。
何か良い方法はないでしょうか?
212: 2017/10/11(水)07:47 ID:S/IKnpLv(1) AAS
メモ帳でSJISで保存する
213: 2017/10/12(木)16:57 ID:c/LUECgg(1/2) AAS
なんで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
214: 2017/10/12(木)18:25 ID:c/LUECgg(2/2) AAS
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
215
(3): 2017/10/16(月)01:07 ID:rrtzmh2c(1/3) AAS
バッチファイル作っておいて以下のようなフォルダの名前の変更を毎回ダブルクリック一発で済ませたいのですが
いろいろやってみたのですが、というほどの力もなく
お知恵お貸し下さい

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

処理後のフォルダ名
1008安住紳一郎の日曜天国
1015安住紳一郎の日曜天国
1015爆笑問題の日曜サンデー (1)
1015爆笑問題の日曜サンデー (2)
216
(1): 2017/10/16(月)04:34 ID:3Tj/cKOj(1) AAS
vbs 正規表現置換 ファイルリネーム
217
(1): 2017/10/16(月)08:11 ID:GL/w6Jlo(1) AAS
>>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%"
218
(1): 2017/10/16(月)23:00 ID:rrtzmh2c(2/3) AAS
>>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]で何の問題もない。
これ以上無駄な時間を掛けても&シンプルな方が可読性がよい
219
(1): 2017/10/16(月)23:01 ID:rrtzmh2c(3/3) AAS
2.
for a in ('標準出力 パイプ 標準入力') do
この部分、パイプの縦棒の左にくっついてる^は何者なのでしょう。。。初めて見ました。
アッ、日付部分が行頭だからか?いやfindstrに行頭オプションの/Bが付いてるし、そもそもパイプの左になぜ?
検索してみたのですがわからずここで冷や汗が出てきて
ウーンこれはなんなんだろう。そもそもメタ文字なのか銅貨さえわからない。
3.
そもそも何をしているのかというとradikoというプログラムでお気に入りのラジオ番組を録音しています。
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分ごとに切り分けられたものを再生してもけっこう大丈夫で、音楽だと気付く程度です。
いろいろ書いてしまいましたが頭が精一杯なのでとりあえずお礼申し上げ失礼ます
220: 2017/10/16(月)23:34 ID:1IRdIkAf(1/3) AAS
>>219
^(キャレット)はエスケープ文字
これを付けずに実行すると、コマンドラインパーサで式評価時にパイプとして機能しちゃう
つまりfor文の途中にパイプが現れてそこで途切れちゃうことになる
やりたいことは、この行の最初の評価時には単なる|の文字として取り扱ってもらい
次の''で括ったコマンドの評価時にはパイプとして機能してほしいってわけ
1回の評価を→で表すとすると、
^| → |
^^| → ^| → |
^^^^| → ^^| → ^| → |
って感じに展開されていく(俺は3回まで使ったことがある)
%a%とかの環境変数の評価も似たようなもんだね
%%a%% → %a%
221
(1): 2017/10/16(月)23:49 ID:1IRdIkAf(2/3) AAS
環境変数の評価を遅延させる方法はつまり
%%temp%%と%^temp%との2通り書けるわけだ
(結果的に同じになるけど動作は違う)
1-
あと 781 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.032s