Создание папки с использованием файла bat


15

Мне нужно написать файл bat, который создает новую папку, используя текущую дату и время для имени папки. я придумал следующее:

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

ли этот код имеет какие-либо недостатки? Есть ли более простой или более естественный способ сделать это?

  0

Кстати, здесь создается два каталога. Использование цитат (md "% DATE% - %% i. %% j. %% k") было бы лучше. 22 фев. 092009-02-22 11:43:51

23

Вы можете использовать подстроку и встроенный% 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%" 
  0

это именно то, что я искал, этот подход кажется мне более естественным 23 фев. 092009-02-23 09:55:18

+1

Очень полезно! Хотя, следует отметить, что использование вышеприведенного кода предполагает единственный параметр: место назначения новой папки. Если вы используете это как есть, у вас будет временная папка в корне любого диска, с которого вы начали. 28 мар. 122012-03-28 18:51:11


5

Я использую эту биту

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% 

Надеется, что это помогает.

  0

Обратите внимание, что время/t не будет работать, если расширения команд отключены, но я думаю, это вас действительно не беспокоит. (См. Http://www.pc1news.com/disabling-command-processor-extensions-824.html для справки) 22 фев. 092009-02-22 11:36:19

  0

Я не очень разбираюсь в написании bat-скриптов, мне просто нужна летучая мышь, которая создает папку с текущей датой, но Спасибо за информацию. 22 фев. 092009-02-22 12:10:31

  0

Второй цикл цикла не отображает секунды на моем компьютере, потому что время/t вывод для меня всего 8:12 (без секунд). 16 янв. 122012-01-16 07:11:56


0

Вы пробовали? Ваша командная строка вызывает ошибку на моей стороне.

  0

Если вы хотите запустить его непосредственно из командной строки вместо командного файла, замените %% i на% i, тогда он будет работать. 22 фев. 092009-02-22 11:42:46

  0

Я пробовал его в файле bat. Кажется, он работает нормально. Когда вы запускаете его из командной строки, вы должны заменить %%%. for/f "tokens = 1-3 delims = :,"% i in ("% TIME%") do md% DATE% -% i.% J.% K 22 фев. 092009-02-22 11:44:11

  0

справа. спасибо schnaader и yarik. 22 фев. 092009-02-22 11:59:06


1

Я не мог получить много выше, чтобы работать, использовали оригинальную команду постеры успешно, хотя.

Вот моя версия:

для/ф "токенов = 1-3 delims =: /".. %% я в ("% DATE%") сделать набор DATESTAMP = %% я %% J% % к
@echo каталога будет с этим именем:..
@echo резервного копирования% DATESTAMP%
резервного мДом% DATESTAMP%
@echo каталога сделан, теперь идет с копированием файлов ...
@echo пожалуйста, убедитесь, что на ПК нет электронной почты или открытых документов. .
пауза
резервное копирование CD% DATESTAMP%
мкр "Общие документы"
хсору "C: \ Documents и Settings \ All Users \ Documents \ документы", "Общие документы"/E/C/I/H/Q
@echo in Documents Complete.

и т.д. :)


0

вы не просто пытались сделать новый производитель новую папку, используя дату и время, сэкономленное в new_folder_maker.bat с этим кодом

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

Вы не просто попробовали свой собственный код? Очевидно, что это не сработает, так как '% time%' содержит двоеточия, а в некоторых небольших странах дата содержит косые черты, оба недействительны в именах путей 21 мар. 122012-03-21 12:42:36

  0

Действительно ли это зависит от настроек времени и даты. 26 окт. 122012-10-26 12:02:23


0

Вот мое решение (измененная от lopkiju-х) , Он создает папку с помощью datestamp. Если папка с таким именем уже существует, добавьте к ней целое число, чтобы сделать его уникальным. Поместите это в файл .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

вы можете предоставить ресурс, который объясняет это шаг за шагом, пожалуйста? Я использовал help в командной строке, и немного трудно следовать 05 ноя. 132013-11-05 13:42:36

  0

, метка времени включает секунды. поэтому он уже биективен 27 янв. 142014-01-27 20:59:39


0

Вы можете воспользоваться GNU sh-utils использованием date.exe «s спецификаторы формата:

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

Это решение особенно важно для тех, кто с локализованных версий из Windows.

for цикл выполняется один раз, но это необходимо, так как нет более простого способа присвоить переменную значение, полученное из вывода команды.

Использовать date --help для получения полного списка спецификаторов формата.


0

это работает очень хорошо для меня

dkdir foldername 

cd foldername 

dkdir %date% %time% 

cls 

1

Причина, почему простой% времени% не работает, потому что его разделяют: что не разрешено в пакетном сценарии. Но этот должен работать нормально:

Это работает очень хорошо для меня.

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%