web-dev-qa-db-ja.com

batファイルを使用したフォルダの作成

フォルダー名に現在の日時を使用して新しいフォルダーを作成するbatファイルを作成する必要があります。私は次のことを思いつきました:

for /f "tokens=1-3 delims=:," %%i in ("%TIME%") do md %DATE%-%%i.%%j.%%k

このコードに欠陥はありますか?より簡単で自然な方法はありますか?

16
Yarik

これを行うには、部分文字列と組み込みの%DATE%および%TIME%変数を使用できます。

@echo OFF

:: Use date /t and time /t from the command line to get the format of your date and
:: time; change the substring below as needed.

:: This will create a timestamp like yyyy-mm-dd-hh-mm-ss.
set TIMESTAMP=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%-%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%

@echo TIMESTAMP=%TIMESTAMP%

:: Create a new directory
md "%1\%TIMESTAMP%"
24
Patrick Cuff

私はこのバットを使います

for /F "tokens=1-4 delims=. " %%i in ('date /t') do (
set Day=%%i
set Month=%%j
set Year=%%k
)

for /F "tokens=1-4 delims=: " %%i in ('time /t') do (
set Hour=%%i
set Minute=%%j
set Second=%%k
)


md %1\%Year%-%Month%-%Day%

それが役に立てば幸い。

6
lopkiju

単純な%time%が機能しない理由は、バッチスクリプトでは許可されない:で区切られているためです。しかし、これはうまくいくはずです:

それは私にはとてもうまくいきます。

Rem Get Day,Mth & Year from %Date%
set Day=%Date:~0,2%
set Mth=%Date:~3,2%
set Yr=%Date:~6,4%
REM Get Hour and Min from %Time%
set Hour=%Time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
set Min=%Time:~3,2%

mkdir %date%-%hour%.%min%
1
Rune Pedersen

私は上記の多くを機能させることができませんでしたが、元のポスターコマンドをうまく使用しました。

これが私のバージョンです:

/ f "tokens = 1-3 delims =:/" %% i in( "%DATE%")の場合、DATESTAMP = %% i。%% j。%% kを設定します
@ echoディレクトリは次の名前で作成されます:
@ echo backup。%DATESTAMP%
md backup。%DATESTAMP%
@ echoディレクトリが作成されました。ファイルのコピーを続行しています...
@ echo PCで電子メールやドキュメントが開かれていないことを確認してください。
一時停止
cd backup。%DATESTAMP%
md "共有ドキュメント"
xcopy "c:\ documents and settings\all users\documents\documents" "Shared Documents"/E/C/I/H/Q
@ echo in Documents Complete。

など:)

1
HaydnWVN

これが私の解決策です(lopkijuから変更)。日付スタンプを使用してフォルダを作成します。その名前のフォルダがすでに存在する場合は、整数を追加して一意にします。これを.batファイルに入れ、親フォルダーへのパスを渡します。
Windows 7 Home Premium x64でテスト済み。

REM Create a folder using the current date.  If such a folder already exists, append a number to make it unique.
@ECHO OFF
for /F "tokens=2-5 delims=/ " %%i in ('date /t') do (
set Day=%%j
set Month=%%i
set Year=%%k
)

set Path=%~1\%Year%-%Month%-%Day%
set /a inx=2

:LOOP
IF NOT EXIST "%Path%" GOTO CREATE
set Path=%~1\%Year%-%Month%-%Day% (%inx%)
set /a inx+=1
if %inx% gtr 9 goto :END REM Eh, giving up.
goto LOOP
:END

:CREATE
md "%Path%"
:END
0
mhenry1384

date.exeの形式指定子を使用して GNU sh-utils を利用できます。

for /f "delims=" %%a in ('date.exe +%%Y-%%m-%%d.%%H-%%M') do @set dd=%%a
md %dd%

この解決策は、Windowsのローカライズ版のローカライズ版を使用している場合に特に重要です。

forループは1回実行されますが、コマンドの出力から取得した値を変数に割り当てる簡単な方法がないため、このループが必要です。

形式指定子の完全なリストについては、date --helpを使用してください。

0
bytebuster

これは私にはかなりうまくいきます

dkdir foldername

cd foldername

dkdir %date% %time% 

cls
0
ryan vigus

このコードでnew_folder_maker.batとして保存された日付と時刻を使用して新しい新しいフォルダメーカーを作成しようとしただけではありませんか

:start
@echo off
md new_folder_%date%_%time%
exit
0