2009-02-22 23 views
15

Necesito escribir un archivo bat que crea una nueva carpeta usando la fecha y hora actuales para el nombre de la carpeta. me ocurrió lo siguiente:Creando una carpeta usando el archivo bat

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

¿Este código tiene algún defecto? ¿Hay una manera más fácil/más natural de hacerlo?

+0

Por cierto, esto crea dos directorios aquí. Usar comillas (md "% DATE% - %% i. %% j. %% k") sería mejor. – schnaader

Respuesta

23

Se puede utilizar una subcadena y la incorporada en el% DATE% y% Tiempo% variables para hacer esto:

@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

eso es exactamente lo que estaba buscando, este enfoque parece más natural para mí – Yarik

+1

muy útil! Sin embargo, debe tenerse en cuenta que el uso del código anterior asume un único parámetro: la ubicación de destino de la nueva carpeta. Si usa eso tal como está, tendrá una carpeta con marcas de tiempo en la raíz de cualquier unidad desde la que haya lanzado. – Brown

5

utilizo este murciélago

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% 

espero que ayude.

+0

Tenga en cuenta que time/t no funcionará si las extensiones de comando están deshabilitadas, pero supongo que esto realmente no le molesta. (Ver http://www.pc1news.com/disabling-command-processor-extensions-824.html para referencia) – schnaader

+0

No sé mucho acerca de los scripts de murciélago, sólo quería murciélago que se crea una carpeta con la fecha actual, pero gracias por la información. – lopkiju

+0

El segundo bucle for no muestra los segundos en mi computadora, porque la salida time/t es solo 8:12 para mí (sin segundos). – Christian

0

¿Lo has probado? Tu línea de comando arroja un error de mi lado.

+0

Si desea ejecutarlo directamente desde la línea de comandos en lugar de un archivo por lotes, sustituir %% i con i%, entonces todo funcionará bien. – schnaader

+0

Lo probé dentro de un archivo bat. Parece que funciona bien. Cuando lo ejecuta desde la línea de comando, debe reemplazar %% con%. para/f "tokens = 1-3 delims = :," % i en ("% TIEMPO%") hacen md% DATE% -.% I% j% k – Yarik

+0

derecha.. gracias schnaader y yarik. – dirkgently

1

no pude conseguir muchos de los anteriores para trabajar, que se utiliza el comando original de carteles exitosamente sin embargo.

aquí está mi versión:

para/f "tokens = 1-3 delims =: /".. %% i en ("% FECHA%") hacer establecer DATESTAMP = %% i %% j% % k
@echo Directorio se hará con este nombre:..
copia de seguridad @echo% DATESTAMP%
copia de seguridad md% DATESTAMP%
@echo directorio fabricados, ahora proceder con la copia de archivos ...
@echo por favor, asegúrese de que la PC no tenga correo electrónico ni ningún documento abierto. .
pausa
cd copia de seguridad% DATESTAMP%
MD "Documentos compartidos"
xcopy "c: \ Documents and Settings \ All Users \ Documentos \ Documentos", "Documentos compartidos"/E/C/E/H/Q
@echo en Documentos completos.

etc :)

0

has intentado no sólo para hacer un nuevo fabricante de nueva carpeta con la fecha y la hora se guardan como new_folder_maker.bat con este código

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

_¿no has probado tu propio código? Obviamente no puede funcionar, ya que '% time%' contiene dos puntos y en algunos países menores la fecha contiene barras, ambos no son válidos en los nombres de las rutas – jeb

+0

De hecho depende de la configuración de Fecha y hora – bahrep

0

aquí está mi solución (modificado fuera de lopkiju) . Crea una carpeta usando una marca de fecha. Si ya existe una carpeta con ese nombre, agregue un número entero para que sea único. Ponlo en un archivo .bat y pasa la ruta a la carpeta principal.
Probado en 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

¿Puede proporcionar un recurso que explica este paso por paso, por favor? Utilicé la ayuda en el símbolo del sistema y es un poco difícil de seguir – Katana24

+0

la marca de tiempo incluye segundos. entonces ya es biyectivo –

0

Usted puede tomar ventaja de GNU sh-utils usando date.exe 's especificadores de formato:

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

Esta solución es especialmente importante para las personas con versiones localizadas de de Windows.

for loop se ejecuta una vez, pero es necesario ya que no hay una forma más sencilla de asignar una variable con el valor tomado de la salida del comando.

Uso date --help para la lista completa de los especificadores de formato.

0

esto funciona bastante bien para mí

dkdir foldername 

cd foldername 

dkdir %date% %time% 

cls 
1

La razón por la cual un simple% Tiempo% que no funciona es porque su separados por: que no está permitido en el procesamiento por lotes. Pero éste debería funcionar bien:

Funciona muy bien para mí.

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% 
Cuestiones relacionadas