Plik wsadowy dla DOS/Windows.

0

Rok temu odwiedził mnie kolega pracujący w TPSA i poprosił o pomoc. Chodziło mu o napisanie pliku wsadowego (lub dopisanie kilku linijek do pliku autoexec.bat) tak, by przy codziennym uruchamianiu komputera tworzył się katalog o nazwie będącej datą. Do dzisiaj mnie gnębi ten problem :] Macie jakiegoś pomysła?

0

Noo.. w końcu jakieś ciekawe pytanie na forum...

Przyznam, że siedzę od ponad godziny i mi się nie udało - mam tylko jeden problem - jak odpalić plik wsadowy aby parametrem była zawartość innego pliku. Myślałem o czymś takim:
plik.bat < type plik.txt
ale to próbuje otworzyć plik 'type' (czy mi się wydaje czy pod starszym dosem to działało?)
również zabawa ze strumieniami (|) nie dała rezultatu. Gdybym tylko przeskoczył ten problem to miałbym rozwiązanie na Twoją ciekawą zagwózdkę.

0

Gdybym tylko przeskoczył ten problem to miałbym rozwiązanie na Twoją ciekawą zagwozdkę.
Gdyby babcia... :D A tak poważnie to bardzo interesujący problem. Wiem, że jak taki mózg jak Marooned nie wymyślił to nie ma sensu próbować, ale próbowałem i doszedłem do takich samych wniosków: dałoby się gdzyby... :D

// Aha i zagwozdka się pisze

0

nie wiem jak u Was ale u mnie pod win xp jest zmienna %date% a co dalej juz mowic chyba nie musze

0

Przyznam, że siedzę od ponad godziny i mi się nie udało - mam tylko jeden problem - jak odpalić plik wsadowy aby parametrem była zawartość innego pliku. Myślałem o czymś takim:
plik.bat < type plik.txt

A nie tak po prostu:
plik.bat < plik.txt

0

nie wiem jak u Was ale u mnie pod win xp jest zmienna %date% a co dalej juz mowic chyba nie musze
Skrypt ma działać pod dosem, a jak sobie wpiszesz w konsoli w XP:help set to możesz tam przeczytać m.in.:
(...)Przy włączonych rozszerzeniach poleceń(...)

0

Sprawa jest rozwiązana w asmie w następujący sposób, ale ja potrzebuję tutaj pliku wsadowy dla DOS/Windows.

.model tiny
        .code
        org 100h

start:  jmp      poczatek





bcd2asc PROC NEAR

;**************************************************************
;* Procedura zamienia dwucyfrowe liczby zapisane w kodzie BCD *
;* na dwa znaki ASCII                                         *
;**************************************************************

        push     CX
        mov      AL,BH
        mov      AH,BH
        and      AL,0Fh
        add      AL,30h
        mov      CL,04h
        shr      AH,CL
        and      AH,0Fh
        add      AH,30h
        pop      CX
        ret

bcd2asc ENDP




;******************************
;* Poczatek glownego programu *
;******************************

poczatek:
;         mov	 AX,CS	; Zrownanie segmentow CS i DS na wypadek
;         mov	 DS,AX	; skompilowania programu do postaci EXE 
	 mov      AH,04h ; Pobranie aktualnej daty z ukladu RTC
         int      1Ah	; z plyty glownej komputera (od PC/AT wzwyz)
         jc       zakoncz	; Jesli blad to zakoncz prace
         mov      SI, offset bufor ; Do SI adres bufora nazwy katalogu
         mov      BH,CL	; Pobierz dwie ostatnie cyfry roku
         call     bcd2asc	; Zamien na znaki ASCII
         mov      byte ptr [SI],AH	; i zapisz do bufora nazwy
         mov      byte ptr [SI+1],AL
         mov      BH,DH	; Pobierz miesiac
         call     bcd2asc
         mov      byte ptr [SI+3],AH
         mov      byte ptr [SI+4],AL
         mov      BH,DL	; Pobierz dzien miesiaca
         call     bcd2asc
         mov      byte ptr [SI+6],AH
         mov      byte ptr [SI+7],AL
         mov      DX,SI	; Do DX offset bufora nazwy katalogu
         mov      AH,39h ; Funkcja tworzy katalog o nazwie w DS:DX
         int      21h	; nazwa musi byc lancuchem ASCIIZ
zakoncz: mov      ax, 4C00h	; Wyjscie do DOS-u
         int      21h

bufor   db       00h, 00h, 2Dh, 00h, 00h, 2Dh, 3 dup (00h)

end     start
0

Jesli w Windows, to moze taki skrypcik:

'plik data.vbs
set Folder = CreateObject("Scripting.FileSystemObject")

if not Folder.FolderExists("c:\"&Date()) then
	Folder.CreateFolder("c:\"&Date())
end if
0

Głupie i lamerskie wyjście, aczkolwiek kiedyś z niego korzystałem w innym celu (mój patent, Zawiercie '95 - miałem 6 lat jak to napisałem):

plik autoexec.bat:

@Echo off
if "%1"=="DATA" goto data
copy wywolaj.inc temp.bat >nul
echo. |date>>temp.bat
temp.bat %0
goto koniec
:data
del temp.bat >nul
if exist %5\readme.txt goto autoexe
mkdir %5 >nul
echo To jest plik w nowym folderze o nazwie aktualnej daty >%5\readme.txt
goto autoexe
:autoexe

rem TUTAJ PRAWDZIWA TRESC PLIKU AUTOEXEC.BAT

:koniec
echo on

plik wywolaj.inc:

@Echo off
%1 DATA 

^ ważne żeby po "DATA" była jedna spacja odstępu i żadnej nowej linii
troche latek minęło od tamtego czasu ale do dzisiaj nie umiałbym chyba wymyśleć innego rozwiązania :/ a to działa tylko pod warunkiem że polecenie "data" zwróci coś w podobnym formacie :P

0

Adamo - szacuneczek...

Uprościłem nieco Twój kod:
Plik.bat
<font color="brown">

@echo off
if not !%1 == !data goto dalej
del MakeDate.bat > nul
md %5 > nul
goto end
:dalej
copy MakeDate.inc MakeDate.bat > nul
echo. | date | find "data" >> MakeDate.bat
MakeDate.bat %0
:end
</span>

MakeDate.inc
<font color="brown">%1 data </span>
<font size="1">(oczywiście spacja na końcu)</span>

Ale jest problem:

C:>md 2005.01.07
Utworzenie katalogu nie jest możliwe

Jeśli po czystym dosem date zwraca rok jako 2005-01-07 to zadziała, ale jak będą kropki jak pod Win2k to już nic się nie poradzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1