【.cmd】 バッチファイルスクリプト %11 【.bat】 at TECH
[2ch|▼Menu]
[前50を表示]
300:デフォルトの名無しさん
15/09/19 20:11:26.20 rJvITlaV.net
>>288
ゴミが出なくなりました
ありがとうございます

301:デフォルトの名無しさん
15/09/19 21:24:39.32 qCXEI70o.net
わけがわからん
>>287でファイルcdが作られるとは思えんのだが?

302:デフォルトの名無しさん
15/09/19 21:31:23.75 CQxRgVL+.net
>290
1行目を良く見給へ

303:デフォルトの名無しさん
15/09/19 21:36:13.70 qCXEI70o.net
>>291
あれそのままbatの中身だったんか?
おれはプロンプト表示かと思ってた

304:デフォルトの名無しさん
15/09/19 23:26:27.82 kEgCjcR8.net
>>292
ぶっちゃけ作られるのはおかしい。
ただcdが作られるならcdではなくpushd


305:で移動した方が良いし また質問されるのもスレ汚ししたくないからcd削除で二重に提案した それと*desktop*は間違えで*backup*が正しいんだけどうまくいってるんだろうか?



306:デフォルトの名無しさん
15/09/20 00:43:15.75 OUcPf0J5.net
>>273
確かに、よくもまあうまく動かせたもんだ
C:\Users\ore>cd ../../
どこからのコピーかは知らんが、↑をそのままbatに書くような人間がねえ

307:デフォルトの名無しさん
15/09/20 00:46:26.96 PEdhYvSo.net
>>293
一応それぞれの意味は調べてやったつもりではありましたのでちゃんと変更しました
あの中身は元々Cドライブで実行していたものなのですがちょっと個人理由でDドライブで実行したくなったのです
その際は元が
@echo off
cd C:\Users\ore\Desktop\test
for /R %%d in (backup) do rd /s /q "%%d"
で問題なかったので試行用にエコー消してDドライブに移動するのを追加しただけ、のつもりでした
お蔭さまで無事解決しましたしこれ以上はスレ汚しにもなるかと思われますのでご報告までに
改めてありがとうございました

308:デフォルトの名無しさん
15/09/26 20:40:09.22 sjK3MFI2.net
質問させてください。かなり初心者なので申し訳ないのですが。
バッチファイルから、PDF印刷するツールをつくりましたが、不具合があります。
解決方法を教えて頂けないでしょうか。

現象:
PDFファイルをコマンドラインから印刷する際、印刷中のファイルを非表示とする引数 /h を使用しているにも関わらず、
印刷中のファイルが画面上に数秒表示されてしまう。

発生条件:
ツールと関係なくユーザがAdbobe ReaderからPDFファイルを開き、ウインドウを最大化した上でAdobe Readerを終了。
そののち、ツールを使用してコマンドから印刷すると、引数 /h があるにも関わらず印刷中のファイルが画面上に数秒表示されてしまう。
なお、ウインドウの最大化を解除して上でAdobe Readerを一旦終了させ、そのあとにツールを使って印刷すると印刷対象ファイルは画面上に現れなくなる。
しかし毎回、ツールを使うユーザにこの操作をやってもらうのは負担なので、コマンドの書き方を変えることでバグが出ないようにしたい。

コマンド:
START ACRORD32.EXE /p /h /l %%f
・forを使用した繰り返し構文の中に上記のコマンドを入れており、%%fの変数は事前に変数に格納したファイルパスとファイル名となります
・各引数については、/p は印刷の実行、/h はウインドウの最小化、/lは印刷ダイアログの非表示

309:デフォルトの名無しさん
15/09/26 22:30:11.72 HzL2ulcE.net
バッチの不都合じゃなくてソフトウェアの問題だろ
問題が分かってるのにこのスレに書き込むとは
初心者って怖いな
見たくないなら/min使え

310:デフォルトの名無しさん
15/09/26 23:03:22.25 vRcULbaf.net
>>296
こっちの環境はAcrobat Readerが最新じゃないので多少違うかもしれないが、
/pが指定されるとどうも読み込み完了までは表示されちゃうようだ
また一旦文書を読み込むと前回最大化だったのが標準に戻る
だったら事前に読み込んで最大化を解除してしまえってことで
start acrord32 /h xxx.pdf
start acrord32 /p /h xxx.pdf
::と2度呼び出せば表示されない
::その後、印刷終了を3秒待って
ping -n 3 localhost
::強制終了
taskkill /f /fi "windowtitle eq xxx.pdf*"
なお、印刷終了はbatで判定可能(msinfo32とか)だろうから調べてくれ
あと、/lオプションを付けると、こちらでは印刷終了後もacrord32.exeのプロセスは残ったままになる
(タスクバーにも何処にも表示されてないけど、タスクマネージャで見るとプロセスは生きてる)
taskkill /f /fi "imagename eq acrord32.exe"
で殺せるけど

311:デフォルトの名無しさん
15/09/26 23:03:27.42 sjK3MFI2.net



312:>>297 そうですね、バッチというよりはAdobeの問題なのでしょうが、コマンドの書き方で問題を解決したく、質問しました。 /minを試してみます。 どうもありがとうございました。



313:デフォルトの名無しさん
15/09/27 00:50:27.93 fyu1n2iR.net
>>298
2回呼び出してやれば最大化が解除できたのですか?
さっそく試してみます。
どうもありがとうございます。

314:デフォルトの名無しさん
15/09/27 02:06:33.21 NGGi3SIL.net
発想を自由にスレッド作成、投稿、ソーシャルブックマークなど
使い方はお好みで。
ニューススレッドを追加! RSS配信の記事を一覧で表示!
URLリンク(fluid.twolineprj.com)
ご意見をぜひ投稿してください。

315:デフォルトの名無しさん
15/09/27 19:51:17.88 0MtmseWf.net
>>297
/minを試してみたのですが、Adobe Reader に対しては有効になりませんでした。
なおためしに、notepadやexcelに対して/minを使ってみた場合には、普通に最小化して起動してくれました。
なぜAdobeに対してはだめなのでしょうか…

>>298
2回呼び出しをやってみたのですが、最大化の解除はできませんでした。
Readerのバージョンが違うからだと思いますが…

316:デフォルトの名無しさん
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等を仕入れて専用スレでお願いします。


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

1838日前に更新/325 KB
担当:undef