it-swarm.asia

Windows komut satırı: adında geçerli tarihe sahip bir dosya oluşturun

Bir toplu iş komut dosyasından bir Zip dosyası oluşturmaya çalışıyorum. Archive_.Zip gibi adlandırılmaya ihtiyacım var.

Ne yazık ki, bu eğik çizgilerden dolayı y/m/d gibi biçimlendirilmiş tarih içeren sistemlerde çalışmaz:

Zip some_options "archive_%DATE%.Zip"

%DATE% değişkeni gibi bir şeye genişler

Mon 09/28/2009

Gnuwin32 paketine erişime sahibim, böylece boşlukları ve eğik çizgileri kesik çizgilerle değiştirmek için sed kullanabilirim. Sorun, Zip arşivinin dosya adını oluşturmak için sed çıktısını nasıl kullanırım?

Unix'te (bash), bir komutu yerine değerlendirmek için geri tırnaklar kullanılabilir ve çıktısını başka bir komutta kullanabilirsiniz:

Zip [...] archive_`echo %DATE% | sed -e s/.../.../`.Zip

Windows'ta benzer bir şey var mı?

Belki de değişkeni sed değerinin döndürülen değerine ayarlamanın ve bunu dosya adını oluşturmak için kullanmanın bir yolu var mı?

19

Aşağıdakileri kullanarak değişkenlerdeki sembolleri değiştirebilirsiniz:

set _date=%DATE:/=-%
27
Christopher

Ben her zaman kullanırım:

For /f "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDate=%%a%%b%%c%%d

O zaman CDate Sat02182012 olacaktır. Daha sıralanabilir hale getirmek için CDate değerini %% d - %% b - %% c olarak ayarlamayı istiyorsanız, 2012-02-18

For /f "tokens=1,2 delims=:" %%f in ('time /t') do set CTime=%%f%%g

Tarih ve saati klasör/dosya dostu yapmak.

5
släcker

Çok benzer bir soruya cevap yazdım burada . Tarlalardaki tarihin bölünmesi, harrymc'in cevabındaki birkaç satır yerine 1 satırda yapılır.

İlginç olan kısım:

@echo off
for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd=%%k%%j%%i
echo Date: %yyyymmdd%

Ve uyarı hala geçerlidir:

Uyarı : tarihin biçimi (yyyymmdd = %% k %% j %% i), bölgesel ayarlarınıza bağlıdır. Fransız tarih biçimini (gg/aa/yyyy) kullandığım için, "%% k %% j %% i" kodunu kullanmam gerekiyor (%% i = gün, %% j = ay, %% j = yıl).

Bölgesel ayarlarınız ABD stiline (mm/gg/yyyy) ayarlanmışsa, "%% k %% i %% j" (%% i = ay, %% j = gün, %% j = yıl) kullanmanız gerekir. .

4
Snark
Zip some_options "archive_%date:/=-%.Zip"

/=-, / işlevini bir eksi işaretiyle değiştirir.

3
Theo

Bu oldukça korkunç kod biraz istediğinizi gibi bir şey yapmalı

move "Filename.txt" "Filename%date:~6,4%%date:~3,2%%date:~0,2%_%Time:~0,2%%Time:~3,2%%Time:~6,2%.txt"

Dosya adını uygun şekilde değiştirirseniz.

2
Col

Sorunuz Windows olarak etiketlendiğinden eski güzel .bat dosyalarında çalışan bu çözümü buldum:
"MMDDYYYY biçiminde geçerli tarihi almak için Windows Toplu İş Dosyası (.bat)" ,
ve muhtemelen davanıza uyarlanabilir:

yankılanmak
@ REM Seamonkey’in hızlı tarih grubu (MMDDYYYY formatı)
@ REM% tarih değişkenini ayarlar
@ REM İlk önce ay, gün ve yılı mm, dd, yyyy formatlarına böler ve daha sonra MMDDYYYY olarak birleştirir

FORK/FOR “TOKENS = 1 * DELIMS =” %% A IN (’DATE/T’) CDATE AYARLA = %% B
FOR/F “TOKENS = 1,2 eol =/DELIMS = /” %% A IN (’DATE/T’) AYARLA mm = %% B
FOR/F “TOKENS = 1,2 DELIMS =/eol = /” %% A IN (’% CDATE%’ eko) DO SET dd = %% B
FOR/F “TOKENS = 2,3 DELIMS = /” %% A IN (ec echo% CDATE% ’) DO SET yyyy = %% Bv vSET tarihi =% mm %% dd %% yyyy%

bu,% date değişkenini bugünün tarihi olarak MMDDYYYY biçiminde ayarlayarak başka bir şey yapmaz, böylece daha sonra komut dosyasında çağrılabilir.

Düzen
Daha iyi bir sözdizimi bulundu. Randevumun bugün "Pzt 28/09/2009" olduğu düşünülürse:
gün ayarlandı =% Tarih: ~% 0,2
ayarlanan ay =% Tarih: ~% 7,2
ayar yılı =% Tarih: ~% 10,4

2
harrymc

gnuwin32-'date 'ile birlikte saf cmd.exe sürümü:

%> for /F "usebackq" %d in ( `date.exe +"%y%m%d"` ) do Zip archive_%d.Zip <folder>
2
akira

/ F "belirteçleri = 1,2,3,4,5 sınır = /." İçin% 'a bir (' tarih/T ') CDate =%% d - %% b - %% c

@ echo veri =% CDate%

Bu, şu anda en yaygın olan Yıl-Ay-Günündedir

1
Buffme

Sanırım, eğer herkesin parçalarını birleştirirseniz, sizin için işe yarayan bir şey alırsınız. Bu, bana performans izleyiciden bir tetikleyiciye yanıt olarak çalışan işlemlerin anlık görüntüsünü vermek için bir Windows 2003 sisteminde:

@echo off
For /f "tokens=1,2,3,4,5 delims=/. " %%i in ('date /t') do set CDate=%%k%%j%%i
For /f "tokens=1,2 delims=:" %%f in ('time /t') do set CTime=%%f%%g
tasklist /fo table >tasklist%CDate%%CTime%.txt

Çıktı dosyası sınırlayıcı içermeyen bir dizede adlandırılır.

1
Anton Liebscher

cscript + vbasic kullanmaya ne dersiniz:

WScript.Shell.run "Zip archive_" & DatePart("yyyy", Now) & "_" & DatePart("m", Now) & "_" & DatePart("d", Now) & ".Zip " & WScript.arguments(0)

üzerinden ara

cscript /nologo Zip_it.vbs
1
akira

%DATE% veya date /t çıktısını kullanan herhangi bir çözüm, kullanıcının bölgesel ayarlarını değiştirdiyse çözülebilir. Örneğin, "short date" formatımı "yyyy-MM-dd" olarak ayarlıyorum, bu yüzden %DATE%"2012-02-18" 'a eşit, ve date /t aynı çıktıyı veriyor. (Bu, Windows 7 içindir; Windows'un önceki sürümleri için aynı olduğunu tahmin ediyorum.)

Bir toplu iş dosyası oluşturun ve ardından yürütün.

GNU date komutunu kullandığınız için, şöyle bir şey yapabilirsiniz:

C:\path\to\gnu\date "+Zip some_options archive_%Y-%m-%d.Zip" > tmp.bat
call .\tmp.bat

tmp.bat şöyle bir şey içerecektir:

Zip some_options archive_2012-02-18.Zip

Bunun mevcut dizinde bir sorun olabilecek tmp.bat oluşturduğunu unutmayın; %TEMP%\tmp.bat öğesini oluşturmak daha iyi olabilir. Daha sonra dosyayı da kaldırmadım; Bunu yapmak yeterince kolay.

date +FORMAT, date komutunun çıktı biçimini, printf biçim dizgisine benzer şekilde belirlemenizi sağlar; Detaylar için coreutils tarih belgeleri bakınız. Biçim isteğe bağlı metin içerebilir, bu nedenle bu durumda sed kullanmanıza gerek kalmaz.

1
Keith Thompson
Zip [...] archive_`echo %DATE% | tr / -`.Zip

Çalışmalı.

Öte yandan - belki de date komutunu kullanabilirsiniz (Windows'u bilmiyorum). Eğer evet ise, o zaman sadece yapın:

Zip [...] archive_`date +'%Y-%m-%d'`.Zip
0
user7385