フォルダ名に曜日を付けたいです。


「2007-01-30」や「2013-12-24」などの日付数字がフォルダ名になっているフォルダが、たくさんあります。2,000個くらいあります。

これらのフォルダ名に、曜日を付与したいのです。

 2013-10-04(金)
 2013-12-24(火)
 
などのイメージです。どのように処理すればスムーズ&簡単でしょうか?

当方の環境はWindows7/Proです。

ファイル名やフォルダ名を一括変更する際には、「Flexible Renamer」というソフトにお世話になることが多いです。しかし、フォルダ名を読み取って、日付を認識して、曜日を付与する...というのは無理そうでした。

私的にズバリのご回答、第1号の方には、200ptを送信いたします!

コンピュータの達人のみなさま、どうかよろしくお願いいたします!

追伸:日付の形式は全て4桁-2桁-2桁、半角数字です。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/12/20 11:05:40
  • 終了:2013/12/21 14:31:36

ベストアンサー

id:psne No.1

ぽけっとしすてむ回答回数499ベストアンサー獲得回数2742013/12/20 13:26:31

ポイント200pt

少ないフォルダ数で試したのみですから、バックアップを取ったうえで試してください。

以下を「date.bat」というファイル名で保存します。

@echo off
rem dir /b/ad
for /D %%i in (*) do  (
echo %%i
call date2.bat %%i
)
pause


続いて、以下を「date2.bat」というファイル名で保存します。

@echo off
set filedate=%1

set /a yy=%filedate:~0,4% * 1
set /a mm=%filedate:~5,2% * 1
set /a dd=%filedate:~8,2% * 1
if %mm% LEQ 2 (
set /a yy=%yy% - 1
set /a mm=%mm% + 12
)
set /a yobi=(%yy% + %yy% / 4 - %yy% / 100 + %yy% / 400 + (13 * %mm% + 8) / 5 + %dd%) %% 7
if %yobi% == 0 set yobiK=日
if %yobi% == 1 set yobiK=月
if %yobi% == 2 set yobiK=火
if %yobi% == 3 set yobiK=水
if %yobi% == 4 set yobiK=木
if %yobi% == 5 set yobiK=金
if %yobi% == 6 set yobiK=土
move %filedate% "%filedate%(%yobiK%)"

変更したいフォルダに「date.bat」「date2.bat」を置き、
f:id:psne:20131220131735p:image
「date.bat」を実行します。

f:id:psne:20131220132413p:image

参考:
http://www.atmarkit.co.jp/ait/articles/0405/01/news002.html
http://sctfarch.blogspot.jp/2013/04/dos.html

他1件のコメントを見る
id:Mugicha2004

早速のご回答、ありがとうございます。DOSのバッチですね... ムムゥ、少しハードルが高そうですが、トライしてみます。

フリーウエア等を用いて、イージーにできる方法があれば、そちらも大募集です!

2013/12/20 13:51:30
id:Mugicha2004

動作OKでした。正確に付与できたようです。

200pt送信させていただきました。ありがとうございました!

2013/12/21 14:32:15

その他の回答(2件)

id:psne No.1

ぽけっとしすてむ回答回数499ベストアンサー獲得回数2742013/12/20 13:26:31ここでベストアンサー

ポイント200pt

少ないフォルダ数で試したのみですから、バックアップを取ったうえで試してください。

以下を「date.bat」というファイル名で保存します。

@echo off
rem dir /b/ad
for /D %%i in (*) do  (
echo %%i
call date2.bat %%i
)
pause


続いて、以下を「date2.bat」というファイル名で保存します。

@echo off
set filedate=%1

set /a yy=%filedate:~0,4% * 1
set /a mm=%filedate:~5,2% * 1
set /a dd=%filedate:~8,2% * 1
if %mm% LEQ 2 (
set /a yy=%yy% - 1
set /a mm=%mm% + 12
)
set /a yobi=(%yy% + %yy% / 4 - %yy% / 100 + %yy% / 400 + (13 * %mm% + 8) / 5 + %dd%) %% 7
if %yobi% == 0 set yobiK=日
if %yobi% == 1 set yobiK=月
if %yobi% == 2 set yobiK=火
if %yobi% == 3 set yobiK=水
if %yobi% == 4 set yobiK=木
if %yobi% == 5 set yobiK=金
if %yobi% == 6 set yobiK=土
move %filedate% "%filedate%(%yobiK%)"

変更したいフォルダに「date.bat」「date2.bat」を置き、
f:id:psne:20131220131735p:image
「date.bat」を実行します。

f:id:psne:20131220132413p:image

参考:
http://www.atmarkit.co.jp/ait/articles/0405/01/news002.html
http://sctfarch.blogspot.jp/2013/04/dos.html

他1件のコメントを見る
id:Mugicha2004

早速のご回答、ありがとうございます。DOSのバッチですね... ムムゥ、少しハードルが高そうですが、トライしてみます。

フリーウエア等を用いて、イージーにできる方法があれば、そちらも大募集です!

2013/12/20 13:51:30
id:Mugicha2004

動作OKでした。正確に付与できたようです。

200pt送信させていただきました。ありがとうございました!

2013/12/21 14:32:15
id:freemann No.2

freemann回答回数309ベストアンサー獲得回数502013/12/20 17:48:59

ポイント100pt

PowerShellで以下のプログラムを実行すればできます。

実行する場所は、目的のフォルダが置いてある場所です。

$r1 = Get-ChildItem | where{ $_.psiscontainer -eq $true} | where{ $_.Name -match "[-0-9]+"}

foreach($i in $r1)
{
	$d = [datetime] $i.Name
	switch ($d.dayofweek)
	{
		"sunday"{
			$fn = $i.Name + "(日)"
		}
		"monday"{
			$fn = $i.Name + "(月)"
		}
		"tuesday"{
			$fn = $i.Name + "(火)"
		}
		"wednesday"{
			$fn = $i.Name + "(水)"
		}
		"thursday"{
			$fn = $i.Name + "(木)"
		}
		"friday"{
			$fn = $i.Name + "(金)"
		}
		"saturday"{
			$fn = $i.Name + "(土)"
		}
	}

	$i | Rename-Item -NewName $fn
}

dir

id:Mugicha2004

PowerShellは経験がありませんでした。ps1ファイル?に記述して実行してみましたが、エラーで動きませんでした...

今後の参考になりそうですので、100ptを送信させていただきました。ありがとうございました!

2013/12/21 14:33:05
id:rouge_2008 No.3

rouge_2008回答回数594ベストアンサー獲得回数3512013/12/20 23:54:44

ポイント100pt

フリーウェアを使う方法です。
「Flexible Renamer」には作成日時や更新日時などのファイル・フォルダの日付を元にファイル名を変更する機能があります。

【準備】
フォルダの作成日時または更新日時がフォルダ名と違う場合は、事前に「FNCVT」で作成日時または更新日時を変更しておきます。

・FNCVT
http://www.vector.co.jp/soft/win95/util/se230280.html

・作者サイト
http://www.k3.dion.ne.jp/~jed/
※作者サイトでは少し新しいバージョンが配布されています。

準備1.「対象指定方式」に「指定ディレクトリ下の変換」を選択し、「ディレクトリ参照」ボタンで対象パスを設定します。
※「対象設定」の「ディレクトリも対象」「ディレクトリのみを対象」にチェックを入れます。
※「サブディレクトリ内も対象にする」「指定ディレクトリ自身も対象」は必要でしたら適宜チェックを入れます。
※「対象ファイルワイルドカード指定」で「20*」と入力すると、日付のディレクトリに絞る事ができると思います。
※「FNCVT - 対象一覧」ウィンドウを確認しながら設定してみてください。(開いていない場合は「対象ファイル一覧の表示」にチェックを付けると表示されます。)

準備2.「日時変換」タブを表示して、「作成日時」または「更新日時」のどちらか1つを「ファイル名を基にした日時」を選択します。
※「ファイル名を基にする場合のファイル名形式」で「日付」で「YYYYMMDD」、「時間」で「なし」を選択します。(※「-(ハイフン)」を無視して日時判定するようです。)

準備3.「プレビュー」にチェックを付けたまま、「変換開始」ボタンを押します。
※「変換プレビュー」画面が起動するので、「日時変換」で作成日時または更新日時の変換予定を確認し、良ければ「変換開始」を押して実行します。


※「FNCVT」にも日時からのファイル名変更機能はありますが、フォルダを対象にする事はできないようでしたので、「Flexible Renamer」を利用します。


【フォルダ名変更 - 曜日付加】

1.「フォルダ指定」を選択して、「リネーム」タブを表示します。

2.「ターゲット」の「フォルダ」にチェックを入れます。
※「フィルタ」は空欄にするか「*」を入力します。
※「サブフォルダ以下も対象」は適宜チェックを入れます。

3.次のaまたはbのどちらかで設定します。(指定ディレクトリ以下に対象フォルダ以外のフォルダもある場合は、bで実行した方が良さそうです。)

a.「高度なリネーム」のチェックを外します。
※「連番や文字列の追加」の「文字列(日時)を末尾からn文字目に追加」を選択します。
※「位置」を「0」に指定し、「追加文字列」に「 (\a)」を入力します。

b.「高度なリネーム」のチェックを入れます。
※「ワイルドカード」または「正規表現」にチェックを入れます。
「検索」欄にワイルドカードの場合「20*」、正規表現の場合「^[\d]{4}-[\d]{2}-[\d]{2}$」を入力します。
「置換」欄に「\0 (\a)」を入力します。

4.リネーム方式(?)に「リネーム」を選択します。(※「別フォルダにコピー&リネーム」など任意で選択して大丈夫です。)

5.「オプション」を押して「タイムスタンプ」→「更新日時をタイムスタンプとして使う」または「作成日時をタイムスタンプとして使う」のどちらかを選択します。(ファイル名に合う方(※「FNCVT」で変更した方)を選択します。)

6.一覧で「新しい名前」の表示を確認し、良ければ「リネーム」(※「コピー」または「移動」)ボタンを押して実行します。

id:Mugicha2004

フォルダ自体のタイムスタンプをいじってから、Flexible...という流れは、思いつきませんでした。

今後の参考になりそうですので、100ptを送信させていただきました。長文のご回答に100ptで恐縮ですが...

ありがとうございました!

2013/12/21 14:34:26
  • id:psne
    > PowerShellは経験がありませんでした。ps1ファイル?に記述して実行してみましたが、エラーで動きませんでした...

    Windows PowerShell (以下、PowerShell)は、初期状態ではセキュリティ対策の為、直接実行できないようになっています。
    管理者としてPowerShellのコンソールを起動させて、直接起動できるように設定を変更します。
    詳しくは、PowerShellの解説ページをご覧ください。
    http://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner05.aspx

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません