View Full Version : Windows 7 - Copiare i fonts con il file batch, prompt comandi, script
Pacificobis
25-01-2011, 10:53
Gent.mi,
gradirei gentilmente un aiuto per risolvere il seguente problema su Windows 7 inerente all'installazione di alcuni fonts con il file bat.
CD FONTS
SET FONTSdir=%~dp0
COLOR F0
@ECHO Off
PROMPT $P$G
ECHO.
PAUSE
copy *.ttf c:\windows\fonts
Al termine dell'esecuzione, mi esce una finestra che mi indica che i file sono stati copiati e, andando a verificare nella cartella: C:\Windows\Fonts, noto che i fonts non sono stati copiati.
Dove sbaglio?, provando con il S.O. XP non ho nessun problema trovo i fonts copiati.
Ringrazio anticipatamente, saluto.
Domenico.
Il problema deriva dalla diversa gestione dei font in Windows 7 rispetto ad Xp.
Per essere attivo e identificato dal sistema, il nuovo font deve necessariamente essere installato; la semplice copia del file .ttf può avvenire senza problemi via batch o prompt dei comandi, ma quest'operazione non comporta l'installazione del carattere.
Cosa che invece avviene copiando il .ttf tramite Esplora Risorse, in quanto Windows riconosce c:\windows\fonts come cartella speciale e ne attiva i relativi comandi aggiuntivi per l'utente: l'installazione del font, nel caso specifico.
Per ovviare al problema, invece del comando copy da un batch puoi usare direttamente questo script (crea un file di testo, inserisci il contenuto che segue e rinomina l'estensione in .vbs):
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("CARTELLA_ORIGINE")
Set objFolderItem = objFolder.ParseName("NOMEFONT.TTF")
objFolderItem.InvokeVerb("Install")
dove CARTELLA_ORIGINE è il percorso in cui è incluso il file del carattere e NOMEFONT.TTF è il nome del file.
Ad esempio:
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("c:\Prova_Installazione")
Set objFolderItem = objFolder.ParseName("prova.ttf")
objFolderItem.InvokeVerb("Install")
Come percorso puoi inserirne anche uno di rete (INDIRIZZO_IP\cartella) ;)
PS: dato che il comando Install agisce sulla cartella Fonts, che è di sistema, apparirà la richiesta di autorizzazione del controllo account utente.
Pacificobis
02-02-2011, 16:53
Gent.mo Ezio,
non ho parola come ringraziare per l'interessamento e l'aiuto, dimostra che si può fare il trasferimento dei font dal CD al PC.
Mi scuso se continuo a disturbare fino ad ora non sono riuscito e senz'altro sono io che sbaglio e, essendo un autodidatta puoi comprendere.
Ho fatto come mi hai suggerito e mi esce la seguente finestra:
Script: .............\Pippo.vbs
Riga: 3
Carattere: 1
Errore: Necessario oggetto. "objFolder"
Codice: 800A01A8
Origine: Errore di run-time di Microsoft VBScript
Il file Vbs che lo chiamo Pippo.Vbs è
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("c:\Prova_Installazione")
Set objFolderItem = objFolder.ParseName("BRUSHSCI.TTF")
objFolderItem.InvokeVerb("Install")
Se sono due fonts basta aggiungere al 3° rigo?
Fiducioso della gradita collaborazione, saluto.
Domenico.
Ho provato la tua stessa configurazione, a me va (click sull'immagine per ingrandire):
http://www.pctunerup.com/up/results/_201102/th_20110202194435_Cattura.JPG (http://www.pctunerup.com/up/image.php?src=_201102/20110202194435_Cattura.JPG)
L'errore che hai avuto indica che lo script non riesce a trovare la cartella in cui è contenuto il font.
Assicurati di averla chiamata Prova_Installazione e che sia in C:\.
UAC (controllo account utente) è attivo (in caso contrario a volte ci sono problemi di accesso sui percorsi in C)? Da quale percorso, o disco esterno, stai avviando lo script?
Prova anche a mettere la cartella sul desktop, permetterà di aggirare eventuali restrizioni sull'utente relative ad alcuni percorsi sulla partizione di sistema:
Set objFolder = objShell.Namespace("C:\Users\TUO_NOME_ACCOUNT\Desktop\Prova_Installazione")
dove TUO_NOME_ACCOUNT è il nome dell'account da te utilizzato.
Per installare più caratteri, invece, ti basta replicare le ultime due righe:
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("c:\Prova_Installazione")
Set objFolderItem = objFolder.ParseName("BRUSHSCI.TTF")
objFolderItem.InvokeVerb("Install")
Set objFolderItem = objFolder.ParseName("BRUSHSCI-2.TTF")
objFolderItem.InvokeVerb("Install")
Set objFolderItem = objFolder.ParseName("BRUSHSCI-3.TTF")
objFolderItem.InvokeVerb("Install")
In pratica non farai altro che settare di volta in volta un nuovo oggetto e installarlo di conseguenza.
Fammi sapere, ciao! :)
Pacificobis
02-02-2011, 20:05
Gent.mo Ezio,
finalmente un passo avanti è stato raggiunto. Non puoi immaginare la soddisfazione che ho provato e a quanti forum mi sono rivolto con esito negativo.
Funziona inserendo il file .VBS sul Desktop e la cartella dei fonts in C:\.
Gradirei e mi servirebbe che sia inserito su un CD che, all'inserimento sul lettore, automaticamente dovrebbe installare; e se volessi aggiungere altri Fonts?
Mi scuso se approfitto della gentilezza e pazienza, ringraziandoti, saluto.
Domenico.
Pacificobis
02-02-2011, 21:04
Gent.mo Ezio,
faccio seguito alla mia per comunicare che funziona anche inserendo altri fonts, per la fretta non ho visto il seguito della tua.
Ho notato che sei di Giovinazzo, io di Bari.
Auguro di riuscire ciò che desidero, ti ringrazio, fiducioso.
Domenico.
Fa piacere aiutare un vicino di casa :D
Assodato il corretto funzionamento dello script, ora non resta che avviarlo tramite cd.
Potresti creare un batch che esegua, in successione, le seguenti operazioni:
- copia dei file .ttf dal cd in C:\Installazione_font o meglio ancora sul desktop (%USERPROFILE%\Desktop\Installazione_font) sfruttando i comandi da te indicati nel primo post;
- copia del file .vbs dal cd nella cartella Installazione_font in cui sono stati copiati i .ttf (come sopra);
- avvio del file .vbs da \Installazione_font.
Alla fine del batch potresti eventualmente inserire una riga per la cancellazione della cartella \Installazione_font, in modo da eliminare i file .ttf e il .vbs a procedura completata.
PS: invece di copiare lo script su disco fisso potresti avviarlo direttamente dal cd, ma ritengo preferibile seguire quel passaggio in più per evitare problemi derivanti dal controllo account utente.
Pacificobis
03-02-2011, 07:58
Gent.mo Ezio,
sono rammaricato, purtroppo sono nuovamente a disturbarti.
Da ieri ho hatto diverse prove con risultato negativo. Non so dove sbaglio e ti invio ciò che ho fatto:
Pippo.bat
CD FONTS
SET FONTSdir=%~dp0
COLOR F0
@ECHO Off
PROMPT $P$G
ECHO.
PAUSE
copy *.ttf c:\%userprofile%\desktop\Installazione_font
Ho provato cambiando la riga in:
copy Installazione_font c:\%userprofile%\desktop\Installazione_font
Pupo.vbs
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("c:\Installazione_fonts")
Set objFolderItem = objFolder.ParseName("BRUSHSCI.TTF")
objFolderItem.InvokeVerb("Install")
Set objFolderItem = objFolder.ParseName("ALGER.TTF")
objFolderItem.InvokeVerb("Install")
Se gentilmente puoi inserire il comando che mi cancella la cartella dei fonts una volta che sono stati inseriti.
Ringrazio, saluto.
Domenico.
Attenzione, non:
c:\%userprofile%\
ma:
%userprofile%\ (senza neanche lo slash come prefisso)
E' una variabile d'ambiente appositamente resa disponibile per evitare di inserire a mano la lettera di partizione e il percorso \Users\NOMEUTENTE\ ;)
All'inizio del batch ti conviene creare già la cartella Installazione_font sul desktop:
c:
cd \
cd %userprofile%\Desktop
mkdir Installazione_font
Sulla cancellazione della cartella a procedura completa mi sorge un dubbio, potresti usare il comando del o rmdir ma devi verificare che non ti cancelli i file prima del termine dell'installazione dei font.
Pacificobis
03-02-2011, 12:15
Gent.mo Ezio,
mi scuso se ancora ti disturbo. Non riesco a far copiare la cartella "Installazione_font" su desktop o addirittura sul C.
ho provato in diversi modi e, ti invio l'ultima variazione consigliata:
Pippo.bat
CD FONTS
SET FONTSdir=%~dp0
COLOR F0
@ECHO Off
ECHO.
PAUSE
c:
CD \
CD %userprofile%\desktop\mkdir Installazione_font
Abbi pazienza e scusami.
Domenico.
Partiamo dall'inizio. Supponiamo che tu abbia i tuoi fonts, così come lo script, nella cartella Installazione_font del CD. Il batch si trova invece nella root del cd stesso.
Dovresti avere questa struttura:
cd /D %userprofile%\desktop\ (ti sposti nella cartella Desktop dell'account utente - il comando cd /d ti permette di cambiare unità e cartella in un colpo solo)
mkdir Installazione_font (crei la cartella Installazione_font sul desktop)
cd %~dp0 (così dovrebbe riportarti nella root del cd visto che da lì stai avviando il batch)
cd Installazione_font (ti sposti nella cartella dei font sul cd)
copy *.ttf %userprofile%\desktop\Installazione_font (copi i font nella cartella sul desktop)
copy Pupo.vbs %userprofile%\desktop\Installazione_font (copi il .vbs nella cartella sul desktop)
cd /D %userprofile%\desktop\Installazione_font (ti sposti nella cartella Installazione_font)
Pupo.vbs (avvii lo script e l'installazione dei caratteri)
Purtroppo non ho il pc sottomano e sto andando a memoria, eventualmente prova a chiedere nella sezione sulla programmazione come strutturare al meglio il batch, troverai gente molto più preparata di me su queste cose. Lo script tanto ormai hai capito come impostarlo ;)
Pacificobis
05-02-2011, 07:27
Gent.mo Ezio,
finalmente dopo tanto e varie prove e grazie ai tuoi consigli e pazienza, il tutto funziona a meraviglia sul Seven.
Si potrebbe oltre al Seven far funzionare sull'XP? bisognerebbe effettuare qualche modifica? Diversamente non fa nulla.
Ringrazio della gradita collaborazione, cordialmente saluto.
Domenico.
Ottimo! Se vuoi posta il batch finale, potrebbe essere utile ad altri che vogliono automatizzare l'installazione dei caratteri.
Per XP credo sia tutto più semplice, basta copiare direttamente i .ttf in c:\windows\fonts senza applicare script o altro :)
Pacificobis
05-02-2011, 08:37
Gent.mo ezio,
so che con l'XP è molto semplice, avrei gradito unificare per il semplice motivo che potrebbe usare sia con il seven che con l'XP.
Ti invio il link per prelevare il file che purtroppo non sono riuscito con il forum.
http://www.mediafire.com/file/fa79bllow7xoow1/Autorun%20Prova.rar
Immagine riassuntiva della struttura del cd, del batch e dello script:
http://www.pctunerup.com/up/results/_201102/th_20110205095024_Immagine.jpg (http://www.pctunerup.com/up/image.php?src=_201102/20110205095024_Immagine.jpg)
(click per ingrandire)
Se ritieni opportuno, mandami la tua e-mail mi farebbe cosa gradita.
Saluto cordialmente.
Domenico.
Ottimo, vedo che hai semplificato parecchio il tutto e sei anche riuscito ad inserire la cancellazione della cartella direttamente nello script :cool:
Ho inserito uno screen nel tuo post ;)
Per l'unificazione delle procedure per XP e 7 potresti chiedere nella sez. programmazione se è possibile inserire nel batch un comando o uno script che individui la versione del sistema operativo e applichi, a seconda della circostanza, la semplice copia dei file o l'apertura dell'altro script. Se non è possibile con il batch, potrebbe esserci qualche eseguibile apposito, chissà.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.