現在の日付・時刻のディレクトリ(フォルダ)を作る

残念ながら締め切りになってしまってOkwaveには回答できませんでした。

質問 ms-dosコマンドで日付+時刻の名前でmkdir
質問者:dellxp2009
困り度: 困っています

windows-xpに標準で入っているものだけで、
ms-dosコマンドで日付+時刻の名前でディレクトリを作成する事は可能でしょうか?
1ランでなくてバッチファイルでも構いません。
日付、時刻のフォーマットは問いませんが、「/」や「:」はOS的にダメです。
秒単位(または100分の1秒単位)は欲しいです。

「20090715120000」とかです。

mkdir 日時の取得

あるいは

SET DIR_DT=日時の取得
mkdir %DIR_DT%

の日時の取得の箇所が知りたいです。

http://okwave.jp/qa5127635.html

これに対する「良回答20pt」ですが、

ちょっと長いですが、

%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%

%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%%TIME:~9,2%
でどうでしょうか。

たとえば、
MD %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%

これではダメです。午前中の午前10時までに実行してみてください!そうすればなぜだかわかります。%TIME:~0,2%に空白が入ってしまうからです。

この、%DATE:~0,4%%DATE:~5,2%%……とずらずら並べるのは個人的には好きじゃないです。見づらいし長いし。

秒単位までほしいならこんな感じですね。

set tm=%time:~0,8%
set tm=%tm: =0%
set tm=%tm::=%
set dt=%date:~-10%
set dt=%dt:/=%
md %dt%%tm%

日付や時刻を環境変数にセットしたり前日を求めたりする方法については、バッチもん研究所本館のほうに載せていますので見てください。

http://homepage1.nifty.com/jak/batch/date.html
http://homepage1.nifty.com/jak/batch/jdate.html
http://homepage1.nifty.com/jak/batch/time.html

テキストファイルに含まれる単語をカウント(集計)するバッチ

人力検索はてなより単語の出現回数を集計したいという質問。

question:1243306258

一行ごとにひとつの単語、または複数の単語が並んでいるテキストファイルがあります。
このテキストの中に含まれる単語を何らかの方法で集計し

リンゴ
イカ
カモメ
メダカ
カモメ
メジロ
ロジック
クリスマス
イカ カジキ
キンメダイ
イカ カモメ
メダカ
カジキ

リンゴ→1
イカ→1
カモメ→2
メダカ→2
メジロ→1
ロジック→1
クリスマス→1
イカ カジキ→1
キンメダイ→1
イカ カモメ→1
カジキ→1

というふうに、同じ単語が何個あったのかを把握したいと考えています。

ただしこれを実現する際の必須条件として、
「リンゴ」や「スイカ」など、こちらでひとつづつ単語を指定して集計することなく、
自動的に同じ単語を集計し、一覧として出力出来るものであって下さい。

なお可能であれば
・出力される結果は同じ単語が多い順に並べる。
・「スイカ カジキ」というスペースで区切られた単語を「スイカ」「カジキ」と個別の単語として認識し集計する。
などが出来ればうれしいです。

こちらの環境はOS:Vista、エクセル所有、レンタルサーバcoreserverが使えます。
結果が出力される形式は問いませんが、あまり複雑な手順でないことを望んでおります。


みなさんの回答では、

などがありました。

私の作ったバッチは次の通り。以前のエントリーで照会した環境変数連想配列的に使う(http://d.hatena.ne.jp/jak-san/20090308/1236501217)方法でカウント値を保持し、連想配列を取り出すのに set コマンドをfor /f で読み込む方法を使っています。

バッチファイルでも出来ますよ。締め切りに間に合わなくて残念。
list.txt が対象となるテキストファイルとします。


echo off
:------------------------------------------------------------ sample.bat
for /F "delims=" %%a in (list.txt) do call :sub %%a
for /F "tokens=2,3 delims=[]=" %%a in ('set count[') do echo %%a→%%b
exit /b

:sub
if "%1"=="" goto :EOF
set /a count[%1] += 1
shift
goto sub


結果をファイルに残すなら、sample.bat>kekka.txt とすればファイルに残ります。
echo %%a→%%b を echo %%a,%%b とすれば csv 形式になります。


締め切りに間に合わなくてコメントで回答しましたが、ポイント送信していただきました!id:matukoi さんありがとうございました。

ファイル名を一括して先頭10文字に短くするバッチ

もうだいぶ前の記事にコメントをいただいてました。

ファイル名を特定の文字までを削除したい(ファイル名の先頭から最初に見つかった特定の文字までを削除する) - バッチもん研究所 blogのコメント欄

saltvalley さんのコメント

DOS窓でファイル名を短くするバッチを考えてて、ここに辿りつきました。
ここに書かれている特定の文字まで削除、ではなくて、もっと単純に、先頭から10文字までを残して、それ以降を削除する、ということを考えてます。つまり、長いファイル名のファイルを短いファイル名にリネームしたいだけです。
もし、簡単なやり方をご存知でしたらご教示頂ければと思います。バッチの中でsedawkを使っても結構です。

ある環境変数の先頭から10文字を取り出すには、次のように記述することが出来ます。
%環境変数名:~取り出す位置(先頭が0),取り出す文字数%

set string=abcdefghijklmn
set str=%string:~0,10%
echo %str%

の結果は

C:\>set string=abcdefghijklmn

C:\>set str=%string:~0,10%

C:\>echo %str%
abcdefghij

C:\>

となります。

ファイル名の先頭から10文字までを残してそれ以降を削除する(拡張子は含みません)バッチは次のようになります。

echo off
for /F "delims=" %%f in ('dir /b') do call :sub "%%f"
exit /b

:sub
set fname=%~n1
set fname=%fname:~0,10%
ren %1 "%fname%%~x1"
goto :EOF

ファイル名を10文字まで短くすることで、他のファイルとファイル名が重複してしまうなどのエラーの回避処理は全くしてませんので、その場合は次のようなエラーが出てリネームされません。

重複するファイル名が存在するか、またはファイルが
見つかりませんでした。

更新日が本日のファイルだけをコピー(移動)するバッチ

今日更新したxlsファイルだけを移動や、コピーするにはどうしたらいいかという質問。

batファイルで質問です。 - 今日更新したxlsファイルだけを移動や、... - Yahoo!知恵袋

batファイルで質問です。hirokun19811201さん

batファイルで質問です。

今日更新したxlsファイルだけを移動や、コピーするにはどうしたら宜しいでしょうか?

C:\DATAフォルダ内で

5/12に
C:\DATA\A090512.xls
を作り、
5/11に
C:\DATA\A090511.xls
を作り、
5/10に
C:\DATA\A090510.xls
を作りました。


C:\DATA\A090512.xlsだけを

空のE:\に移動し、
空のF:\にコピーします。

move /y C:\DATA\A090512.xls E:\
xcopy /d /y C:\DATA\A090512.xls F:\

だと、毎日書き換えないといけないし、

move /y C:\DATA\A*.xls E:\
xcopy /d /y C:\DATA\A*.xls F:\

だと、いらないものも移動します。

どうしたら、いいでしょうか?

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1326136753


例ではファイル名に日付が入っていますが、入らない場合もあり得ますので、ファイルのタイムスタンプが本日のものを対象とするバッチファイルの例です。

:------------------------- todaymove.bat
@echo off
for %%F in ( C:\DATA\A*.xls ) do call :sub "%%F" %%~tF
exit /b

:sub
if not %2==%date% goto :EOF
xcopy /d /y  "%~f1" F:\
move /y  "%~f1" E:\
goto :EOF

例ではmoveが先になっていたので順序を入れ替えています。

CPUの使用率をウインドウのタイトルに表示するバッチ

つい笑ってしまったので、【.cmd】 バッチファイルスクリプト %4 【.bat】からコピペ。

808 :デフォルトの名無しさん:2009/04/21(火) 23:45:04
CPU使用率だけをウインドウのタイトルにリアルタイムで表示させたいです。


809 :デフォルトの名無しさん:2009/04/22(水) 00:37:44
:loop
title 100%
goto loop

確かに、バッチで無限ループしたら使用率100%いきますよね。でもおしい。
バッチだから

:loop 
title 100%%
goto loop 

%→%% にしないと。



ということで、コマンドプロンプトのタイトルにCPU使用率を表示させるバッチです。

echo off
:loop
for /F "delims=" %%a in ('wmic cpu get loadPercentage /value') do set %%a>NUL
title %loadPercentage%%%
goto loop

なんかタスクマネージャーの表示値と合わないのが気になりますが、負荷をかけるとちゃんと数値が上がるのでこんなもんだろうと思ってます。


追記

同じスレで次のような指摘が…。

907 :デフォルトの名無しさん [↓] :2009/05/04(月) 23:00:42
ttp://d.hatena.ne.jp/jak-san/20090302/1236003328
start shell:sendtoつかえよ

これは知りませんでした。shell:sendtoで検索してみるといろいろとありますね。

909 :デフォルトの名無しさん [↓] :2009/05/05(火) 23:02:00
ttp://d.hatena.ne.jp/jak-san/20081217/1229510807
for /f ('dir/b')つかえよ


910 :デフォルトの名無しさん [↓] :2009/05/05(火) 23:31:27
なんで?


911 :デフォルトの名無しさん [↓] :2009/05/05(火) 23:42:03
試せばわかる

リネーム対象のファイルを少しでしか試してなかったのですが、

for %%f in ("%pname%"\*) do ren "%%f" "%name%_%%~nxf"

の記述では対象となるファイルが大量になるとリネームしたファイルを再度リネームしちゃいますね。
ということで 2008-12-17 の該当箇所は修正しました。

ファイル名の置換(ファイル名の一部文字を別の文字に置き換える)

以前にもファイル名の置換についてのエントリー→(ファイル名の一部を置き換えるようなリネームの方法 - バッチもん研究所 blog) を書きましたが今回はmougでの質問。基本的にバッチファイルの構成は同じです。

(Windows XP Professional) ファイル名の置換
投稿日時: 09/03/31 11:07:13 投稿者: いちごみるく

フォルダ内に複数のファイルがあり、その複数のファイル名の一部を全て変更したいとき、置換のように一気に変更する方法はないでしょうか

http://www.moug.net/faq/viewtopic.php?t=39800&sid=5ad4abefc530b4a2844e143393e0f067

投稿日時: 09/03/31 11:17:03 投稿者: りょう

フリーソフト以外ですと、このぐらいでしょうか。
http://pc.nikkeibp.co.jp/article/NPC/20060301/231453/

投稿日時: 09/03/31 11:29:37 投稿者: いちごみるく

例えば・・・ ()→【】 2008年→2009年 等なんですが、難しいでしょうか?

と質疑が続きますが、結論としてバッチファイルで実現可能です。

例えば・・・として例示されている()→【】 2008年→2009年を実施するバッチです。

echo off
for %%f in ( * ) do call :sub "%%f"
exit /b

:sub
set fname=%1
set fname=%fname:(=【%
set fname=%fname:)=】%
set fname=%fname:2008年=2009年%
ren %1 %fname%
goto :EOF

簡単に解説しますと、for文で全てのファイルを対象にファイル名を引数にしてサブルーチン(:sub)を呼び出します。サブルーチンでは引数を環境変数 fname に代入して、変数の置換機能を使って置き換えを行っています。この置換については set /? のヘルプに記載されています。最後に rename コマンドでファイル名を置換後のファイル名にリネームしています。

ありがとうポイントがようやく1000ポイントに。

ほとんどバッチファイル関係(一部デジタルモノ関係もあるが)の回答でようやく1000ptに到達した。
回答履歴をみると、いろんなバッチファイルを作ってきたなぁと思う。
バッチ内で使っているコマンドをバッチ名にしてループする(例;ping.bat)もFAQとも言えますが、そういうのも回答していて振り返るとおもしろい。