Newsgroup: it.comp.os.dos
Titolo: Re: Come sovrascrivere in base alle dimensioni del file?

predefiniti dall'utente?
ATTENZIONE, QUESTO FUNZIONA SOLO CON FILE DI DIMENSIONE MASSIMA DI 255
BYTE! E' da modificare il codice per file più grandi di tale limite.
Se vuoi puoi farlo liberamente, basta fare un ciclo ed utilizzare
registri a 16/32 ecc... bit a seconda. Può essere un buon inizio.
Ecco il batch:
*****
@echo off
if "%1"=="" goto fine
if "%2"=="" goto fine
if not exist %1 goto fine
if not exist %2 goto fine
echo.A F0>deb
echo.mov dl, cl>>deb
echo.mov ah, 02>>deb
echo.int
 21>>deb
echo.int
 20>>deb
echo.>>deb
echo.g = F0>>deb
echo. q>>deb
echo.A E0>deb2
echo.mov bl, [100]>>deb2
echo.mov dl, [103]>>deb2
echo.mov ah, 4C>>deb2
echo.xor al, al>>deb2
echo.cmp bl, dl>>deb2
echo.jbe F2>>deb2
echo.mov al, 1>>deb2
echo.int
 21>>deb2
echo.>>deb2
echo.g = E0>>deb2
echo.q>>deb2
type deb | debug %1|find /V " " >test
type deb | debug %2|find /V " " >>test
type deb2 | debug test>nul
if errorlevel 1 goto sost
rem Non sostituisci
goto fine
:sost
rem Sostituisci
copy %1 %2 /Y>nul
:fine
if exist deb del deb
if exist deb2 del deb2
if exist test del test
*****
prende due parametri il file di origine e quello di destinazione.
prog fileorigine filequellodasostituiresepiùpiccolo
Puoi utilizzarlo per un blocco di file con il seguente comando:
for %f IN (*.txt) DO command /C sost percorsoorigine%f
percordodestinazione\%f

 registri a 16/32 ecc... bit a seconda. Può essere un buon inizio.
[CUT]
Ti ringrazio molto per l'aiuto. Proverò il tutto e chissà se riuscirò a 
creare in qualche modo una GUI per questo script.
-- 
-
Mauro - ICQ 427762 - MSN 
mau...@hotmail.com
Forum utenti Fastweb/Netsystem -> 
http://www.assitecforum.com
Il primo sito sulla locomotiva E636 -> 
http://www.e636.it
 

creare in qualche modo una GUI per questo script.
Eccolo qua.
Purtroppo c'è un bug che si verifica quando un byte della dimensione
ha valore '9' che corrisponde a tabulazione. Questo carattere viene
interpretato e trasformato in un blocco di spazi.
------------
@echo off
if "%1"=="" goto fine
if "%2"=="" goto fine
if not exist %1 goto fine
if not exist %2 goto fine
echo.A E0>deb
echo.mov ah, 02>>deb
echo.mov dl, cl>>deb
echo.int
 21>>deb
echo.mov dl, ch>>deb
echo.int
 21>>deb
echo.mov dl, dl>>deb
echo.int
 21>>deb
echo.mov dl, dh>>deb
echo.int
 21>>deb
echo.int
 20>>deb
echo.>>deb
echo.g = E0>>deb
echo.q>>deb
echo.A E0>deb2
echo.mov ah, 4C>>deb2
echo.mov cx, 4>>deb2
echo.mov bx, cx>>deb2
echo.mov dh, [bx+1F0]>>deb2
echo.mov dl, [bx+320]>>deb2
echo.xor al, al>>deb2
echo.cmp dh, dl>>deb2
echo.jb FD>>deb2
echo.cmp dh, dl>>deb2
echo.ja FB>>deb2
echo.loop E5>>deb2
echo.mov al, 1>>deb2
echo.int
 21>>deb2
echo.>>deb2
echo.g = E0>>deb2
echo.q>>deb2
type deb | debug %1>test
type deb | debug %2>>test
type deb2 | debug test>nul
if errorlevel 1 goto sost
goto fine
:sost
copy %1 %2 /Y>nul
:fine
if exist deb del deb>nul
if exist deb2 del deb2>nul
if exist test del test>nul
------------


Risolto il problema!
---------------
@echo off
if "%1"=="" goto fine
if "%2"=="" goto fine
if not exist %1 goto fine
if not exist %2 goto fine
echo.A C0>deb
echo.mov ah, 6>>deb
echo.ret>>deb
echo.mov ah, 2>>deb
echo.mov dl, cl>>deb
echo.cmp dl, 9>>deb
echo.jnz CF>>deb
echo.call C0>>deb
echo.int
 21>>deb
echo.mov ah, 2>>deb
echo.mov dl, ch>>deb
echo.cmp dl, 9>>deb
echo.jnz DD>>deb
echo.call C0>>deb
echo.int
 21>>deb
echo.mov ah, 2>>deb
echo.mov dl, bl>>deb
echo.cmp dl, 9>>deb
echo.jnz EB>>deb
echo.call C0>>deb
echo.int
 21>>deb
echo.mov ah, 2>>deb
echo.mov dl, bh>>deb
echo.cmp dl, 9>>deb
echo.jnz F9>>deb
echo.call C0>>deb
echo.int
 21>>deb
echo.int
 20>>deb
echo.>>deb
echo.g = C3>>deb
echo.q>>deb
echo.A E0>deb2
echo.mov ah, 4C>>deb2
echo.mov cx, 4>>deb2
echo.mov bx, cx>>deb2
echo.mov dh, [bx+34B]>>deb2
echo.mov dl, [bx+5D6]>>deb2
echo.xor al, al>>deb2
echo.cmp dh, dl>>deb2
echo.jb FD>>deb2
echo.cmp dh, dl>>deb2
echo.ja FB>>deb2
echo.loop E5>>deb2
echo.mov al, 1>>deb2
echo.int
 21>>deb2
echo.>>deb2
echo.g = E0>>deb2
echo.q>>deb2
type deb | debug %1>test
type deb | debug %2>>test
type deb2 | debug test>nul
if errorlevel 1 goto sost
goto fine
:sost
copy %1 %2 /Y>nul
:fine
if exist deb del deb>nul
if exist deb2 del deb2>nul
if exist test del test>nul
---------------

Google non mi è di alcun aiuto.
Ho oltre venti giga di files da spostare in una cartella nella quale sono 
già
presenti altri, con il medesimo nome, ma dalle dimensioni minori. Vorrei
quindi sovrascrivere esclusivamente quelli i quali possono essere
rimpiazzati con altri di dimensioni maggiori, ma non posso cliccare su SI o
NO ad ogni richiesta di conferma.
Esempio:
File A.txt (dimensioni 13 kb) ---> deve essere sostituito da un nuovo file
A.txt di dimensione 16 kb.
File B.txt (dimensioni 28 kb) ---> non deve essere sostituito da un nuovo
file b.txt di dimensione 15 kb.
Le dimensioni sono fittizie, solo per rendere l'idea.
In pratica solo i file di dimensioni maggiori dei preesistenti dovrebbero
sovrascrivere gli stessi di dimensioni minori e non il contrario.
Esiste quindi un programma che sovrascriva automaticamente in base a criteri
predefiniti dall'utente?


 if not exist %2 goto fine
[CUT]
Non funziona, mi da errore "IMPOSSIBILE TROVARE L'ETICHETTA" o qualcosa di 
simile.
Come devo utilizzare tale batch?


Come devo utilizzare tale batch?
Ho provato con il dos di win98 SE e funziona.
Supponiamo che il programma si chiami: prog.bat
e che devi fare il controllo su un file chiamato uno.doc e il suo
corrispettivo nella directory d chiamato sempre uno.doc.
Allora fai:
prog uno.doc d\uno.doc
per farlo su un'insieme di file doc allora scrivi questo:
for %f IN (*.doc) DO command /C prog.bat %f d\%f
se lo vuoi inserire in un file batch allora scrivi:
for %%f IN (*.doc) DO command /C prog.bat %%f d\%%f

 for %%f IN (*.doc) DO command /C prog.bat %%f d\%%f
Non c'č modo di utilizzare questo script tramite interfaccia grafica? Ovvero 
se io volessi creare un eseguibile ad hoc tramite un software dedicato come 
dovrei procedere? Cosě come mi hai proposto č un'operazione veramente 
impraticabile, considerato che ho diversi giga di file da gestire.


Non c'è modo di utilizzare questo script tramite interfaccia grafica? Ovvero 
in che senso tramite interfaccia grafica?
Non riesco a capirti.
Se vuoi eseguirlo basta fare un file batch e cliccarci sopra.

 Se vuoi eseguirlo basta fare un file batch e cliccarci sopra.
1) lo script, come me lo hai passato tu, non funziona dato che viene 
visualizzato il messaggio "IMPOSSIBILE TROVARE L'ETICHETTA" o qualcosa del 
genere;
2) se fosse possibile io preferirei un'interfaccia grafica (o GUI) per poter 
meglio gestire lo script, nel senso di avere un eseguibile che permetta di 
utilizzare tale script gestendo il tutto da un'interfaccia e non da un 
semplice prompt di MS-DOS.


semplice prompt di MS-DOS.
Puoi farti un programmino, semplice semplice che chiama questo file
batch. Ma a questo punto che lo fai a fare? E' allora meglio fare un
programmino che faccia quel lavoro!

 programmino che faccia quel lavoro!
Appunto... ed era proprio quello che stavo cercando ma, ahimč, pare non 
esista nulla del genere.


esista nulla del genere.
Non dovrebbe essere difficile.
Per prima cosa è necessario sapere su qualche sistema lavori.
Quindi se lavori in winXp, Win98, linux, msdos ecc...
Poi scegli il linguaggio di programmazione (ti consiglio vivamente c o
assembler, ma anche un visual basic va bene).
Sul visual basic c'è se non sbaglio il comando LOF(handlefile), sul c
hai ftell(handlefile).
Una volta che hai la dimensione hai fatto, ti resta solo di fare il
test e di effettuare o no la copia.