15/09/27 20:52:07.03 cWKfNT9F.net
>>302
そのソフトを買ったメーカーにそれぞれ聞け
317:デフォルトの名無しさん
15/09/27 20:52:50.94 cWKfNT9F.net
>>303
ごめんなさい、そのソフトのメーカーに聞け、の誤りです
318:デフォルトの名無しさん
15/09/27 23:56:06.69 S+VayHQk.net
>>302
あれダメだった?
初回読み込み時に表示されるの?それとも2回目の印刷時に表示されるの?
印刷時だったらもしかしたら初回読み込み時起動処理中だったからかもしれない
acrord32.exeは起動すると2つのプロセスが存在する
多分1つは受付みたいな役割りをしていて各pdfを開くプロセスの管理をしていると思われる
状態とウィンドウタイトルの変化は
ProcessID=xxxx runninng OleMainThreadWndName
↓
ProcessID=xxxx runninng OleMainThreadWndName
ProcessID=yyyy running N/A
↓
ProcessID=xxxx runninng N/A
ProcessID=yyyy running xxx.pdf(SECURED) - Adobe Reader
なので最初の1プロセスのみの処理中に次の起動がくるとダメなのかもしれないので
ウェイトを入れてみるとかやってみて
なお、tasklistで状態を表示するようにすると何故か文書が表示されちゃったので
起動完了をbatで監視するのはうまくいかないかも知れない
それと実際の読み込み(印刷もそうだが)は上のProcessID=yyyyのプロセスの方なので
終了しても最大化は解除はされない(この部分は誤解を与えたかもしれない)
319:300
15/09/28 00:02:40.56 pVReont5.net
ひとつ言い忘れてた
こっちの検証環境はXPなので32bit環境です
320:デフォルトの名無しさん
15/09/28 21:17:36.12 XtRLoMNV.net
rmdirについて質問があります。
長文失礼いたします
rmdirコマンドで削除したフォルダの成功、失敗の判定として以下の処理を実行しています。
if exist フォルダ名 (
echo 失敗
) else (
echo 成功
)
rmdirコマンド実行時に指定したフォルダを開いていない状態だと問題なく成功とでますが、開いている状態だと指定したフォルダは削除されるのにも関わらず、失敗と出力されます。
上記、判定処理の前にTIMEOUTコマンドで1秒ウェイトを入れると問題なく成功と出力されます。
私の推測では、rmdirコマンドは、開いているフォルダを閉じてから削除コマンドが実行されているための遅延と考えているのですが、この原因についてご存知の方ご教授頂ければ幸いです。
よろしくお願い致します。
321:デフォルトの名無しさん
15/09/28 21:52:33.44 pVReont5.net
>>307
他がファイル/フォルダをオープンしていると、削除が拒否されずに保留されることがある
これは他プログラムがどのようにオープンしているのかによって違ってくる
FILE_SHARE_DELETE(削除共有)フラグ付きでオープンしているものを削除しようとすると
エラーにはならずに保留される(クローズ後に削除される)
322:デフォルトの名無しさん
15/09/28 22:33:43.19 ynPwQZO2.net
>>307
つかerrorlevel使えば?
323:デフォルトの名無しさん
15/09/28 22:37:43.41 ywrXX2XI.net
>>308
ご回答ありがとうございます。
削除処理の遅延により判定処理に、削除が間に合わず削除失敗と出力されてしまう可能性があるようですね。
この場合、削除処理が終了するまで次の判定処理に進まないような処理が必要になると思うのですが、いい方法などありましたらご教授お願い致します。
324:デフォルトの名無しさん
15/09/28 22:42:03.73 ywrXX2XI.net
>>309
ご回答ありがとうございます。
削除コマンドrmdirでは、失敗でもERRORLEVELにエラーは設定されないようなので、削除指定したフォルダの有無で判定をしています。
325:デフォルトの名無しさん
15/09/29 00:01:30.08 bgSeuQIx.net
>>310-311
なら、逆の発想で dir で行けば?
326:デフォルトの名無しさん
15/09/29 00:39:57.93 8SFmbeyJ.net
@rem findの終了コードが0ならエラー
rmdir "フォルダ名" 2>&1|find /V "" && echo 失敗
「ERRORLEVELを返さないコマンドのエラー判定」あたり参考
327:デフォルトの名無しさん
15/09/29 00:43:01.28 8SFmbeyJ.net
文字化けすまそ、半角アンド2つで
find /V "" && echo 失敗
328:デフォルトの名無しさん
15/09/29 00:49:47.95 8SFmbeyJ.net
すまそ、ほかにも化けてた
rmdir "フォルダ名" 2>&1|find /V "" && echo 失敗
329:デフォルトの名無しさん
15/09/29 01:06:12.17 bgSeuQIx.net
>>313-315
いくつか理由はあるが、とてもそれが有用なノウハウだとは思えない。
330:デフォルトの名無しさん
15/09/30 21:24:53.14 lqNGdTXz.net
>>312-316
ご助言ありがとうございます。
原因特定できず、とりあえずウェイトを設定して経過観測することにしました。
また続けてご質問があります。
rmdirコマンドで削除するフォルダの中にあるフォルダやファイルが開いているとエラーになりますが、これをエラーとせず削除指定したフォルダを消すためにはどうしたら良いでしょうか?
個人的には、rmdirコマンド実行前に、exploerをtaskkillで終了させ再起動させる処理が案としてありますが、並行して何か処理が走る可能性を考慮してなるべく実行中のタスクを落とさずrmdirコマンドを正常終了させたいです。
よろしくお願いします。
331:デフォルトの名無しさん
15/09/30 21:32:01.35 RUmQvCwV.net
>>317
裏では何が走ってるのか判らないので諦めたほうがいい
例えば、インデックスサービス、ウィルススキャン、IMEなど
332:デフォルトの名無しさん
15/09/30 22:01:54.29 SiaxX88C.net
>>317
並行処理には色々あるから、どういうシチュエーションを想定しているかが分からない以上答えようが無い。
一般論としては >>318 の言う通り。
333:デフォルトの名無しさん
15/09/30 22:19:02.70 lqNGdTXz.net
>>318.314
ご回答ありがとうございます。
裏で走る処理の想定は、完全に把握することはできない状態で、313さんが仰る通りです。
今回は、諦めて削除対象が掴まれていたらエラーにする処理にします。
334:デフォルトの名無しさん
15/09/30 22:31:46.85 lqNGdTXz.net
続けてのご質問失礼します。
Windowsサーバー2008 でバッチファイルを直叩きすると必ず管理者権限で実行されると耳にしたので、調べているものの参考文献が見つかりません。
実際にWindowsサーバー2008の環境でバッチを叩く権限が私にはなく、動作確認ができない状態のためご存知の方いらっしゃいましたら、参考URLやご助言頂ければ幸いです。
よろしくお願い致します。
335:デフォルトの名無しさん
15/09/30 22:45:30.90 lqNGdTXz.net
>>321
自己解決できました。
管理者権限は、UAC設定によりバッチ実行時に管理者以外のユーザーが実行した場合は、昇格ダイアログや管理者ユーザーのパスワード入力ダイアログが表示された後に管理者権限で実行されるようです。
336:デフォルトの名無しさん
15/10/01 15:59:29.84 feh5z6YX.net
特定ディレクトリ内にあるファイルの中から、
作成日が新しい順で10件だけ表示する、という方法はありますか?
337:デフォルトの名無しさん
15/10/01 22:27:35.44 GOCfcoes.net
@echo off
setlocal
set target_path=
338: set num=0 for /f "usebackq tokens=*" %%a in (`dir /a:-d /o-d /b "%target_path%"`) do ( call :main "%%~a"||(goto :eol) ) :eol endlocal goto :eof :main if "%num%"=="10" (exit /b 1) echo %~1 set /a num+=1 exit /b 0
339:デフォルトの名無しさん
15/10/01 22:50:13.28 SNj2dVz3.net
>>324
作成日と言ってるから、
dir /a-d /o-d /tc /b
でしょう
あとファイル名に&や^なんかが使われてると・・・
340:320
15/10/02 00:42:34.05 CZzG8B2R.net
文句だけじゃなんだからダメ文字を回避する方法
@echo off
if "%~1" equ "" (set folder=.) else (set folder="%~1")
if "%~2" equ "" (set n=10) else set /a n=%2
if %n% leq 0 set n=99999
for /f %%i in ('dir /a-d /o-d /tc /b %folder%^|find /v /c ""') do set /a n=%%i-%n%
if %n% lss 0 set n=0
dir /a-d /o-d /tc /b %folder%|sort /+99999|more +%n%|sort /+99999
なお、
dir /a-d /o-d /tc /b %folder%
のかわりに
dir /a-d /o-d /tc %folder%|findstr "^[0-9]"
とすればdirの出力形式で表示される
出力をフルパスで出す方法はちょっとわからない(for文で%~fIとか使うことは可能だがダメ文字が・・・)
341:318
15/10/02 01:12:11.43 2daHSNuh.net
>>324-326
ありがとうございます。
詳細なソート方法は分かったんですが表示するファイル数を限定出来なかったのでとても助かります。
342:デフォルトの名無しさん
15/10/02 01:46:43.29 xI4RFHCV.net
フリーソフトの tail や head を手に入れてもできる
dir /a-d /o-d /b | head -10
dir /ad /od /b |tail -10
など
343:デフォルトの名無しさん
15/10/02 04:08:29.67 ywG60DzM.net
@echo off
setlocal
set target_path=.
set line=0
set maxline=10
for /f "usebackq tokens=*" %%a in (`dir /a:-d /o:-d /t:c /b "%target_path%"`) do (
call :main "%%~a"||(goto :eol)
)
:eol
endlocal
goto :eof
:main
if "%line%"=="%maxline%" (exit /b 1)
echo "%~1"
set /a line+=1
exit /b 0
344:デフォルトの名無しさん
15/10/02 13:30:43.97 Q66dAmly.net
バッチファイル自身が管理者権限で実行されているかどうかを判断するための
ポイントを教えて下さい。
今は次のいい加減なチェック方法しています、set で環境変数に
FPS_BROWSER_APP_PROFILE_STRING (←Windows10)
FPS_BROWSER_USER_PROFILE_STRING (←Windows10)
SESSIONNAME
の3つor1つが無いのが管理者権限で実行されているバッチ
これだと、何かのはずみで自前で設定しちゃう(ってる)と明らかにダメな判定基準なので
何かもっと頼れる判断方法を知りたいのです。
Windows10 と Windows7 です。
345:デフォルトの名無しさん
15/10/02 16:31:13.60 CZzG8B2R.net
>>329
引数で渡さずに環境変数で渡すようにしないと
a^b.txt
346:デフォルトの名無しさん
15/10/02 17:03:45.75 2DuVHDsa.net
>>330
whoami /GROUPS|find "High" >NUL||(echo バッチファイル自身が管理者権限で実行されていません) && goto RUNAS
とか (アンド記号は半角で)
判定はMandatory Labelから
347:デフォルトの名無しさん
15/10/02 17:34:44.56 c57yEoAI.net
>>329 行番号で代用すれば、わざわざcallする必要ないと思う
@echo off
set folder=.
set /a len=10
for /f "usebackq tokens=1* delims=:" %%a in (`dir /a:-d /o:-d /t:c /b "%folder%" ^| findstr /n "^"`) do (
if %%a GTR %len% (goto :eof) else echo %%~f$folder:b
)
348:デフォルトの名無しさん
15/10/02 17:39:55.07 0pgpzEB+.net
>>332
ありがとうございました、スッキリうまくいきました。
勉強になります。
349:デフォルトの名無しさん
15/10/02 18:54:09.58 2DuVHDsa.net
>>334
URLリンク(scripting.cocolog-nifty.com)
この辺を参考にしただけ
管理者権限か否かの判定のみなら>>332で用は足りると思うけど、念のため追記
350:デフォルトの名無しさん
15/10/02 20:04:45.82 0pgpzEB+.net
>>335
重ねてありがとうございます。
その記事の次の
waitfor hoge /t 秒
もポイント高かったです。
351:timeout 使うとエラーになって用をなさないことが時々あったので ping を使ってたんですが waitfor という方法があったとは。 『コマンドラインから、UACダイアログを出さずに「管理者として実行」する。』 などでの SchTasks も何かもう目からウロコ。
352:デフォルトの名無しさん
15/10/05 19:28:34.57 SpCxBh4Z.net
PUSHD 作業フォルダ
~いろんな作業~
POPD
というバッチで、たまにカレントが作業フォルダのまま終了してしまうことがあります。
もちろん、作業自体に強制終了、GOTO :EOF等はしていません。
終了後POPDを手入力しても戻らないのでシェル自身が忘れてしまっているようです
最初に%CD%を保管しておいて、POPD後戻っていなかったら強制的にCDで戻るように
するようにしようかと思っているのですが、
もう少しスマートな方法とかあります?
353:デフォルトの名無しさん
15/10/05 21:41:49.86 bTT+ZGiB.net
>>337
ホントに?
354:デフォルトの名無しさん
15/10/06 02:00:18.79 mXRqVUnf.net
>>337
echo on
して本当に popd してるのか確認したのか?
355:デフォルトの名無しさん
15/10/06 02:23:23.79 QJFP7AtV.net
>>337
なんか変なことしてるところがあると思うよ
それを見つけた方がいいけど
別の環境保存方法ということでは
setlocal~endlocalで挟む
それが別のbatであるなら、callで呼ばずにstart /b /waitで呼ぶ
とかかな
356:デフォルトの名無しさん
15/10/06 03:03:04.87 QJFP7AtV.net
別のbatでもstartを使わずにcallでも大丈夫な方法もあった
call|call hoge.bat
357:デフォルトの名無しさん
15/10/07 19:03:48.86 nsjlsK3x.net
イベントでスクリプトを実行するアプリでログオンさせたいんですが、
powershellのスクリプトでログオンて出来ますかね?
ググったのですが参考になる情報を見つけられませんでした。
ヒントを教えて頂けないでしょうか。
358:デフォルトの名無しさん
15/10/07 19:43:48.86 RUI9/d0r.net
スレタイ読めカス
359:デフォルトの名無しさん
15/10/24 10:57:16.17 p7rCtkQ8.net
教えてください。
バッチからIME辞書登録を行いたいのですが、方法はありますでしょうか。
フリーソフト等を使わず、windowsの標準機能のみで行う方法がありましたらご教示ください。
360:デフォルトの名無しさん
15/10/24 11:13:55.98 fZHdxrwJ.net
テキストファイルから一括等登録はできるけどバッチが絡む余地はなさそう
この操作手順を自動化するにはAutoHotKey的なツールを使うしかない
無理やりやるならVBSでSendなんちゃら使いまくるくらいか
複数の単語を一括で登録するには
URLリンク(support.microsoft.com)
361:デフォルトの名無しさん
15/10/24 22:36:15.42 p7rCtkQ8.net
>>345 回答ありがとうございます。
そのsendなんちゃらってなんでしょうか。
ヒント頂けないでしょうか。
お手数ですいません…
362:デフォルトの名無しさん
15/10/24 23:39:00.99 mJxFzgC6.net
>>346
SendKeysのことだと思うけど…
たぶんあなたには無理だと思うから、
諦めるか条件を緩める手段をとったほうが良いかと
363:デフォルトの名無しさん
15/10/25 21:17:07.24 CKwhkT15.net
imjpuexc?
364:デフォルトの名無しさん
15/10/26 00:24:08.25 zhu5kfAS.net
imjpuexcは辞書をファイルを使用するかどうかを登録するだけで単語登録できないような
365:デフォルトの名無しさん
15/10/26 01:43:05.06 kwhrPFGj.net
フリーソフト使えば出来るんだし、そもそも何故batじゃなけりゃいけないのか
使用目的を明らかにしてくれれば別の解決方法もアドバイスできるかもしれないのに
366:デフォルトの名無しさん
15/10/26 10:35:38.89 g04VwT0z.net
事件の香りがするクンクン
367:デフォルトの名無しさん
15/10/26 10:44:57.57 +1zm0ysr.net
別途ソフトを使わずに且つ可能な限り省力化したいという意図と読み取れ�
368:驍ェ 例えば(会社等で)使用する全ての端末に同じ単語を辞書登録させたいとかそんな感じだろうか そういったことであれば自分で辞書ファイルを作ってしまえばいいんじゃないかね その辞書を使用する登録はimjpuexcでできるから、これならバッチファイルも一緒に作って セットで各端末に配布して実行するだけまで省力化できそうだが
369:デフォルトの名無しさん
15/11/24 00:49:21.44 K+m1Fn13.net
質問です
ドラッグアンドドロップしたディレクトリ配下を見ていき
ディレクトリ内がファイルだけの場合はそのディレクトリをその場所に圧縮し、圧縮後に削除
という処理を作りたいのですが
ディレクトリ内がファイルだけか?という判定がうまくいかず
DIRで/a:dとしてもカレントがカウントされてERRORLEVELが常に0になってしまい
助けていただけませんか
370:デフォルトの名無しさん
15/11/24 01:57:14.13 E5eNrkbC.net
/a-d
371:デフォルトの名無しさん
15/11/24 03:42:46.10 ZLe33KjQ.net
>>353
set err=0
for /f %%a in ('dir /ad /b') do set err=1
set err
set err=
372:デフォルトの名無しさん
15/11/24 04:04:14.14 DOEe32Zv.net
>>353
何がしたいのかいまいちよく分からないんだが、
指定されたdirがファイルだけのときは、その親dirに圧縮ファイルを作成後サブdir削除ってこと?
(それともサブdir、さらにその下のサブdirと次々と潜っていくってこと?)
分からないので、直接質問されたことにだけ
1)dirかどうか
if exist "%~1\" echo **
1)ファイルがあるかどうか
dir /a-d "%~1" >nul 2>&1 || echo **nofile**
2)サブdirがあるかどうか
set flag=no
for /d %%i in ("%~1\*") do set flag=yes
又は
for /f %%i in (''dir /b /ad "%~1" 2^>nul') do set flag=yes
373:デフォルトの名無しさん
15/11/24 19:52:42.07 K+m1Fn13.net
>>355-356
ありがとうございます。言葉が足らず申し訳ありません
サブDirの下に潜っていき、その潜った先がファイルだけの構成なら
そいつを圧縮するということを行いたいのです
フォルダ構造を保ちながら、ファイルがまとまっているフォルダだけ圧縮していく
ということを実現しようとしています。
374:デフォルトの名無しさん
15/11/24 23:26:24.37 uLTusmQs.net
dir +d と dir -d で二回errorlevelを判定したらどうなのだろう
375:デフォルトの名無しさん
15/11/26 21:08:59.38 Xx7BS4XN.net
>>353
Info-ZIP の zip.exe を使用した例
cd /d
376:デフォルトの名無しさん
15/11/26 21:11:45.12 Xx7BS4XN.net
>>353
Info-ZIP の zip.exe を使用した例
cd /d "%~f1"
for /r %%i in (.) do set "n=%%~nxi" & pushd "%%i" & call :x & popd
goto :eof
:x
for /d %%j in (*) do goto :eof
zip "..\%n%.zip" *
if errorlevel 1 goto :eof
cd ..
rd /s /q "%n%"
377:デフォルトの名無しさん
15/12/02 18:49:05.46 uZhzBB52.net
質問です。
virtualbox(PC/ATエミュ)にms-dos6.22(english)をインストールしました。
起動後にECHO %PATH%で環境変数PATHを表示させようとしましたが、
%PATH% とタイプした文字が置換されずに帰ってきてしまいます。
自分で環境変数を設定しても同様です。
---------------------------------
C:\ SET VAL=OK
C:\SET
(中略)
VAL=OK <--セットされている
C:\ECHO %VAL%
%VAL% <--置換されない
---------------------------------
これって仕様でしょうか。環境変数を参照するにはどうしたらいいでしょうか?
378:デフォルトの名無しさん
15/12/02 20:00:00.33 G6CksgA0.net
echo "%ABC%"
ダブルクォーテーションで囲めば、どうなる?
379:デフォルトの名無しさん
15/12/02 21:32:16.52 uZhzBB52.net
>>362
同じです。
C:\ECHO "%VAL%"
"%VAL%"
380:356
15/12/02 23:38:35.70 uZhzBB52.net
理由わかりました。
COMMAND.COMの仕様です。
バッチファイルに記述して実行すると置換されます。
WIN9xあたりまではそういう仕様かもしれません。
381:デフォルトの名無しさん
15/12/02 23:45:06.29 l4g7T0Fa.net
command.com懐かしいな
cmd.exeになってからコマンドライン直書きでも展開されるようになったような
382:デフォルトの名無しさん
15/12/03 06:14:24.04 rFz6rQx1.net
ダッセーPROMPTw
383:デフォルトの名無しさん
15/12/03 23:14:20.69 351ZeN4c.net
>>365
記憶がごっちゃになってもうどっちがどっちだったかわからん
384:デフォルトの名無しさん
15/12/04 02:45:09.97 K5fLtIai.net
>>365
そうだったっけ?
全然そんな記憶無いんで、普通に直打ちで変数展開されてたと思う
385:デフォルトの名無しさん
15/12/04 04:22:29.66 p/GS1A93.net
win95のcommand.comで直接echo %PATH% してみたけどちゃんと展開された
386:デフォルトの名無しさん
15/12/07 06:23:17.16 DQwTbvQ5.net
質問です。終了判定の順番についてなのですが
プログラミング的というかバッチ的なセオリーというのがもしあれば教えて下さい
失敗した場合
・ループ goto :LOOP
・リトライ上限回数による終了 exit /b 1
成功した場合
・途中終了によりリスタート exit /b 2
・正常終了 exit /b 0
とあってそれぞれどのような順でも出来ます
頻度の高い順や短い処理の順にした方が余計な判定をしなくて済みますが
大差ない場合等はその順序に何かセオリーがあったりしますか?
387:デフォルトの名無しさん
15/12/09 01:33:29.59 DMnL3no7.net
フォルダを指定するとそれ以下の階層の指定したファイルを他のソフトに橋渡ししたいのですがどのように学べば作れますかね?
388:デフォルトの名無しさん
15/12/09 03:34:34.37 xJXhqdvp.net
> それ以下の階層の指定したファイル
どういう指定?拡張子?for /r で出来ると思う
389:デフォルトの名無しさん
15/12/10 03:14:00.36 VBAMhbiJ.net
2つの日付(年月日時分秒)を引数としてその差を秒で返すバッチをお願いします
"20000101000000" "20040404_044444"とか"2000/01/01_00:00.00"とか引数の形式はお任せ
引数のエラーチェックは無しでOK。閏日は必要。閏秒は無視
390:デフォルトの名無しさん
15/12/14 22:34:22.40 A58wbYtQ.net
@echo off
rem call :a1 yyyymmddhhmmss yyyymmddhhmmss result
call :a1 19700101000000 20380119031407 s
echo %s%
pause
goto :eof
:a1
setlocal
set /a b=10000,c=100
call :a2 1 %1 & call :a2 2 %2
call :a3 y1 m1 d1 d1 & call :a3 y2 m2 d2 d2
set /a s1+=h1*3600+n1*60,s2+=h2*3600+n2*60,s3=(d2-d1)*86400-s1+s2
endlocal & set /a %3=%s3%
goto :eof
:a2
set a=%2
set /a y%1=1%a:~0,4%-b,m%1= 1%a:~4,2%-c,d%1= 1%a:~6,2%-c
set /a h%1=1%a:~8,2%-c,n%1=1%a:~10,2%-c,s%1=1%a:~12,2%-c
goto :eof
:a3
set /a y=%1,m=%2,d=%3,m+=(y-1)*12,d+=(m-1)*31
set /a a=m+9,d+=a/48-a/1200+a/4800,b=12
set /a %4=d-a/b*3-(m+7)/b-(m+5)/b-(m+2)/b-m/b
391:デフォルトの名無しさん
15/12/15 00:46:59.16 o42ChFzI.net
ついでに秒差から年月日時分秒を逆算するバッチ
@echo off
rem call :a4 yyyymmddhhmmss +sec year month day hour minute second
call :a4 19700101000000 2147483647 y m d h n s
echo %y% %m% %d% %h% %n% %s%
pause
goto :eof
:a4
setlocal
set /a b=10000,c=100,s2=%2
call :a2 1 %1
call :a3 y1 m1 d1 d1
set /a s1+=h1*3600+n1*60,d3=d1+(s1+s2)/86400,s3=(s1+s2)%%86400
set /a h3=s3/3600,n3=s3/60%%60,s3%%=60
call :a5 d3 y3 m3 d3
endlocal & set /a %3=%y3%,%4=%m3%,%5=%d3%,%6=%h3%,%7=%n3%,%8=%s3%
goto :eof
:a5
set /a d=%1,a=305,b=365,c=146097,e=(d+a)/c,f=(d+1+a)/c-e,d-=e
set /a d+=(d-f+a)/36524,c=1461, e=(d+a)/c,f=(d+1+a)/c-e,d-=e
set /a d+=(d-f+a)/b*3+(d+244)/b+(d+183)/b+(d+91)/b+(d+30)/b-1
set /a %2=1+d/372,%3=1+d/31%%12,%4=1+d%%31
goto :eof
rem ここに >>374 の :a2 と :a3 をコピペ
392:デフォルトの名無しさん
15/12/15 04:37:32.89 DyLWSAr/.net
>>374-375
こんなに短く書けるものなのですね
ifやらforやら使って閏日判定して足したり最初から全部秒に直して計算してたりとアホな事してました
とても参考になりました。ありがとうございました
:a3 2行目 a=m+9 が良く分かりません。その後は閏日を追加する計算で3行目が月31日計算の補正だと思うのですが
暇があって気が向いた時で良いですので :a3,2行目と3行目の解説をお願いしたいです
393:デフォルトの名無しさん
15/12/15 05:13:05.16 DyLWSAr/.net
a=m+9 は3月起点にする為ですよね
48ヶ月(4年)毎に+1日,1200ヶ月(100年)毎に-1日(4年毎の打ち消し),4800ヶ月(400年)毎に+1日
なるほどです
394:デフォルトの名無しさん
15/12/16 20:07:03.65 fy5f41q6.net
@echo off
rem this.bat yyyymmddhhmmss yyyymmddhhmmss VerName
setlocal
call :SUB 1 %~1
call :SUB 2 %~2
set /a s=(d2-d1)*86400+(h2*3600+n2*60+s2)-(h1*3600+n1*60+s1)
endlocal & echo %s% & if not "%~3"=="" set %~3=%s%
exit /b
:SUB
set a=%2
call set /a y%1=1%a:~0,4%-10000,m%1=1%a:~4,2%-100,d%1=1%a:~6,2%-100,h%1=1%a:~8,2%-100,n%1=1%a:~10,2%-100,s%1=1%a:~12,2%-100
call set /a m%1+=(y%1-1)*12
call set /a d%1+=(m%1-1)*31+(m%1+9)/48-(m%1+9)/1200+(m%1+9)/4800-((m%1+9)/12)*3-(m%1+7)/12-(m%1+5)/12-(m%1+2)/12-m%1/12
exit /b
rem消してcallを&してcall set /aを,で1行に纏めたら10行になるな
似たようなの書いた事あるけど俺もifとfor駆使して50行くらいあったわ
ロジック大事だな。369みたいにスマートに書ける頭良い奴羨まし
>>377
>a=m+9 は3月起点にする為
それが分かるなら分かりそうなものだが3行目もそれと同じ
3月なら-3日、15ヶ月なら-6、同じように5月、7、10、12と西向く侍越えてたら日を引いてる
395:デフォルトの名無しさん
15/12/17 09:52:29.59 pa9hyiSF.net
>>374
フェアフィールドの公式でもっと簡略化できる
:a3
set /a a=(12-%2)/10,y=%1-a,m=%2+a*12
set /a %4=365*(y-1)+y/4-y/100+y/400+306*(m+1)/10-63+%3
逆算では>>375の:a5の代替となる公式は知らないなあ
396:デフォルトの名無しさん
15/12/17 14:48:37.51 ZSvcUJP0.net
せっかくなんで、誰でも思いつく変換テーブルを使った奴も
:a3
set n= 00 31 61 92122153184214245275306337
set /a y=%1,m=%2,d=%3,y+=(%2+9)/12-1,m=(%2+9)%%12*3
call set /a %4=y*365+(y/4)-(y/100)+(y/400)+%%n:~%m%,3%%+d-1-306
goto :eof
397:デフォルトの名無しさん
15/12/17 22:03:19.42 6xd5GL4Z.net
>>379
>>380
名人芸みたい
set /a で , を使えるのは知らなかった
398:デフォルトの名無しさん
15/12/18 20:41:02.17 5v+P6SwD.net
>フェアフィールドの公式
理解するのに少し時間がかかったけどひとつ賢くなりました。ありがとう
399:デフォルトの名無しさん
15/12/19 23:36:20.61 hIm+VLiM.net
>>379
>>374は差分を取ってるだけだから定数部分は要らない
簡略化したいなら(y-1)はyでいいし、-63も不要だな
でもそうすると>>375で使えなくなるけど
400:デフォルトの名無しさん
15/12/20 01:39:29.37 ZqBWpEZf.net
@echo off & setlocal
call :SUB 1 %~1 & call :SUB 2 %~2
set /a s=(d2-d1)*86400+(h2-h1)*3600+(n2-n1)*60+s2-s1
endlocal & echo %s% & if not "%~3"=="" set %~3=%s%
exit /b
:SUB
set a=%2
set /a m=1%a:~4,2%-100, y=1%a:~0,4%-10000-(12-m)/10, m=m+(12-m)/10*12
call set /a d%1=1%a:~6,2%-100, h%1=1%a:~8,2%-100, n%1=1%a:~10,2%-100, s%1=1%a:~12,2%-100
call set /a d%1+=365*y+y/4-y/100+y/400+306*(m+1)/10
401:デフォルトの名無しさん
15/12/21 08:37:29.96 h62kjpL5.net
370の:a5が全く分からん。eは0年3月から400年周期が何回あるか?で合ってる?
通日から年月日求める式の解説してるサイトとかあったら教えて欲しい
402:デフォルトの名無しさん
15/12/21 09:39:16.04 M1iYKpBu.net
@echo off & setlocal enabledelayedexpansion
call :SUB 1 %~1 & call :SUB 2 %~2
set /a s=(d2-d1)*86400+(h2-h1)*3600+(n2-n1)*60+s2-s1
endlocal & echo %s% & (if not "%~3"=="" set %~3=%s%) & exit /b
:SUB
set a=%2 & set /a b=!a:~0,8!, c=1!a:~8!-1000000, h%1=c/10000
set /a m=b/100%%100, e=(12-m)/10, m+=e*12, y=b/10000-e, n%1=c/100%%100
set /a s%1=c%%100, d%1=b%%100+365*y+y/4-y/100+y/400+306*(m+1)/10
goto :eof
403:デフォルトの名無しさん
15/12/21 10:07:38.96 M1iYKpBu.net
>>385
> eは0年3月から400年周期が何回あるか?で合ってる?
dは1年1月1日からの日数
1個目のeは400年3月1日から400年周期の3月1日の日数
1個目のfはdの最終日の翌日が400年周期の3月1日だったら1,それ以外は0
2個目のe,fは同様に4年周期での値
> 通日から年月日求める式の解説してるサイトとかあったら教えて欲しい
私も知りたい
404:デフォルトの名無しさん
15/12/21 10:32:14.51 M1iYKpBu.net
>>387は>>375の:a5の事です
2chは2種類あるんで、>>を付けないと番号が変わることがある
405:デフォルトの名無しさん
15/12/21 16:40:51.02 xEP90Lc1.net
俺が判った範囲での数値
d=1年1月0日を基点とした日数
d+1=1年1月1日を基点とした日数
d+305=0年3月1日からの日数
146097=400年+97(うるう日)
36524=100年+24(うるう日)
1461=4年+1(うるう日)
003 004 005 006 007 008 009 010 011 012 001 002 (月)
031 030 031 030 031 031 030 031 030 031 031 028 (日数)
031 061 092 122 153 184 214 245 275 306 337 (積算日数)
030 060 091 121 152 183 213 244 274 305 336 (積算日数-1)
372=365+(305>)*3+(244>)+(183>)+(91>)+(30>)
406:デフォルトの名無しさん
15/12/21 16:48:15.00 xEP90Lc1.net
d+305=0年3月1日からの日数
↓
d+1+305=0年3月1日からの日数
に訂正
407:デフォルトの名無しさん
15/12/21 16:55:52.04 xEP90Lc1.net
d+1=1年1月1日を基点とした日数
これは明らかに間違ってるんで削除
408:デフォルトの名無しさん
15/12/21 17:00:54.37 M1iYKpBu.net
>>388
よく考えるとシフト演算式の>>の右側の数値が勝手に変わったりするんだな
やだなあ
409:デフォルトの名無しさん
15/12/22 23:27:20.70 GbSBVwIU.net
> 通日から年月日求める式の解説してるサイトとかあったら教えて欲しい
俺も
誰か概要でも良いので解説お願いします
410:デフォルトの名無しさん
15/12/23 11:08:49.70 aiQM95lL.net
echo aaa >> C:\test.log
rem input.txtには3行書かれている
FOR /F
411:デフォルトの名無しさん
15/12/23 12:48:25.38 dDv8KSpn.net
>>393
躓いてるのは、
30,91,183,244,305,372の数値の意味だろ?
>>389で解説されてるじゃん
412:デフォルトの名無しさん
15/12/23 15:53:35.33 dDv8KSpn.net
簡単に要点のみ解説すると、
全部の月を31に補正して計算するってこと 1年は31*12=372日になる
3月以降の場合、+3日
11月以降の場合、+1日
9月以降の場合、+1日
6月以降の場合、+1日
4月以降の場合、+1日
例えば、7月3日だったとしよう
すると、+3+1+1=+5日が加算され、31*7 あまり 3日という風に算出する
413:デフォルトの名無しさん
15/12/23 16:15:56.66 dDv8KSpn.net
月の説明がズレたけどわかるよね?
(d+244)/12 が5月以降
(d+183)/12 が7月以降
:
ってことね
414:デフォルトの名無しさん
15/12/23 18:34:12.63 2AzhQbBP.net
もはやバッチスレじゃなくなってる
415:デフォルトの名無しさん
15/12/24 10:50:25.07 Hd7uli2y.net
複数のアプリケーションをバッチで順番に起動してインストールしています。
しかし起動してきたsetup.exeなどの「同意する」「次へ」などは手動でやっています。
この alt+n や Enter などのキー入力はバッチファイルからできないものでしょうか。
416:デフォルトの名無しさん
15/12/24 19:51:50.54 k0eMsSdC.net
>>373 はこいつと同一人物なんだろうな
URLリンク(potato.)
417:2ch.net/test/read.cgi/software/1387352479/588-594
418:デフォルトの名無しさん
15/12/25 01:37:29.49 xjel9170.net
>>399
これを使えば、キー入力が出来ます。
キーボード・マウス シミュレーター
URLリンク(ftp.vector.co.jp)
KMS.EXE
入力のタイミングは、こちらで調整出来ます。
コンソールアプリ用 : Visual Studio 用 バッチビルドパッケージ
URLリンク(winofsql.jp)
FINDWINDOW.EXE ウィンドウハンドル取得
FOREGROUND.EXE 指定のウィンドウハンドルの画面をフォアグラウンドにする
コマンド・プロンプトからウィンドウのアクティブ状態を変更
URLリンク(ftp.vector.co.jp)
ACTIVATE.EXE
419:デフォルトの名無しさん
15/12/25 05:48:22.51 pIvyUHeA.net
インストーラーのsetup.exeにQuietInstallのオプションが無いか確認して、無いならAutoHotkey使うとか
420:デフォルトの名無しさん
15/12/25 14:17:34.47 O30Ofv/O.net
バッチよりWSHでSendKeysじゃないかな
421:デフォルトの名無しさん
15/12/25 23:52:12.53 Q7FXbHS7.net
今日の大失敗(初歩のバッチ)
cd xxx\yyy\zzz
del /P *.*
と書くのは止めましょう
xxx\yyy\zzz フォルダが無かった場合、現フォルダのファイルが全滅
幸い重要ファイルはなくて助かった、もし del /S /P *.* だったら大ダメージ
422:デフォルトの名無しさん
15/12/26 00:46:33.93 X4YvfGHD.net
俺も先日vvvに3万個くらいやられたけど、大部分がテンポラリファイルだったから助かったよ
423:デフォルトの名無しさん
15/12/26 01:15:18.22 DVIYmgTf.net
>>404
間違って大量削除したときのために復元ソフトはいつでも動かせるようにしとけ
424:デフォルトの名無しさん
15/12/26 02:02:37.73 ORfhhjc6.net
>>404
cd ~ && call 削除のための処理
とかすればいいんじゃね
425:デフォルトの名無しさん
15/12/26 20:19:18.74 GqwbH3xG.net
xxx\yyy\zzz フォルダがあっても駄目だろ
せめて cd /d にしろよ
426:デフォルトの名無しさん
15/12/27 00:32:23.81 WRaoLAxw.net
>>407
cd ~ && call だと cd がエラーでcallは実行されないのに
cd ~ && echo abc だとcd がエラーでもecho実行、なぜ?
if exist でチェックしようとしてもファイルかフォルダか区別できないような気がする
427:デフォルトの名無しさん
15/12/27 09:53:50.86 g59Yk3Y1.net
SSD化の時のコマンドで、ジャンクションを貼るよりリンボリックリンクの方がいいのでしょうか
変数など訂正すべきところなどご教授ください
robocopy "C:\Users" "D:\Users" /E /COPYALL /XJ
robocopy "C:\ProgramData" "D:\ProgramData" /E /COPYALL /XJ
rmdir "C:\Users" /S /Q
mklink /J "C:\Users" "D:\users"
rmdir "C:\ProgramData" /S /Q
mklink /J "C:\ProgramData "D
428:デフォルトの名無しさん
15/12/28 13:00:25.63 dgI6+oKo.net
>>409
> ファイルかフォルダか区別できないような気がする
dir /ad とか attrib で属性見るとか
そこまでやるなら wsh とかに行った方がいいように思うけど
429:デフォルトの名無しさん
15/12/28 13:47:32.36 c+74yIFV.net
>>409
if existによるディレクトリの確認はこの辺参照
URLリンク(d.hatena.ne.jp)
430:デフォルトの名無しさん
15/12/28 19:52:52.18 VIpgPLje.net
for %%i in (folder) do set a=%%~ai
とか
call :AA folder
:AA
set a=%~a1
set a=%a:~0,1%
とかで1文字目取り出して if "%a%"=="d" じゃないっけ?うろ覚え
431:デフォルトの名無しさん
16/01/02 22:28:34.67 R0FqLiWH.net
スルーされとる
432:デフォルトの名無しさん
16/01/04 23:45:48.45 uSRue82f.net
>>411-413
ありがとうございます、いろいろな方法がありますね、試してみます。
遅くなってごめんなさい
433:デフォルトの名無しさん
16/01/19 21:34:08.04 ibh0JYmW.net
ソフ板に質問スレが無かったので、こちらで教えて欲しいのですが・・・
2つのフォルダを比較して、フォルダ1と同じ名前のファイルだけ抽出して別フォルダに保存出来るアプリありますでしょうか?
例えば
(フォルダ1)
ファイルa
ファイルf
ファイルg
ファイルp
ファイルx
(フォルダ2)
ファイルa
ファイルb
ファイルc
ファイルf
ファイルg
ファイルv
ファイルw
ファイルx
の場合フォルダ2の
ファイルa
ファイルf
ファイルg
ファイルx
だけ、フォルダ3にコピーしたいのですが・・・
バッチファイルで出来るなら、それでもいいのですが、よろしくお願いします。
434:デフォルトの名無しさん
16/01/19 21:36:04.38 ibh0JYmW.net
あるいは、フォルダ1にあってフォルダ2に無いファイルをフォルダ2から消しても構いません。
最終的にフォルダ1にある名前のファイルだけ残ればいいです。
因みにですが、フォルダ1とフォルダ2のファイルは名前が同じでも中身が違いますので、残すのはあくまでもフォルダ2のファイルだけです。
435:デフォルトの名無しさん
16/01/19 22:03:45.19 IRnEE3xb.net
スレリンク(software板)
スレリンク(software板)
バッチでも出来るけど
フォルダ1と2にはフォルダが無い事前提?
フォルダ1か2、或いは両方にファルダがある場合どうするの?
436:デフォルトの名無しさん
16/01/20 00:58:45.36 QphOxfb9.net
>>416
set "DIR_A=%CD%\f1"
set "DIR_B=%CD%\f2"
set "DIR_C=%CD%\f3"
md %DIR_C%
pushd "%DIR_B%" || goto :err
for %%a in (*) do dir /a-d /b "%DIR_A%\%%~a" >nul 2>nul && copy %%~a "%DIR_C%"
popd
set DIR_A=
set DIR_B=
set DIR_C=
goto :eof
:err
echo error
goto :eof
437:デフォルトの名無しさん
16/01/20 03:16:35.15 CGJNTMJr.net
>>417
@echo off &setlocal
REM USAGE: this.bat "folder1" "folder2"
pushd "%~1" ||goto :eof
popd
pushd "%~2" ||goto :eof
pushd ..
set DTTM=%date:/=%%time: =0%
set DTTM=%DTTM::=%
set $TMP=$tmp%DTTM:~0,-3%
move "%~2" %$TMP%
xcopy /e /i /h /k /y /b %$TMP% "%~2\%$TMP%"
rd /s /q %$TMP%
for /f "delims=" %%A in ('dir /a:-d /b "%~1"') do if exist "%~2\%$TMP%\%%A" move "%~2\%$TMP%\%%A" "%~2\%%A"
rem rd /s /q "%~2\%$TMP%"
exit /b
@echoからexitまでをコピーして拡張子をbatで保存
"folder1" "folder2" は同じディレクトリにあってそこをカレントディレクトリとして実行するならフォルダ名のみで可
そうでない場合はフルパスで指定
exitの前のrem rd /s /q "%~2\%$TMP%"をrd /s /q "%~2\%$TMP%"とrem消せばtmpフォルダが削除されるけど十分テストしてから消してね
>フォルダ2に無いファイルをフォルダ2から消しても構いません
フォルダ2のファイルのうちフォルダ1にあるものとファイル名が同一のもの以外を削除ってことよな?
ファイルサイズが大きいなら該当ファイルだけtmpフォルダに移動させる仕様の方が処理が早い
438:デフォルトの名無しさん
16/01/20 05:25:10.21 2Q8BlnOV.net
@echo off &setlocal
REM USAGE: this.bat "folder1" "folder2"
pushd "%~1" ||goto :eof
popd
pushd "%~2" ||goto :eof
pushd ..
set DTTM=%date:/=%%time: =0%
set DTTM=%DTTM::=%
set $TMP=$tmp%DTTM:~0,-3%
md "%~2\%$TMP%"
for /f "delims=" %%A in ('dir /a:-d /b "%~2"') do if not exist "%~1\%%A" move "%~2\%%A" "%~2\%$TMP%\%%A"
rd /s /q "%~2\%$TMP%"
exit /b
439:デフォルトの名無しさん
16/01/20 07:14:28.26 Mi5py/5P.net
for %%i in ("フォルダ1\*") do move "フォルダ2\%%~nxi" "フォルダ3\"
440:デフォルトの名無しさん
16/01/24 00:40:39.46 krEiQR2u.net
ファイルのリネームをしたいです
具体的な処理は 複数のファイルを
20160116
2016年01月16日
を160116の6ケタ数字に変更してファイル名の最後に持っていくという処理をしたいです
写真20160116.jpg
20160116家.jpg
2016年01月16日花.jpg
犬2016年01月16日.jpg
をすべて→写真 160116.jpg
みたいに文字列+日付6ケタに統一したいのです
441:デフォルトの名無しさん
16/01/24 00:41:52.56 krEiQR2u.net
訂正
ファイルのリネームをしたいです
具体的な処理は 複数のファイルを
20160116
2016年01月16日
の日付が含まれたファイル名を
160116の6ケタ数字に変更してファイル名の最後に持っていくという処理をしたいです
具体的には
写真20160116.jpg
20160116家.jpg
2016年01月16日花.jpg
犬2016年01月16日.jpg
をすべて→写真 160116.jpg
みたいに文字列+日付6ケタに統一したいのです
よろしくお願いします
442:デフォルトの名無しさん
16/01/24 01:27:04.99 5+KozvoU.net
>>424
>>423
difして差分取れ
443:デフォルトの名無しさん
16/01/24 05:34:39.03 fqtpw7CO.net
なぜバッチでするの?
PowerShell じゃダメなのか?
444:デフォルトの名無しさん
16/01/24 08:03:06.77 bklX6SGr.net
>>426
それができるならやってる
445:デフォルトの名無しさん
16/01/24 15:29:33.54 LnmKPUOX.net
出来なくはないけど、文字列+日付6ケタ の文字列部分に"年""月""日""%""&"が使われていない事とかの制約付くのと手間とか諸々考えたらリネーム系のソフト探すかPSやperlとかの正規表現使えるスクリプト言語の方が良い
リネーム系ソフトが一発で文字列+日付6ケタに出来ないなら一旦、日付8ケタ_文字列.jpg とかに変換してそこからバッチで、文字列+日付6ケタに再変換するとかは?
446:デフォルトの名無しさん
16/01/25 03:33:01.80 FJlvjxIx.net
>>423
>>424
ファイル名が例題通りなら
setlocal enabledelayedexpansion
SET Fldr=%USERPROFILE%\Pictures
SET Ext=*.jpg
SET RenBat=RenStrYYMMDD.cmd
echo;cd /d "%Fldr%" > "%RenBat%"
for /f %%0 in ('dir /b "%Fldr%\%Ext%"') do (
set DelNGP=%%~n0
set DelNGP=!DelNGP:年=!
set DelNGP=!DelNGP:月=!
set DelNGP=!DelNGP:日=!
set Str=!DelNGP!
for /l %%C IN (0,1,9) DO @(
set Str=!Str:%%C=!
)
call set YYYYMMDD=%%DelNGP:!Str!=%%
if "!DelNGP!"=="!Str!!YYYYMMDD!" (
echo;ren "%%~nx0" "!Str!!YYYYMMDD:~-6!%%~x0" >> "%RenBat%"
) else (
echo;ren "%%~nx0" "!YYYYMMDD:~-6!!Str!%%~x0" >> "%RenBat%"
)
)
で、出来たバッチファイルの怪しいヤツを編集して実行すればなんとか。
ファイル名がこれに当てはまらないなら、正規表現の出番なので
提示されている、PSとかperl、sed、awk等を仕入れて専用スレでお願いします。
447:デフォルトの名無しさん
16/01/25 03:54:11.66 FJlvjxIx.net
実行結果は
写真160116.jpg
160116家.jpg
160116花.jpg
犬160116.jpg
ですが、if文をやめてechoを最初の行だけにすれば
写真160116.jpg
家160116.jpg
花160116.jpg
犬160116.jpg
になります。
448:デフォルトの名無しさん
16/01/27 05:07:29.42 fJiggefa.net
①参照中のNTPサーバーを調べる ②NTPサーバーとの時刻のズレを表示する バッチなんですが
ズレを表示するコマンドは下記のようにNTPサーバー名が必要です
w32tm /monitor /computers:[NTPサーバ名]
そこでNTPサーバーを調べるコマンドは "w32tm /query /source"ですが
返り値は ntp.nict.jp,0x9 みたいな感じで ntp.nict.jp だけを取り出したいと思います
そこでgoogle検索して下記のようなものを書いたところ期待どおりの結果を得る事が出来ました
結果的にはOKなのですがechoとw32tmのコマンドくらいしか意味がわかっていません
特に3行目5行目はチンプンカンプンですがこういう書き方で問題ないでしょうか?
無駄な記述があるとか、もっとスマートな方法があるとか指摘して頂ければ助かります
よろしくお願いします
--------------------------------------------------------------------------
@echo off
SETLOCAL
for /f "usebackq tokens=*" %%i in (`w32tm /query /source`) do @set RESULT=%%i
echo %RESULT%
for /f "tokens=1-2 eol=, delims=," %%A in ("%RESULT%") do (
set STR1=%%A
set STR2=%%B
)
echo サーバー: %STR1%
w32tm /monitor /computers:%str1%
endlocal
pause
449:デフォルトの名無しさん
16/01/27 06:18:16.88 3u678Fz6.net
for /f "delims=," %%A in ('w32tm /query /source') do ( echo サーバー: %%A
w32tm /monitor /computers:%%A
)
pause
450:デフォルトの名無しさん
16/01/27 06:39:40.57 3u678Fz6.net
for /f "delims=," %%A in ('w32tm /query /source') do ( echo サーバー: %%A
w32tm /monitor /computers:%%A | findstr "NTP:"
)
pause
451:デフォルトの名無しさん
16/01/27 06:50:27.07 3u678Fz6.net
for /f "delims=," %%A in ('w32tm /query /source') do ( echo サーバー: %%A
for /f "tokens=2" %%B in ('w32tm /monitor /computers:%%A ^| findstr "NTP:"') do echo %%B
)
pause
452:デフォルトの名無しさん
16/01/27 07:38:45.54 fJiggefa.net
>>432,428
ありがとうございます
表示もスッキリして頂いてとても勉強になります
453:デフォルトの名無しさん
16/01/27 23:21:20.89 bcAMZw4L.net
for /f "delims=," %%A in ('w32tm /query /source') do for /f "tokens=2 delims=+s " %%B in ('w32tm /monitor /computers:%%A ^| findstr "NTP:"') do echo %%A: %%B
454:デフォルトの名無しさん
16/01/28 13:48:27.48 EDEAMnLy.net
「資料%28過去%29」みたいにファイル名にutf-8?が含まれるものを指定してるのですが
batを実行するとデコードされて「資料(過去)」と認識されてます。
「資料%28過去%29」を文字列として認識させるにはどうしたら良いでしょうか。
455:デフォルトの名無しさん
16/01/28 15:22:02.94 hExe5FIX.net
>>437
パーセントエンコードはURIに使うものでbatでデコードはされないと思うな
それとは別に
batで%は特別な意味を持っていて、普通は引数や環境変数の中身を見るときに使う
echo %1 %hoge%
とか
よって、%2が第2引数を参照してるととられ、引数指定してなかったら無いので
資料8過去9
とならないとおかしいと思うけど?
本当に「資料(過去)」となるのなら俺にはその原因は分からない
で、「資料8過去9」となると仮定して%%と重ねて記述すると%になるので
資料%%28過去%%29
でどうかな?
batの何処にどういう風に使ってるのかわからないので場合によっては
%%%%と各必要があるかも知れない
456:デフォルトの名無しさん
16/01/29 21:46:01.22 j1UQgjYg.net
>>436
ありがとうございます
必要な情報だけ一行に集約されてとても見やすいです
こういうふうに書けるよう理解を深めたいです
457:デフォルトの名無しさん
16/01/30 03:15:06.90 hg3OxSOg.net
cmd.exe /k @for /f "delims=," %A in ('w32tm /query /source') do @for /f %B in ('2^>null nslookup %A ^| findstr /v :') do ^
@for /f "tokens=2 delims=+s" %C in ('w32tm /monitor /computers:%A ^| findstr "NTP:"') do @echo %A [%B]: %C
こういうのを"ファイル名を指定して実行"からだと「アクセスが拒否されました」となるのですが
コマンドプロンプトを管理者として実行の時と同様の結果にする書き方とか方法があれば教えて下さい
458:デフォルトの名無しさん
16/01/30 10:20:23.91 zXGU0vQS.net
すみません。
ディレクトリの中を見ていき、2GB以下なら圧縮ということをしたく
対象Dir
├フォルダ
│ ├フォルダ(2GB 以下) ← これを圧縮
│ │ └ファイル
│ ├フォルダ(2GB以上)
├フォルダ(2GB以下) ← これを圧縮
├フォルダ(2GB以上)
再帰的に見ていった時に、圧縮していくと最終的に一番上が2GB以下になり
全部圧縮されてしまい。どなたかお助けください
459:デフォルトの名無しさん
16/01/30 23:03:45.58 ffKBMc7H.net
再帰で圧縮せずに2GB未満フォルダのリストを作り再帰終了後にリストを元に圧縮
どうでも良いけど、超&以下、以上&未満な
460:デフォルトの名無しさん
16/01/31 11:30:04.13 +ngYeOTE.net
なるほど、そういうことですか
リストを出力して、最後にそれをパス指定で圧縮と
無駄に再帰でやろうとしすぎていました。ありがとうございます
461:デフォルトの名無しさん
16/02/06 10:40:05.52 hbtVaDtk.net
あるURL URLリンク(AAAAAA)… を引数%1として、
URLリンク(AAAAAA)だけを取り出す方法が知りたいです
(3つ目の/までの文字列を取り出したい)
よろしくお願いします
462:デフォルトの名無しさん
16/02/06 11:56:20.12 ilYyGYOR.net
>>444
@echo off
set arg1=%~1
@for /f "tokens=1,2 delims=/" %%i in ("%arg1%") do set domain1=%%i//%%j/
echo %domain1%
set arg1=%~1
set Scheme=%arg1://=&set arg1=%
set domain2=%arg1:/=&set dummy=%
echo %Scheme%//%domain2%/
463:デフォルトの名無しさん
16/02/06 12
464::13:31.62 ID:hbtVaDtk.net
465:デフォルトの名無しさん
16/02/07 03:34:31.41 xzt+ySx/.net
0001~9999までをカウントするのってどうやればいいですか
常に4桁の文字列が得られるようにしたいです
466:デフォルトの名無しさん
16/02/07 03:59:09.24 S13nymNF.net
>>447
echo %random% を使う
0、10000以上であればやり直す
467:デフォルトの名無しさん
16/02/07 04:06:32.80 oI7YLQ9S.net
>>447
質問の意味がいまいち不明だがこういうことか?
@echo off
for /l %%i in (0,1,9999) do (
call set cnt=000%%i
call echo %%cnt:~-4%%
)
set n=0
:loop
set cnt=000%n%
echo %cnt:~-4%
set /a n+=1
if %n% lss 10000 goto :loop
468:デフォルトの名無しさん
16/02/07 15:37:11.81 YEUGR+cI.net
for /L %%i in (10001,1,19999) do (set ct=%%i
call echo %%ct:~-4%%)
set a=10001
:LOOP
echo %a:~-4%
set /a a+=1
if %a% LEQ 19999 (goto :LOOP) else exit /b
469:デフォルトの名無しさん
16/02/07 16:38:16.87 7II1MwkR.net
コマンドの実行結果を環境変数(value)に格納すべく、
for /f %%i in ('コマンド') do set value=%%i としたとき、
コマンドの処理時間が長いと完全に沈黙しちゃうので何とかしたいのだけど、
コマンドを単独で実行した時にコンソール上に表示される実行中の情報
(進行状況とか)を表示する方法ってないかな?
470:デフォルトの名無しさん
16/02/07 17:41:06.71 oI7YLQ9S.net
>>451
どうしてもって言うのなら、ファイルをフラグに使うとなんとかなるかな
@echo off
set f=%temp%\result
start /b コマンド>%f%
set n=0
call :wait %f%
if %errorlevel% neq 0 goto :timeout
for /f "tokens=*" %%i in (%f%) do echo %%i
del %f%
goto :eof
:timeout
goto :eof
:wait
if %~z1 gtr 0 exit /b 0
ping -n 2 localhost >nul
set /a n+=1
echo 処理中(%n%秒)
if %n% leq 10 goto :wait
echo timeout
exit /b 1
471:デフォルトの名無しさん
16/02/07 17:51:21.78 oI7YLQ9S.net
別の方法として
tasklistからコマンドが消えるのを監視するのがいいかも
さらには、別batでコマンドを起動し、終了時にタスクなり他ソフトなりを起動して
何らかのアクションを起こし、それを監視するとか
472:デフォルトの名無しさん
16/02/07 20:46:37.41 csmRYXFo.net
URLリンク(www.google.co.jp)
473:446
16/02/08 00:34:24.61 tvZTUQzk.net
>>452-453
やはりちょっと別の工夫が必要なんだねぇ。
一応、当該コマンドの処理
(通常のファイル操作に加えて、標準エラー出力からの文字列を整形したものを環境変数に格納)
が終わったら格納した環境変数を使ってまた別のコマンドを実行していて、
その時にエラーレベル判定は行われるので、
すんなり行けば、次のコマンド(ここで"echo 中間処理終了")で、その程度での経過は分かるから、
申し訳ないけど、そのままで妥協しておこうかな。
>>454
同時でなくていい場合なら、標準エラー出力のほうを一度ファイルにして、
改めてtypeで読み込んで整形して環境変数に格納というのでも出来そう。
teeをLinux(Cygwinでも)で使ったことはあって、Cygwinのbashスクリプトでやっちゃおうか、とも思ったんだけど、
とりあえずどのWindows環境でも使えるということで、ハマってしまいました。
ただ、findstrが文字数オーバーでエラーが出るサンプルがあって、
結局grep使っちゃったから、あまり意味が無いかもw
御二方、どうもありがとう。
474:デフォルトの名無しさん
16/02/08 01:25:16.89 DULBP8IA.net
>>455
tasklistの結果からそのコマンドのイメージ名が消えるまで適当に表示させながら
ループさせるんじゃいけないの?
また、>>452のエラーレベルって蛇足的な処理じゃん
無くても問題ない
該当コマンドってのが自分でカスタマイズできるんならリダイレクトも不要
そのコマンドの終了時点でフラグ的なファイルに書き込めばいい
475:デフォルトの名無しさん
16/02/08 01:29:33.68 T6p//Vzm.net
>>452 さんが書いているように、ファイルを使うのが簡単かな
コマンドの最後でファイルを作り、
batでは if exist でそのコマンドができるのを待つ、なかったら timeoutで待つループ
476:デフォルトの名無しさん
16/02/08 01:30:33.89 T6p//Vzm.net
>>456
あ、ダブった
477:デフォルトの名無しさん
16/02/08 01:36:07.46 IaYL4Dgo.net
>findstrが文字数オーバーでエラーが出るサンプルがあって
もうバッチの範疇外じゃないのかな?どのWinでもって事ならWSHかPowerShellを勧めるよ
478:デフォルトの名無しさん
16/02/08 01:43:25.70 IaYL4Dgo.net
あと通常のファイル操作って言ってもそんな事になるくらいのかなりの量を処理しているならロジック自体を見直した方が良い気がする
479:デフォルトの名無しさん
16/02/08 01:46:27.75 U7IijhSa.net
title 処理中です。ウィンドウは絶対に閉じないでください。
echo 処理中です。ウィンドウは絶対に閉じないでください。
でいいじゃん
ちょっと応答不能になっただけで速攻ウィンドウ閉じる奴って
結構多いけど理解に苦しむ
480:446
16/02/08 21:23:57.31 4qV7ShMX.net
>>456-461
問題のコマンドについて、今まで標準エラー出力から文字列を抽出していたけど、
環境変数でファイルパスを別途加える事でログをファイルに出力できることがわかったので、
コマンドの処理は通常通りおこなって(コンソールに経過他の情報が表示される)、
その終了後、改めてログファイルから文字列を読み込んで環境変数代入を処理することで、
経過情報を表示しながら for /F や tee と同じ目的を数行で達することが出来たよ。
コマンド実行と環境変数代入を同時に処理するということにこだわりすぎたかな。
みなさん、お付き合いいただき、どうもありがとう。
481:デフォルトの名無しさん
16/02/08 21:58:26.82 aeLE2jq+.net
>>461
高度なプログラムが動き出しちゃうときあるから
482:デフォルトの名無しさん
16/02/10 23:06:13.15 rMhx/tnP.net
コピーする時 if exist であったら適当に名前変えてコピーしてたんだけど
そもそも、重複時自動的にリネームしつつコピーしてくれるちょっと便利コマンドって
どこかにありそうな気がしたので、そんなコマンド(プログラム)教えてください
483:デフォルトの名無しさん
16/02/11 01:24:38.76 xppsr9es.net
重複時、上書き?リネーム?
リネームするならコピー元?コピー先?
リネームの形式は連番?日時?
これらをコマンドラインオプションで設定出来る非対話形式なcuiコピーツールがあっても良いなって思うけど
バッチ側の少しの手間で実現出来るからわざわざ外部ツール導入するのは躊躇われるな
firefilecopyにそれっぽい設定があった気がするけど使ってたの何年も前なので覚えてないわ
484:デフォルトの名無しさん
16/02/11 10:17:29.10 E36uRHTx.net
>>465
> これらをコマンドラインオプションで設定出来る非対話形式なcuiコピーツール
まさしくそういうツールが欲しいなと思った訳でして、firefilecopy 試してみたところ
連番などの指定ができない、既にリネーム済みのものがあった時に自動的に
処理できない模様で目的に合致せず、無念
linux 系のツールならと思ってググッてみても、cp だと拡張子が維持できない suffix の
付け方になってしまうなど、調度良いのが今のところ発見できず……
485:デフォルトの名無しさん
16/02/15 13:55:49.70 wQ6idclh.net
”コマンドラインでファイルやフォルダを名前に「コピー (n) ~ 」を付けて複製する。”
でぐぐって見つかるバッチを条件が合致した際にcallするとか
スクリプトだからリネーム条件なんかはカスタマイズも可能かと
486:デフォルトの名無しさん
16/02/15 14:13:15.78 NpLlCTmp.net
ffcかなんかは結構細かいコマンドラインオプションを受け付けてたから
それでコピーしつつログ解析して必要ならナンバーか日付つけてのリネームコピーするとかやればいいんじゃないの
487:459
16/02/15 21:36:25.85 CcVUGHWP.net
気を使わせて申し訳ありません
現状として、コピーする時に同名ファイルがある時には名前を変えてコピーするのは
既にバッチファイルで実現していて、同じことを手軽に便利に出来る単独の CUI な
ツール、プログラムがあれば、というよりあるに違いない、と思ったのが >>464 の
質問だったわけです
488:デフォルトの名無しさん
16/02/21 22:42:20.49 LXngu2PVR
共用パソコンのユーザごとのデスクトップとマイドキュメントにある
30日前更新のファイル(docx,xlsx)の一覧をバッチで取得する方法を
ご教示ください。環境はWindows7です。
489:デフォルトの名無しさん
16/03/11 22:12:34.63 g0a/JI38.net
バッチ中のcopy file1 file2 は copy "file1" "file2" と書くべき
file1 file2が+で始まる場合 ""で囲んでいないとcopyされない
490:デフォルトの名無しさん
16/03/15 00:41:28.28 8utBFAR1.net
バグ技、面白ネタなどあれば投下お願いします
491:騙し髪
16/03/15 01:32:32.69 ZWMv0nUc.net
>>472
これなど如何?
::←全角254文字が限界→
動く.CMD
rem /; ::0123456789ABCDEFGHIJKLMを11回書く+0 ※ 最後の0が254文字目
::0123456789ABCDEFGHIJKLM012345678・・・0
:LOOP
@ECHO;LOOP
@PAUSE
GOTO :LOOP
こちらは、GOTO :LOOP で止まります。
止まる.CMD
rem /; ::0123456789ABCDEFGHIJKLMを11回書く+01 ※ 最後の1が255文字目
::0123456789ABCDEFGHIJKLM012345678・・・01
:LOOP
@ECHO;LOOP
@PAUSE
GOTO :LOOP
492:デフォルトの名無しさん
16/03/16 09:25:21.97 6gvLipIQ.net
mshta vbscript:close(Execute("CreateObject(""SAPI.SpVoice"").Speak""nurupo"""))
493:デフォルトの名無しさん
16/03/20 13:25:19.72 pvWacbTU.net
@echo off
start "" "%~f0"
start "" "%~f0"
exit /b 0
494:デフォルトの名無しさん
16/04/02 01:38:35.14 SZPhSxIw.net
BashシェルをWindowsに搭載するWindows 10大型アップデート
URLリンク(gigazine.net)
これでバッチを使う必要がなくなればいいな
495:デフォルトの名無しさん
16/04/03 19:00:37.30 +cm4a62/.net
人によってはbatで使うかも
URLリンク(www.horstmuc.de)
496:デフォルトの名無しさん
16/04/04 03:27:50.00 UUnGIXWs.net
これって正式な機能?それともラベルを悪用しただけ?
In a batch file REM at the start of a line signifies a comment or REMARK, alternatively adding :: at the start of a line has a similar effect.
Rem - Comment | Windows CMD | SS64.com
URLリンク(ss64.com)
@ECHO OFF
::
:: First comment
REM Second comment
REM
497:デフォルトの名無しさん
16/04/04 03:48:54.12 TBgct8lK.net
similar effectってあるように同様の効果があるってだ
498:け ラベル機能をコメントとして使うのは昔からある手法
499:デフォルトの名無しさん
16/04/04 03:50:07.49 TBgct8lK.net
でも俺は
::comment
というように:を2つ連ねるけどね
500:デフォルトの名無しさん
16/04/10 15:46:04.10 wyM3R/Jw.net
for /f
501:デフォルトの名無しさん
16/04/10 16:11:22.77 wyM3R/Jw.net
"
for /f "delims=" %%a in (hoge.txt) do
このコマンドで1つのファイルから交互に2つの変数に中身を代入できないでしょうか
*hoge.txt*
ほげ1
ajairhioa
ほげ2
aj329jagjal
これを%%aにはほげ1ほげ2、%%bにはajairhioa、aj329jagjalを順次代入したいです
"
502:デフォルトの名無しさん
16/04/10 17:35:06.95 DGt37MFb.net
set cnt=0
for /f "delims=" %%a in (hoge.txt) do call :sub %%a
for /f "tokens=1* delims=," %%a in (hogehoge.txt) do echo %%a %%b
pause &exit /b
:sub
if %cnt%==0 (
set LN=%1
set /a cnt+=1
exit /b
)
>>hogehoge.txt echo %LN%,%1
rem ↑ファイルに書き出す事に不都合があるなら↓
rem for /f "tokens=1* delims=," %%a in ("%LN%,%1") do echo %%a %%b
set cnt=0
503:デフォルトの名無しさん
16/04/10 18:06:01.41 DGt37MFb.net
rem 3行毎
set cnt=1
for /f "delims=" %%a in (hoge.txt) do call :sub %%a
for /f "tokens=1,2* delims=," %%a in (hogehoge.txt) do echo %%a %%b %%c
pause &exit /b
:sub
if %cnt% LSS 3 (
set LN=%LN%,%1
set /a cnt+=1
exit /b
)
>>hogehoge.txt echo %LN%,%1
set LN=
set cnt=1
504:デフォルトの名無しさん
16/04/10 20:10:23.92 R4xtJDTH.net
wsh併用だと
@if (0)==(0) echo off
for /f "tokens=1,2 delims=," %%a in ('cscript.exe //nologo //e:jscript "%~f0"^<hoge.txt') do (
echo %%a , %%b
)
goto :eof
@end
var StdIn=WScript.StdIn;
while (!StdIn.AtEndOfLine){
var s=StdIn.ReadLine();
if(!StdIn.AtEndOfLine) WScript.Echo(s+","+StdIn.ReadLine());
}
505:デフォルトの名無しさん
16/04/11 21:54:33.79 Vzz4aFRc.net
>>483-485
バッチまったくの初心者であまりわかりませんでしたがありがとうございます
なにか初心者向けで体系的に学べるサイトとかありますかね?
506:デフォルトの名無しさん
16/04/11 21:58:42.43 Vzz4aFRc.net
>>483-485
バッチまったくの初心者であまりわかりませんでしたがありがとうございます
なにか初心者向けで体系的に学べるサイトとかありますかね?
507:デフォルトの名無しさん
16/04/11 21:59:22.47 Vzz4aFRc.net
書き込んでないと思って連投してしまいましたすみません
508:デフォルトの名無しさん
16/04/11 22:40:01.79 OwO3FuPu.net
PowerShell_ISE で、やった方がいいよ
509:デフォルトの名無しさん
16/04/11 22:59:56.31 Vzz4aFRc.net
powershellはchecksum使う時くらいしか使わないんですが、powershellのほうが初心者には使いやすいのでしょうか?
510:デフォルトの名無しさん
16/04/11 23:11:45.22 kHX/TE9c.net
>>490
はい
511:デフォルトの名無しさん
16/04/12 00:30:07.81 cKwKVfMZ.net
powershellはファイル属性を変えるときだけ使っている
テンポラリー属性ってcmdからだと変更できないよね
512:デフォルトの名無しさん
16/04/12 00:31:51.05 iN7RaFvn.net
PowerShell_ISE で、
$i=0
$evenStr=''
$oddStr=''
$ary = (cat hoge.txt) -as [string[]]
foreach ($line in $ary) {
if($i % 2 -eq 0){
$evenStr += $line
}else{
$oddStr += $line
}
$i++
}
Write-Output $evenStr, $oddStr
入力
1
2
3
4
5
出力
135
24
513:デフォルトの名無しさん
16/04/12 04:11:38.82 mqOre39w.net
バッチファイル今から覚えるのは無駄すぎる
せめてvbsにした方がいい
514:デフォルトの名無しさん
16/04/12 05:40:07.79 Hl1a/qVy.net
覚えるってほど御大層なモノじゃねーじゃん
精々 %1 && >> とかの幾つかのお約束事と最初に躓くコマンドはforくらい
他のコマンドやオプションはggってリファレンス見ればいいんだし
echo pause set if for call goto start move xcopy ren del dir findstr
これだけ知ってればちょっとしたファイル操作に便利だし他に比べハードル低いよ
複雑な事をするにはバッチは向かないし制約もあるから他が良いのは間違いないけど
515:デフォルトの名無しさん
16/04/12 08:15:23.59 smwPn8rR.net
他のを覚えてからでも遅
516:くはないかな
517:デフォルトの名無しさん
16/04/12 08:40:26.31 xYAotuK9.net
ちょっと凝ったことしようとしたらいきなり面倒になったり
トラップもそれなりにあるし
わざわざ覚える言語ではないと思う
bash 並みになればまだいいんだが
518:デフォルトの名無しさん
16/04/12 10:03:04.09 W9B2ZLoA.net
今から覚えるにはちょっと…というのは解かるんだが
一番簡単なものだし、ちょこっとやる分には良いとっかかりになると思うよ
ヘルプ読むだけで十分概要はわかるしね
それから何にいくのかは、自分が何に興味あるかで決めればいい
519:デフォルトの名無しさん
16/04/12 22:44:22.00 N5k4ywKZ.net
皆さんありがとうございます
cmdは少し学んで、その後win10に向けてshellを学ぼうかなと思います
520:デフォルトの名無しさん
16/04/29 16:15:40.02 Du8RELkw.net
ワイルドカード指定で否定は出来る?
例えば「指定フォルダ以下に存在する拡張子がtxt"以外"のファイルを全て削除(サブフォルダ含む)」
みたいな事をやりたいんだけど。
521:デフォルトの名無しさん
16/04/29 21:30:07.02 nOk/Iq10.net
>>500
そういう場合は
for /f %%i in ('dir "%1" /a-d /b /s | findstr /r /i /c:".txt\>"') do del %%i
というバッチを書いて第一引数に指定フォルダを渡せばいいんじゃないの??
522:デフォルトの名無しさん
16/04/29 21:35:10.00 nOk/Iq10.net
間違えた。
for /f %%i in ('dir "%1" /a-d /b /s | findstr /r /i /v /c:".txt\>"') do del %%i
だった。
523:デフォルトの名無しさん
16/04/29 23:27:50.12 Du8RELkw.net
ワイルドカードで否定な指定は無理なのか。
ありがとう。ちょっと検討しなおしてみる。
524:デフォルトの名無しさん
16/04/30 22:24:06.87 HLsp90ue.net
>>503
ワイルドカードで否定、というより…
hoge.txt hoge.doc hoge.xls … とあったとしてだよ。
.txt 以外の拡張子を持つファイル、という指定は Linux の bash でも 1コマンドでは出来ないよ??
とりあえず、俺の知る限りのコマンドラインシェルでは出来ない。
525:デフォルトの名無しさん
16/05/01 02:14:20.07 f7rDjALb.net
除外指定と言いたいのだろうけど三国人か?
496弄れば除外設定の拡張子もサブフォルダ以下を含めるかも引数で指定出来るようになるだろうに何か問題あるの?
526:デフォルトの名無しさん
16/05/01 08:38:28.34 4tDBI2/Z.net
正規表現だと否定って言うのは普通に使うから別に違和感ないけどね
それ以前にいきなり三国人とか言い出す癖直した方がいいと思うよ
527:デフォルトの名無しさん
16/05/01 11:19:50.80 tKi6j9CT.net
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
URLリンク(twitter.com)
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
。
528:デフォルトの名無しさん
16/05/01 15:01:02.76 gt2lBnxw.net
一般的ではないが、bash他にはそれっぽい拡張があるといえばある>否定
shopt -s extglob; ls !(*.txt)
529:デフォルトの名無しさん
16/05/01 20:56:52.01 w3ycpbWL.net
>>506
それで思い出したけど、ワイルドカードにはそもそも否定、っていう概念が無いのよね。
>>508
それは知らなかったぜ…。が、やっぱ拡張であって1コマンドじゃないのね。
530:デフォルトの名無しさん
16/05/02 11:40:31.88 ZqwyA4jL.net
xcopyだと /EXCLUDE で除外したいパスを指定できるけど
そういえば他のコマンドでは無いよね。
531:デフォルトの名無しさん
16/05/09 14:25:03.70 LpHkpPcH.net
>>506
> 正規表現だと否定って言うのは普通に使うから別に違和感ないけどね
普通に使う??
否定の正規表現がどのくらい面倒臭い代物か知ってて言ってんのかよ
532:デフォルトの名無しさん
16/05/09 20:31:48.60 4hkTezx/.net
>>511
若いなお前
533:デフォルトの名無しさん
16/05/11 20:07:41.82 +ByNjd23.net
>>511
お前は正規表現の前に日本語を勉強すべき
534:デフォルトの名無しさん
16/05/15 23:09:30.40 0PD+6ouG.net
Windows10 でコマンドプロンプトの透明度(不透明度)が設定できますが
color で色を変えるように、透明度の変更をコマンドでやるには
どうすれば良いでしょうか?
535:デフォルトの名無しさん
16/06/06 05:31:09.64 /VUqLFGt.net
フォルダ内に含まれるファイル名(若いファイル名)を取得して、そのファイル名
をフォルダ名としてリネームすることはできないのでしょうか?
■フォルダ1
┣ファイル1
┣ファイル2
■フォルダ2
┣ファイル3
┣ファイル4
といったフォルダ構造があったばあい、
■ファイル1
┣ファイル1
┣ファイル2
■ファイル3
┣ファイル3
┣ファイル4
といった感じにリネームしたいんです
ヒントがあれば教えてください
536:デフォルトの名無しさん
16/06/06 05:36:07.56 mrKNlhKB.net
>>515
再帰呼び出し
537:デフォルトの名無しさん
16/06/06 05:59:54.20 JVcEODJX.net
ソフ板の libre office スレで聞いていた人かな、あっちではスレを移動するとの
断りも何もせず放置したように移動してきてるみたいだけど
別人ならごめん
結果的に同名のフォルダとなる場合のリネームのルールさえ決めておけば
for でやってもそんなに難しくはない
538:デフォルトの名無しさん
16/06/06 06:39:56.64 /VUqLFGt.net
>>516
ファイル名をフォルダ名にリネームしている、参考ページがあれば教えてもらえないですか?
>>517
別人ではないですよ。
forを使う場合は、どうやるんでしょうか?
サンプルが載ってるページがあれば教えてください
539:デフォルトの名無しさん
16/06/06 07:38:12.87 mIdKUrWt.net
>>518
こんな感じ
@echo off
for /f "delims=" %%i in ('dir /b /on /ad') do (
for /f "delims=" %%j in ('dir /b /o-n /a-d "%%~i"') do set name=%%~j
call ren "%%~i" "%%name%%"
)
フォルダ名の重複によるリネームエラーを変名してリトライするなら
上の call ren "%%~i" "%%name%%" を
set src=%%~i
call set dst=%%name%%
call :ren
の3行に代えて下を追加(引数渡しでなく環境変数渡しなのは、特殊な文字の変換をなるべく防ぐため)
goto :eof
:ren
ren "%src%" "%dst%" 2>nul
set suffix=1
if %errorlevel% equ 0 goto :eof
:loop
ren "%src%" "%dst% (%suffix%)" 2>nul
set /a suffix+=1
if %suffix% gtr 10 echo ***打ち切り***&goto :eof
if %errorlevel% neq 0 goto :loop
goto :eof
540:デフォルトの名無しさん
16/06/06 08:36:49.68 /VUqLFGt.net
↑回答ありがとうございます。自分には理解できないので
調べて読み解いて、理解できあなかったらまた質問�
541:ウせてもらいます。
542:デフォルトの名無しさん
16/06/06 12:24:37.84 /VUqLFGt.net
↑無事動作しました。
ありがとうございました。
今まで、相当に無駄な作業してました。
543:デフォルトの名無しさん
16/06/06 15:17:54.02 mIdKUrWt.net
>>521
余計なことかも知れないが、空のフォルダがあった場合に変になるのでそのフォルダはリネームしないことにすると以下のようになる
@echo off
pushd %1
for /f "delims=" %%i in ('dir /b /on /ad 2^>nul') do (
call set folder=%%~i
call :search_file
call :ren
)
popd
goto :eof
:search_file
set fname=
for /f "delims=" %%j in ('dir /b /on /a-d "%folder%" 2^>nul') do set fname=%%~j&goto :eof
goto :eof
:ren
if not defined fname goto :eof
set suffix=1
ren "%folder%" "%fname%" 2>nul
:retry
if %errorlevel% equ 0 goto :eof
ren "%folder%" "%fname% (%suffix%)" 2>nul
set /a suffix+=1
if %suffix% gtr 10 echo ***打ち切り(%folder%)***&goto :eof
goto :retry
544:デフォルトの名無しさん
16/06/06 17:00:29.53 mIdKUrWt.net
訂正
call set folder=%%~i
for /f "delims=" %%j in ('dir /b /on /a-d "%folder%" 2^>nul') do set fname=%%~j&goto :eof
↓
set folder=%%~i
for /f "delims=" %%j in ('dir /b /on /a-d "%%folder%%" 2^>nul') do set fname=%%~j&goto :eof
545:デフォルトの名無しさん
16/06/06 19:49:58.32 wj+hntm6.net
>>521
相当に無駄なスレ違いの質問はクローズしよう
スレリンク(software板:665番)
546:デフォルトの名無しさん
16/06/06 20:27:13.87 kp8pJweP.net
libre office スレのもんだけど
マルチ宣言してる奴に快く回答するとか
まじクズっすねー
547:デフォルトの名無しさん
16/06/08 21:05:04.00 rpxHmTxH.net
>>522
そこはかとなくダサい気がするのだがうまく言えなくてもどかしい。
548:デフォルトの名無しさん
16/06/08 21:09:54.69 rpxHmTxH.net
>>525
面白い課題や面白い発見自身に罪は無い。
それを提示した人間がたとえ殺人者でも、その課題や発見自身は俺は歓迎する。
もし、Libre Office の開発者の一人が殺人を犯したからといってお前は Libre Office を使うのを止めるか?
止めるのであれば非難していただいて結構。
549:デフォルトの名無しさん
16/06/08 22:04:51.84 sUmK8XFr.net
>>527
その例えはおかしいね
マルチ質問に返答するのはマナー違反って話なんだから
つーか例える必要ないでしょ
マルチ質問に答えることがマナー違反ではない理由を言えばいいだけだ
550:デフォルトの名無しさん
16/06/08 22:23:27.09 rpxHmTxH.net
>>528
> マルチ質問に返答するのはマナー違反って話なんだから
間違い。
1. マルチ投稿は迷惑かもしれないが、課題としては良問と思った。情状酌量の余地あり。
2. マルチ投稿に答えるのがマナー違反だという話は聞いたことがない。
3. 別板からわざわざ出張って「○○のもんだけど」とか言われてもシラネ。掲示板のルール無視。それこそ893まがいの行為。
551:デフォルトの名無しさん
16/06/08 22:29:07.11 rpxHmTxH.net
>>528
お前がインターネットのルールブックなわきゃねぇんだ。マナーだのなんだのごたくヌカすな。
>>522
全体的にエラー処理まわりが気になるけど、そこは置いとく。
ren じゃなくて move じゃない?ren にすごく違和感…。
552:デフォルトの名無しさん
16/06/08 22:34:56.16 sUmK8XFr.net
>>529
1. あなたがそう思うのは勝手だけどそれに対してクズと呼ばれるのは仕方ないこと
2. マナー違反を受け入れるのもマナー違反なのは当然
3. 俺に言われても知らん
あとさ、例えが例えになってないことについてどう思ってんの?
553:デフォルトの名無しさん
16/06/08 22:49:05.28 JbG4hFO7.net
わざわざ出張ってこなくていいから大人しく返ってくれ
このスレは過去を見てもわかるように、親切な人間達が回答してくれる珍しいスレなんだからさー
554:デフォルトの名無しさん
16/06/09 00:29:49.83 mVcmv6vY.net
向こうのスレ見てきて状況がわかった
マルチって言ってるけど、向こうで最後に書いてから半日経ってからこっちに書いてるじゃん
それになんだか追いだされたように見える
まあ、さよなら、を言わずに出てったのは礼儀知らずかもしれないが
そんなのは世の中にいっぱいいるんで今更事たてて言うほ
555:どじゃないな
556:デフォルトの名無しさん
16/06/09 00:38:52.14 M1aHpfX0.net
setlocal
cd フォルダ
endlocal
でせっかくcdしても元に戻ってしまう
557:デフォルトの名無しさん
16/06/09 00:56:26.88 mVcmv6vY.net
>>534
setlocalはそういうもんだから
逆に環境が引き継がれちゃったらsetlocal使う意味が無くなる
そういうことやりたかったら、
setlocal
set result=999
~
endlocal&set result=%result%&cd フォルダ
ってやると、環境変数を返すことも出来る
558:デフォルトの名無しさん
16/06/09 01:29:34.62 M1aHpfX0.net
>>535
ありがとうございます
そんな高度な技ができるとは知らなかったです
559:デフォルトの名無しさん
16/06/09 02:52:40.71 3N2Gwx2N.net
>>526
suffixとかかな
for /f "delims=" %%j in ('dir /a-d /b "%folder%" 2^>nul ^|^|goto :eof') do ren "%folder%" "%%~nj" &&goto :eof
でren出来なかった場合のみerrorlog吐くとかの方がスマートかも
まあバッチだし。。細かいとこ凝るならpsとかの方が
560:デフォルトの名無しさん
16/06/09 14:01:20.29 mVcmv6vY.net
>>537
for /f "delims=" %%j in ('dir /a-d /b "%%folder%%" 2^>nul ^|^|goto :eof') do ren "%folder%" "%%~nj" &&goto :eof
561:デフォルトの名無しさん
16/06/09 14:12:43.69 mVk0iXAO.net
> マルチ質問に返答するのはマナー違反って話なんだから
質問がマナー違反なんて話は知られてるが
返答がマナー違反なんて初めて聞いたけど、誰かソース知ってる人いる?
この人の妄想かな
562:デフォルトの名無しさん
16/06/09 16:04:09.94 Et4Ks3FV.net
こんなところで他人に何かを求めたりルールやマナーを押し付けるのは愚行
自分がレスしたきゃするし興味無いならスルー
自治厨ってのは自分の耐性の低さを尤もらしい大義名分で誤魔化しているだけに過ぎない
自治厨や創価みたいな制裁厨は荒らしと同じゴミ
563:デフォルトの名無しさん
16/06/10 08:47:12.85 7xQ2IbxD.net
>>539
返答しちゃうとマルチでいいんだ
って勘違いする奴がいるってことだろ
普通それぐらいわかると思うが...
564:デフォルトの名無しさん
16/06/12 22:53:45.89 T3khqEs4.net
>>541
普通と言われても、それを実際に文章で目にした記憶ないんだよな
ソース張れるか?妄想URLじゃなくてさ。
クロスポストマルチポストという言葉が生まれたニュースネットならまだしも。
個々のスレで関連性の無い2chだと正直どうでもいい。
ていうか今ニュースネットってどうなってるんだろ。まだあるんかな?
565:デフォルトの名無しさん
16/06/12 23:23:12.75 Dejri5g9.net
>>542
理解力ないってこと?
566:デフォルトの名無しさん
16/06/12 23:29:33.63 nN2o7Cuz.net
誰と闘ってるの
567:デフォルトの名無しさん
16/06/13 02:21:55.70 bKXy9+E3.net
マルチがマナー違反なら答えないほうが良いと思うが普通の考えだと思う
所詮はマナーだからもう終了しろ
568:デフォルトの名無しさん
16/06/16 16:19:50.79 Y8ybIIT3.net
マナー違反として問題になるならあっちこっちで
これがダメあれがダメとダメ出しのソースが出るんだよ。
マルチポストする方に関しては検索するとボロボロ出てくるだろ。
しかしこれがマルチポストに回答する事に関しては出てこんのだよな。
これの意味するところはつまりそこまで問題ではない、問題にする人はいないってこった。
回答する気が無いならしなければいいだけ。
回答した人に対してマナー違反だ回答するな等と文句付けるのは何様?筋違いだと思うね。
ぶっちゃけ俺も気にしないし。気にする人見たら今のように珍しいなあと思うな。
569:デフォルトの名無しさん
16/06/16 16:49:06.61 pl2Ydjf9.net
おまえらしつけーよ
下らないスレチネタで議論する暇があったら面白バッチネタの一つでも書きやがれ
で、PowerShellってどうよ?
570:デフォルトの名無しさん
16/06/16 17:50:03.03 dWCIrllM.net
Power Shellにはなんか食指が動かない(XP
571:使ってるんで) まあ簡単な奴以外はwsh(jscript)を使うな でも今Rubyが面白いかもって思ってる(Perlも入れたけどそっちは殆ど手付かず) .JScriptの中からScriptControlでRubyScriptの関数をCALLするとか変態的なことを試してるところ (.rbで作って、.js(.wsf)に埋め込むっていう非効率的な作業をやってる)
572:デフォルトの名無しさん
16/06/16 23:14:35.32 oJOkyOjy.net
パワーシェルは出来る事も多いし 痒いとこ(チンポじゃないよ)にも手が届くけど
なんとなくバッチ組めちゃうdosコマンドに比べたら難しく感じちゃうな
ただ複数のアプリの同時起動が簡単に出来るからそういう用途ではよく使ってる
573:デフォルトの名無しさん
16/06/17 07:01:08.70 TQ7oR46s.net
>>546
>>543
574:デフォルトの名無しさん
16/06/17 07:14:29.17 TQ7oR46s.net
>>547
書き方とかにちょっと違和感があるけど慣れればかなり使えるって感じ
特にバッチは文字列の扱いが色々面倒だからファイル名を切った張ったするようなケースだと PowerShell の方が楽
WPF 使って GUI もいけるし
575:デフォルトの名無しさん
16/06/17 14:10:51.86 ZjDSffK/.net
>>550
お前がな…
576:デフォルトの名無しさん
16/06/17 14:14:36.97 ZjDSffK/.net
個々人がマナー違反だと思うのはその人の勝手。
だが、「皆が」そうだというならお前以外の意見つまりソースを出せと。
そんなことも理解できんのね
577:デフォルトの名無しさん
16/06/17 14:45:53.78 kt8UtU4J.net
>>546
本来、内容はどうであれ、マルチポストの相手をすべきではないんだよ。
マルチポストとか思うから、マナーだとか言い出すんだろうけど、
コピペの荒らしだと思えばいいんだよ。相手にするヤツがバカだろう?
578:デフォルトの名無しさん
16/06/17 15:22:57.71 PGPlVx2O.net
いやー、そのレスでちょっとは盛り上がったじゃん
十分このスレでの意義はあったと思うよ
元のスレのofficeじゃスレ違いだとかいってハブって追い出したくせに
こっちに来たら追いかけてきてイチャモンつけるって性格悪いな
579:デフォルトの名無しさん
16/06/17 18:35:44.26 oyCWF+hy.net
>>555
そいつに関しては性格悪いなんてもんじゃないでしょ
わざわざ他スレへ出張って文句言う粘着性はガイキチ
池沼は相手にしないが吉
>>548-549
>>551
いや、おまえがスレチだろってツッコミ待ちだったんだがおまえら良い奴だな
ありがとう
既に.NET知ってる人は楽なんだろうけど一から覚えるの面倒臭くて。。
ましてやPSの為だけにとなるとなかなか重い腰が動かず
>ファイル名を切った張ったするようなケースだと
まさにこの用途なんだよね
バッチから文字列の扱いを少し便利にしてくれるくらいで良かったんだけど覚える量的に一気にハードル上がって面倒臭い
覚えてしまえば楽になりそうなのは分かってるので、ぼちぼちやってくわ
580:デフォルトの名無しさん
16/06/17 18:55:09.01 TQ7oR46s.net
>>554
まあ、そう言うこと
ググって部屋のなかにうんこするなとかの書き込みが少ないからうんこするぜ
って言うのと同じ
考える力のない奴に何を言ってもしょうがない
581:デフォルトの名無しさん
16/06/17 18:58:07.69 TQ7oR46s.net
>>556
対話で使えなくてもいい
将来を心配したことがない
なら vbs/jscript + wsh でもいいかも
582:デフォルトの名無しさん
16/06/19 09:59:28.72 rDn80OX3.net
>>557
うんこと考えてるのは実はお前だけってな
お前さん理想と現実の区別付いてないだろ?
583:デフォルトの名無しさん
16/06/19 11:27:46.12 Pvc+naRU.net
>>559
>>543
584:デフォルトの名無しさん
16/06/19 17:51:44.69 Ujr
585:NrWKl.net
586:デフォルトの名無しさん
16/06/19 20:28:17.53 N0SKT7vZ.net
> 2ちゃん初めてか?
まだこんなこと言ってる奴がいるんだなw
587:デフォルトの名無しさん
16/06/20 05:15:32.88 bz6tTT9I.net
そもそも「2ちゃん」という言い方自体、自称古参爺しか使わん
588:デフォルトの名無しさん
16/06/20 12:37:29.60 1rHeBxTu.net
ちゃんちゃん
589:デフォルトの名無しさん
16/06/20 12:56:47.33 XUIKeVkP.net
2chって言うよな
590:デフォルトの名無しさん
16/06/21 23:17:02.70 wIBHL76T.net
言うの?
発音はツーチャンネル?
591:デフォルトの名無しさん
16/06/22 03:22:26.83 UKX8/FIx.net
声には出さないけど「にちゃん」って読んでるな
書く時は2chって書くかな
592:デフォルトの名無しさん
16/06/22 08:59:59.99 ffHjJb8n.net
>>567
漏れも
593:デフォルトの名無しさん
16/06/24 01:13:29.70 buggiI8H.net
俺は教育テレビって言ってる
Eテレは馴染めん
594:デフォルトの名無しさん
16/06/24 02:23:17.48 iovZLto/.net
教育テレビは3チャンネルだと思ってたけど、
地デジは3ちゃんTVK♪というCM思い出して
違うことに気づいた。
595:デフォルトの名無しさん
16/06/27 10:51:32.41 IRTRDse4.net
dir /Q はオーナー名が長いとファイル名とくっついてしまう欠陥コマンドだった
596:デフォルトの名無しさん
16/06/27 13:44:52.16 cmd3G8BZ.net
会社のサーバに散在している.batファイルを片っ端から削除したい。いや、マジで。
URLリンク(el.jibun.atmarkit.co.jp)
597:デフォルトの名無しさん
16/06/27 13:56:09.99 YSZG9z+3.net
del /f /s /q *.bat
でよくね?
598:デフォルトの名無しさん
16/06/27 14:13:24.61 RStewB0e.net
個人用ローカルPCだけど俺も何に使ったか分からないbatファイルがそれなりに残ってるわw
1度整理したから大量ってほどではないけど
ニッチな用途だとファイル名だけでは用途を思い出せないのが難点
599:デフォルトの名無しさん
16/06/27 14:35:10.14 N5RLWdSz.net
batなんて使わなくなったら即削除してるから残ってるのはせいぜい20個程度だ
600:デフォルトの名無しさん
16/07/03 21:43:03.57 vq6Z+j1h.net
「削除した」なら許せるが、削除したい(削除できなかった)ならただの糞文
601:デフォルトの名無しさん
16/07/03 22:02:09.39 T1/0jYLy.net
読んでねーけど、したいけど出来ないって愚痴なんじゃねーの?
何に使うか分からんようなゴミを鯖に残してて勝手に消したら老害が何で消した?いつか使うかもしれんのに!って怒るとか
いつかって何だよって言う。たかがbatでアホかって老害SEあるあるネタ
602:デフォルトの名無しさん
16/07/03 22:37:12.83 CJuDkW1k.net
んー、そもそもバッチを使う(作る)人に対する人格否定、という感じのブログ
アナウンス出して全て消しゃいいじゃん、というのが率直な感想
でもやりたいのは、バッチを使う(作る)人の排除みたいだから、
社長になって独裁人事するのが一番の解決なんだろうね
603:デフォルトの名無しさん
16/07/06 01:43:37.05 j2aYQoha.net
整理整頓が出来ていればいい話
バッチに限った事じゃない
不要の見極めも難しいから
消せずに残ってゴミ屋敷が現実
604:デフォルトの名無しさん
16/07/07 00:24:13.51 WGF782sG.net
会社のサーバだとうちもバッチに限らずなんだかよく分からんのがいっぱいあったな
いらなさそうなのまとめて圧縮して1年後の日付書いてこの日まで使わなければ消すってしといた
605:デフォルトの名無しさん
16/07/07 14:56:47.42 TsrNo+6t.net
そうやってなんか対処してるなら話はわかるんだけど
うぜぇうぜぇ�
606:チて言うだけで自分では対処しないで放置ってのはもう…
607:デフォルトの名無しさん
16/08/09 17:07:41.16 j5HqbEBX.net
Windows 10のLinuxサブシステムを狙った攻撃が今後登場する可能性
URLリンク(srad.jp)
免疫力がつくまでしばらく待った方がいいのか知らん
608:デフォルトの名無しさん
16/08/14 22:50:59.47 r/0nUjHR.net
そもそもβなんだし、素人さんが手を出していい物じゃないんだけどな。
609:デフォルトの名無しさん
16/08/15 00:25:59.77 8W38K+Qq.net
まだcygwinのほうが安全ということなのかね
610:デフォルトの名無しさん
16/08/21 07:59:09.76 zhyP4GkP.net
今んとこサーバ用途は全く想定してないからさして問題にはならないだろう
最終的にはMacのポジションを目指すのだろうからそれまでに直しておけば良い
テクノロジーカンファレンスがSurfaceで埋まる日は来るか
URLリンク(www.buildinsider.net)
611:デフォルトの名無しさん
16/09/06 18:28:00.80 G35PExva.net
Windows標準のコマンドプロンプトウィンドウをタブ化できる「ConEmu」
URLリンク(osdn.jp)
多数のDOS画面でお仕事する人向け
612:デフォルトの名無しさん
16/09/06 18:51:20.42 rT4OuLmz.net
ConEmuも所詮バックグランドでcmd動かしてて、
cmd単独よりは少し便利になるものの、
元々の日本語の表示の不具合(端が切れる)を引き継いでるからなぁ。
cmd完全互換のまともなシェルはないものかねぇ。
613:デフォルトの名無しさん
16/09/07 18:29:47.35 b6UGEvRF.net
タブでまともに機能するのはすごいたぶちさんだけ
614:デフォルトの名無しさん
16/09/07 19:12:06.44 eCxhE93W.net
.BATと.CMDでは何が違うのでしょうか?
使える命令などに違いがあるのでしょうか?
教えてください。
615:デフォルトの名無しさん
16/09/08 00:57:15.94 54d0WlHM.net
>>589
違いは無いよ
DOSの時代からWin16の時代は拡張子はBATであり、
Win32の時代からMSはCMDに変えたがったみたいだが以前としてBATが主流となってるだけ
616:デフォルトの名無しさん
16/09/08 01:30:50.71 MGX2ZdyU.net
cmd は WindowsNT, OS/2 由来じゃなかったっけ?
例えば OS/2 だと bat にすると DOS互換ボックスでのバッチファイル動作で
cmd にすると OS/2 ネイティブ動作
617:デフォルトの名無しさん
16/09/08 02:06:01.27 54d0WlHM.net
>>591
そうだったっけ?
OS/2は殆ど使ったことない(さわりだけ)んで、拡張子batが動作したかどうか忘れちゃったんだけど
(暗黙の了解でcmdでしか使ってなかった)
618:デフォルトの名無しさん
16/09/08 02:15:48.19 54d0WlHM.net
ちなみに俺が使ってたOS/2はver.1.2のごく初期の奴だったんで
そもそもDOS互換とか存在してなかった気もする
619:デフォルトの名無しさん
16/09/08 03:45:32.33 Jzexm0YP.net
>>589
基本的には同じと思っていいけど厳密には少しだけ動作に違いがある
URLリンク(stackoverflow.com)
620:デフォルトの名無しさん
16/09/08 04:05:36.46 PAzqK7FZ.net
.bat 普通のバッチファイル用途。
.cmd ruby -x でrubyのコード埋め込む為に使用する。シンタックスハイライトをruby向けに設定。
という超ローカルな使い分けをしている
621:デフォルトの名無しさん
16/09/08 21:40:41.34 5x3R57hb.net
setlocal enabledelayedexpansion
set STR="aaa"
if STR=="aaa"(
STR = "bbb"
echo !STR!
)
echo !STR!
echo %STR%
遅延環境変数が分からない
622:のですが、自分の環境だと全て"aaa"になります。 どこが間違っているんでしょうか?
623:590
16/09/08 21:53:39.72 5x3R57hb.net
すいません。適当に書いてしまったのを訂正します
・"bar"が出て上手く行かないケース
@echo off
setlocal enabledelayedexpansion
set foo2="bar"
if %foo2% == "bar" (
set foo2 = "hoge"
echo !foo2!
)
pause
・"hoge"が出て上手く行くケース
@echo off
setlocal enabledelayedexpansion
set foo="bar"
if %foo% == "bar" (
set foo="hoge"
echo !foo!
)
pause
この2つの違いが分かりません。
624:デフォルトの名無しさん
16/09/08 21:58:24.35 5x3R57hb.net
自己解決しました
foo2と=の間に空白があるのが原因でした。
バッチは文字列を代入する際には空白があってはいけないのですね。
set foo2= "hoge"
としたら上手く行きました。
set /a foo2 = 10
では空白があっても行けたのですが、文字列の場合はダメなんですね。
625:デフォルトの名無しさん
16/09/09 03:51:09.43 LpeB3e0i.net
Linuxのシェルスクリプトでも、変数代入時、= の前後に、半角空白を入れられない
a=b
a = b これはダメ
こういう点が、プログラミング言語としてはクソなんだよ。
PowerShell_ise を使いな
626:デフォルトの名無しさん
16/09/09 06:34:14.46 Sx9RRTJO.net
>この2つの違いが分かりません。
そんな違いわかりたくもない
バッチファイルでif文をトラブルなく使う - Qiita
URLリンク(qiita.com)
バッチファイルでif文を使っていてハマったので、ハマらないための書き方と注意点をまとめてみた
解決方法
何も考えず必ず以下の形で書く。
if 条件 ( ←(1)
call :サブルーチン名 引数 ←(2)
) else if 条件 ( ←(3)
call :サブルーチン名 引数
) else ( ←(4)
call :サブルーチン名 引数
) ←(5)
627:デフォルトの名無しさん
16/09/10 14:10:07.42 WyiyFmBQ.net
>>597
ダブルクォート記号を意図して含めたいならそういう記述もありだろうね
だけど、純粋に文字列だけ比較したいだけなら変数名も含めてくくって、あとは判定部分で整形する方が自由度がある
set
628:デフォルトの名無しさん
16/09/10 14:14:02.54 WyiyFmBQ.net
途中で切れた?全角でリトライ
SET "foo= b a r "
IF "%foo%"==" b a r " (
IF "%foo%" == " b a r " (
のようにすれば前後の空白も含めて評価されるし、この場合どちらも同じ結果が得られる
なので、>>598の「バッチは文字列を代入する際には空白があってはいけないのですね。」は誤り
変数の文字列前後、if文のイコール記号の前後の空白の有無で意図しない比較結果になり得る記述は避けたほうがいいのは自明
環境変数の遅延展開に関しては、カッコで囲んだ複文の挙動を把握した上で適切に使う
環境変数はあとから再利用する性質上、意図しない文字や空文字になってしまうのが一番怖い
別解としては、call set "foo=hoge" があり、echo;%%foo%% などのようにパーセント記号を重ねても同じ結果が得られる
こちらは setlocal enabledelayedexpansion は不要、この方法は公式とは言えないのでユーザーのお好み次第といったところ
629:デフォルトの名無しさん
16/09/11 01:07:52.20 4x/hjQLW.net
sqlite3のコマンドラインツールでDB読込み時間を測って遊んでたら
sqlite3 hoge.db "SELECT * FROM TEST" > nul よりも
sqlite3 hoge.db "SELECT * FROM TEST" > "c:\Temp\hoge.txt" のほうが
出力完了までの時間が短かったんですが、出力をnulに捨てるのって
普通にファイルに吐くより遅くなるもんなんでしょうか。
630:デフォルトの名無しさん
16/09/11 01:24:31.36 zfXOe+JX.net
>>603
常にそうなるの?
たまたまじゃなくて?
db読み込みの時間とかが関係してきそうな気がするし
それに
631:write時間は以外に掛からないんでファイルがでかくなければnulとの差はつかない (read時間は掛かるし実行時間にかなりばらつきが出る、また2回目以降はキャッシュからになる)
632:デフォルトの名無しさん
16/09/11 02:05:36.54 zfXOe+JX.net
>>603
ちょっと試してみた
確かにnulの方が時間が掛かる
そこで、sqlite3の代わりに、type xxx.txt >yyy.txtで試してみた
やっぱりファイルに書き出すよりnulの方がはっきり時間がかかる
何故なのかは分からん、スマン
633:デフォルトの名無しさん
16/09/13 21:52:06.22 NwZGDC4j.net
コマンドプロンプトから実行して
処理しますか?(Y/N)⇒処理⇒処理完了後F3キー押すとして終了
するツールを毎日ポチらないといけないのですが
txtにYとF3を書いてリダイレクトで自動入力すれば楽にポチれる気がするんですが
F3をtxtファイルにどう書けばいいのかわかりません、助けてください
634:デフォルトの名無しさん
16/09/14 06:17:54.15 xpMA1gBQ.net
F3は無理だと思うけど・・・
635:デフォルトの名無しさん
16/09/14 08:44:57.03 f2EPB9Ji.net
>>606
uwscでやれば?
636:デフォルトの名無しさん
16/09/14 17:27:36.03 Jy6DKzEX.net
>>608
ありがとうございます
EXECでバッチファイル起動してYとF3入力してexit⇒ENTERで終了するようマクロ組みました
タイマー起動ソフトでUWSを指定時間に実行するようにしたので何もしなくてよくなりました
ありがとうございます
637:デフォルトの名無しさん
16/09/19 03:08:13.70 3gpWvjZ8.net
cmdですが
schtasksでstartコマンドがうまく使えません
/tr "start フルパス実行ファイル名"
※パスにはスペース無しです
638:デフォルトの名無しさん
16/09/19 03:34:12.50 rks5/FmO.net
>>610
cmd内部コマンドを起動するように登録するなら
"cmd /c start xxx"
だけど、単に
/tr xxx
じゃああかんの?(xxxはフルパスの実行ファイルなんでしょ?)