0

バッチファイルで、ファイル名の最後に前の平日の日付を追加して、ディレクトリ内のすべてのファイルの名前を変更することはできますか?

たとえば、2012年2月25日月曜日に実行した場合、ディレクトリ内のファイル名の最後に「_022213」が追加されます。

ありがとう...

4

2 に答える 2

0

バッチのみのソリューションについては、 https://gist.github.com/DavidRuhmann/4666270を参照してください。

リンクでバッチスクリプトメソッドを使用する方法は次のとおりです。

@echo off
if /i "%Date:~0,3%"=="Sun" ( call :DaysAgo 2 ) else (
    if /i "%Date:~0,3%"=="Mon" ( call :DaysAgo 3 ) else ( call :DaysAgo 1 )
)
echo %Year% %Month% %Day%
于 2013-02-21T20:45:59.143 に答える
0

どうぞ。

@echo off
setlocal enabledelayedexpansion
echo wd = Weekday^(Date^(^), vbSunday^)>yesterday.vbs
echo if wd ^< 3 then dif = -1 - wd else dif = -1 >>yesterday.vbs
echo d = dateadd^("d", dif, Date^(^)^)>>yesterday.vbs
echo wscript.echo DatePart^("yyyy",d^) ^& " " ^& DatePart^("m", d^) ^& " " ^& DatePart^("d", d^) >>yesterday.vbs
for /f "tokens=1-3" %%I in ('cscript /nologo yesterday.vbs') do (
    set year=%%I
    if %%J leq 9 (set month=0%%J) else set month=%%J
    if %%K leq 9 (set day=0%%K) else set day=%%K
)
del yesterday.vbs
set yesterday=%month%%day%%year:~-2%
for %%I in (*) do (
    set base=%%~nI
    echo !base:~-7!| findstr "^_[0-9]*$" >NUL && set base=!base:~0,-7!
    ren "%%I" "!base!_!yesterday!%%~xI"
)

Windows バッチ スクリプトには、日付の計算を実行できるネイティブ関数はありません。ただし、VBscript には気の利いた日付演算関数がいくつかあります。DateAdd を使用すると、年、四半期、月、またはその他の間隔で加算または減算できます。「w」は稼働日を指定します。 詳細情報. 更新:どうやら「w」は、本来あるべきと思われるものを意味していないようです。計算を手動で実行するようにスクリプトが更新されました。

vbscript を .vbs ファイルにエコーし、cscript /nologo vbsfilewithforループの出力をキャプチャすることで、vbscript から借りることができます。それがどのように機能するか見てください。

次に、ピースをつなぎ合わせ[basename]_[yesterday with slashes stripped][extension]ます。

于 2013-02-21T20:37:06.630 に答える