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ı?
Aşağıdakileri kullanarak değişkenlerdeki sembolleri değiştirebilirsiniz:
set _date=%DATE:/=-%
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.
Ç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. .
Zip some_options "archive_%date:/=-%.Zip"
/=-
, /
işlevini bir eksi işaretiyle değiştirir.
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.
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ştirirFORK/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
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>
/ 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
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.
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
%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.
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