Difference between revisions of "Windows7:Script Tips"
From Aino Wiki
(→Anomalie) |
(No difference)
|
Latest revision as of 17:59, 7 November 2025
Windows ha due command shells (interprete comandi): la "Command shell" e "PowerShell". Ogni shell è un programma che fornisce diretta comunicazione tra l'operatore ed il sistema operativo o applicazione, fornendo un ambiente per automatizzare operazioni.
- Microsoft Windows command-line reference: [1]
- Vari tips brevi scripts utili
Contents
- 1 Shell DOS, Prompt comandi
- 1.1 Il Linguaggio di Scripting
- 1.2 Elaborazione stringhe
- 1.3 FileSystem
- 1.3.1 Copia
- 1.3.2 Move, spostamento
- 1.3.3 Accodare più file in uno
- 1.3.4 Cancellazione
- 1.3.5 Verifica se un file esiste
- 1.3.6 Compressione di files o cartelle
- 1.3.7 CONTARE i files in cartelle
- 1.3.8 File più recente in cartella
- 1.3.9 Retention - cancellare files vecchi
- 1.3.10 Rinominazione
- 1.3.11 Aggiungere prefisso a piu files
- 1.3.12 Path
- 1.3.13 Capienza disco
- 1.3.14 Spazio cartella
- 1.4 Aprire Esplora risorse
- 1.5 Aprire Internet Explorer su pagina specifica
- 1.6 Esecuzione come Utente
- 1.7 BitLocker
- 1.8 Varie
- 1.9 Esecuzione da Task Scheduler
- 2 Power Shell
- 3 Mappa e Link
Shell DOS, Prompt comandi
Il Linguaggio di Scripting
Proveniente dal DOS, son stati aggiunti nuovi comandi ed istruzioni
IF
Esempio per la verifica se un file\directory esiste:rem oppure: if not exist rem per le cartelle valutare così: if exist "F:\tmp\*.* rem per i nomi di files/cartelle con con spazi in mezzo usare i doppi apici all'inizio ed alla fine --> "nome file.ext" if exist "F:\tmp\fileCivetta" ( rem file Esiste ) else ( rem file non esiste )
Operatori usuali
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
Operatori numerici
| Operatore | Significato |
| NEQ | not equal |
| LSS | less than |
| LEQ | less than or equal |
| GTR | greater than |
| GEQ | greater than or equal |
Esempio:
rem Get elapsed time: set /A elapsed=end-start rem Show elapsed time: set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100 if %mm% lss 10 set mm=0%mm% if %ss% lss 10 set ss=0%ss% if %cc% lss 10 set cc=0%cc%
FOR
Da Microsoft: for
Esempio 1
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do ( set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100" )
Esempio 2
Conteggio dei files presenti in una cartella.
La ricerca è fatta sfruttando l'OUTPUT del comando 'dir', in pratica acquisisce il numero antecedente la stringa "File(s)". Dare un'occhiata qui: stackoverflow.com
for /f %%A in ('dir ^| find "File(s)"') do set cnt=%%A echo File count = %cnt%
Variabili
Si usa il comando SET, di default sono tutte stringe altrimenti si userà in aggiunta l'opzione /A per indicare che la variabile conterrà un numero naturale.
echo off cls SET rootPath=\\NomeHost\f$\6Backup\Digitalk_MaintenancePlan SET fileFilter=\*.bak SET fullPattern=%rootPath%%fileFilter% ECHO %fullPattern% SET /A numero1=123 SET /A numero2=977 SET /A numTot=%numero1% + %numero2% ECHO %numTot%
Produrrà:
\\NomeHost\f$\6Backup\Digitalk_MaintenancePlan\*.bak 1100 C:\> _
Comparazione
Semplicemente si anticipa che:
- la comparazione di variabili numeriche (definite con /A ) si valutano con gli operatori: EQU, NEQ, LSS, LEQ, GTR, GEQ.
- l'operatore di comparazione == è usato solo nella valutazione tra stringhe.
Dare occhiata qui: [ss64.com]
Usare " nella valutazione di stringhe. Es.:
IF "ab" == "a b" Echo OK IF "ab" NEQ "a b" Echo OK IF NOT "ab" == "a b"
Comparazione di numeri:
Correct numeric comparison: IF 2 GEQ 15 echo "Numero più grande"
Valutazione se una variabile è vuota:
IF [%1] == [] ECHO Valore assente :: oppure: IF [%1] EQU [] ECHO Valore assente
Valutazione se una variabile è NULL:
IF NOT DEFINED _esempio ECHO Valore assente
Di Sistema
Ci sono variabili chiamate di Sistema in quanto sono sempre disponibili da Command Prompt, ad esempio la variabile Path che contiene l'elenco CSV (il separatore è ';') dei percorsi resi "disponibili", con relativo contenuto di programmi applicativi.
Per visualizzarne il contenuto basta digitare Path. Per aggiungere un percorso a quanto già esistente ecco uno script:
@echo off %windir%\system32\cmd.exe /K set path=C:\SW\Tools\CA_GitCSrv;%path%
Queste variabili sono disponibili per esser editate da apposita finestra raggiungibile dal pannello di controllo:
Anomalie
A volte il contenuto di una variabile non è quella che ci si aspetta e magari "sembra" avere un valore precedente.
Il contenuto di una variabile è stampabile col comando echo che useremo per verificarne il contenuto, ed in alcuni casi ci sbalordirà il risultato!
Ecco un esempio per cui si conta quante volte una stringa è in un file XML:
set /A fileCountRemoteStart=0 for /F %%x in ('find /C "<filename value=""%winSCPLogLstFilePath%"') do ( set fileCountRemoteStart=%%x ) set /A fileCountRemoteStart=fileCountRemoteStart-2 echo Nr files remoti trovati: %fileCountRemoteStart%
Indipendentemente dal contenuto di alcune variabili concentriamoci sul ciclo per cui la variabile "fileCountRemoteStart" conterrà un numero che non si aggiornerà in output ma rimmarrà incredibilmente a ZERO, il valore iniziale impostato prima del ciclo.
Questa anomalia dipende dal modo con cui lavora l'interprete che NORMALMENTE non si aggiorna subito ma con un ritardo, per eliminare questo si usa far precedere lo script dal comando:
setlocal enabledelayedexpansionOppure si elude lanciando un comando con cmd, come segue per esempio:
set /A fileCountRemoteStart=0 for /F %%x in ('find /C "<filename value=""%winSCPLogLstFilePath%"') do ( set fileCountRemoteStart=%%x ) set /A fileCountRemoteStart=fileCountRemoteStart-2 cmd /v /c"echo Nr files remoti trovati: !fileCountRemoteStart!
Argomenti di input a batch file
Ecco come passare argomenti a script da CommandLine.
Sono ottenuti dalla linea comando e trattati nello script riferendosi ad essi con la percentuale seguita da un numero progressivo.
Esempio se in uno script avessimo 3 parametri il seguente ne stamperebbe in output il contenuto:
@echo off echo %1 echo %2 echo %3
Esempio, parametro opzionale
Esmpio su come acquisire un parametro opzionale in input, script "Src_ParamIn.bat":
@echo off set driverVerifica=C:\ if (%1)==() ( echo Nessun parametro in input, stting default: %driverVerifica% goto elaborazione ) echo Parametro in input: %1 set driverVerifica=%1 :elaborazione echo Drive di indagine: echo %driverVerifica% :fine echo fine...
Che ad esempio può esser eseguito come nei due seguenti casi, il primo senza alcun parametro di input ed il secondo mediante un parametro stringa:
Commenti
REM Metodo 1 per commentare :: Metodo 2 per commentare
Ridirezione output
L'esecuzione di uno script che produce dell'output, destinato alla console quindi la finestra display, si può convogliare ad esempio verso un file o anche la stamante, il carattere da usare è la parentesi angolare > ad esempio:
C:\> MioScript.bat > FileDiTesto.txt
Ma l'output può essere anche quello di un eseguibile, in questo caso bisogna fare attenzione se l'output è conseguente ad un errore perché in questo caso può esser necessario aggiungere un numero di codice alla aprentesi angolare, ad esempio '2>':
C:\> MioEseguibile_ConErrore.exe 2> FileDiTesto.txt
Il numero 1 (usato così: '1>') ridireziona l'output normale.
Per accodare testo ad un file già esistente si usa la doppia parentesi angolare '>>':
C:\> MioScript.bat >> FileDiTesto.txt
Si può fare anche il contrario ovvero inviare del testo ad un eseguibile o ad uno script con la parentesi angolare opposta:
C:\> MioScript.bat < SequenzaComandi.txt
Comandi utili
Timeout
In uno script si può inserire il comando timeout che consente l'attesa di n secondi prima di proseguire, è possibile anche svincolare l'esecuzione mediante la pressione di un qualsiasi tasto da tastiera.
Nel seguente esempio si usa una variabile che conterrà il nr di secondi di attesa e l'esecuzione è all'interno di un ciclo consizionato alla presenza o meno di un errore, è stato copiato interamente dall'help del software utility WinSCP:
@echo off SET tries=3 SET triesSecInterval=100 :retry winscp.com /script=MioFileSFTP_Script.txt if %ERRORLEVEL% neq 0 ( SET /A tries=%tries%-1 if %tries% gtr 1 ( echo SFTP fallito si ritenta tra %triesSecInterval% secondi... timeout /t %triesSecInterval% goto retry ) else ( echo SFTP definitivamente fallito exit /b 1 ) ) echo SFTP riuscito exit /b 0
HostName
Per avere il nome del computer su cui si è basta lanciare il comando hostname:
C:\> hostname ENIACK_PC C:\> _
Tuttavia hostname è un comando ma se si vuole elaborare il suo contenuto stringa si può usare direttamente la variabile di sistema %COMPUTERNAME%
@echo off SET nomePC=%COMPUTERNAME% echo nome di questo computer: %nomePC%
Uno script di esempio per fare cose in funzione dell'hostname:
@echo off cls SET nomePC=%COMPUTERNAME% echo nome di questo computer: %nomePC% IF %nomePC%==DESKTOP-46L8Q2N ( echo sviluppo ) ELSE ( echo produzione )
Da command Prompt o finestra terminale DOS ecco un elenco di Tips sul come fare per
GoTo
Il seguente esegue un loop infinito
@echo off :Ciclo telnet 10.10.10.10 5969 goto Ciclo
Chiamare un Bat da un Bat
Esempio di come chiamare uno script batch da un altro per molularizzare le funzioni.
Si suppongono 2 file batch, _uno.bat e _due.bat, _uno chimerà _due mediante il comando CALL.
Ecco cosa conterrà _uno.bat:
@echo off del UnifiedCollector.exe.config del UnifiedCollector.vshost.exe del UnifiedCollector.vshost.exe.config @echo Chiamata pulizia da DLL non modificate Call _due.bat pause
Ecco cosa conterrà _due.bat:
del Opc.Ua.Core.dll del OpcLabs.BaseLibForms.dll del OpcLabs.EasyOpcUAInternal.dll del OpcLabs.EasyOpcUAInternal.xml @echo fine pulizia DLL non modificate
ATTENZIONE se lo script principale è eseguito dal Task Scheduler di Windows OCCORRERA' impostare la "Working directory" altrimenti tutte le call NON funzioneranno!
ERRORLEVEL
Il seguente è copiato da: [ss64.com]
Ci sono due differenti metodi che valutano errorlevel:
- la prima sintasssi ( IF ERRORLEVEL ... ) fornisce compatibilità con l'antichità dei batch files da Windows 95.
- Il secondo metodo è usare la variabile %ERRORLEVEL% presente da Windows 2000 in sù.
IF ERRORLEVEL n statements should be read as IF Errorlevel >= number i.e. IF ERRORLEVEL 0 will return TRUE whether the errorlevel is 0, 1 or 5 or 64 IF ERRORLEVEL 1 will return TRUE whether the errorlevel is 1 or 5 or 64 IF NOT ERRORLEVEL 1 means if ERRORLEVEL is less than 1 (Zero or negative). This is not very readable or user friendly and does not easily account for negative error numbers. Using the %ERRORLEVEL% variable is a more logical method of checking Errorlevels: IF %ERRORLEVEL% NEQ 0 Echo An error was found IF %ERRORLEVEL% EQU 0 Echo No error found IF %ERRORLEVEL% EQU 0 (Echo No error found) ELSE (Echo An error was found) IF %ERRORLEVEL% EQU 0 Echo No error found || Echo An error was found This allows you to trap errors that can be negative numbers, you can also test for specific errors: IF %ERRORLEVEL% EQU 64 ...
To deliberately raise an ERRORLEVEL in a batch script use the EXIT /B command.
It is possible (though not a good idea) to create a string variable called %ERRORLEVEL% (user variable)
if present such a variable will override and prevent the system variable %ERRORLEVEL% from being read by commands such as ECHO and IF.
Elaborazione stringhe
Estrazione sottoStringa
Come nella sostituzione di stringhe il comando è "strano" perché in una forma codificata e compatta: %variable:~daPosizione,nrCaratteri%, le cui sottoparti hanno il seguente significato:
- data la variabile stringa, "variabile", preceduta da % e il cui nome finisce prima di :
- ~ precede il numero corrispondente alla posizione in stringa di partenza su cui iniziare l'estrazione, numero che finisce con la presenza della virgola ,
- infine tra ',' e '%' c'è il numero di caratteri da estrarre dalla posizione indicata al punto precedente.
Esempio:
:: Se ad esempio ora sono le 10:47:50.02 (output del comando "time"): echo %time:~3,2% :: Restuirà 47 ovvero la sottostringa che costituisce i minuti dell'orario attuale :: dopo aver preso 2 caratteri dalla posizione 3 della stringa di partenza
Sostituzione
Data una variabile di tipo stringa si suppone si voglia sostituire una atottostringa con un altra oppure rimuoverla definitivamente.
Il comando da dare è un po' strano...: %variable:str1=str2%
In pratica è diviso in tre parti:
-
%variable:indica la varaibile "variable" sulla quale effettuare la sostituzione. Notare il '%' all'inizio del nome variabile e la delimitazione del ':'. -
:str1=indica la variabile stringa "str1" da cercare e sostituire -
=str2%indica la variabile stringa "str2" che sostituirà il contenuto corrispondente a "str1".
Esempio:
SET ricetta=Pompdori, cipolla, aglio, pepe, salsiccia. SET nuovaRicetta=%ricetta:aglio=origano% echo %nuovaRicetta% :: Che produrrà l'output: :: Pompdori, cipolla, origano, pepe, salsiccia. :: :: oppure, per rimuovere del testo: SET ricetta=Pompdori, cipolla, aglio, pepe, salsiccia. SET nuovaRicetta=%ricetta:aglio, =% echo %nuovaRicetta% :: Che produrrà l'output: :: Pompdori, cipolla, pepe, salsiccia.
Conteggio
Si usa il comando Find, col parametro /C, che però non restituisce un numero ma una stringa di descrizione da ripulire eventualemnte:
find /C "Aino Giuseppe" "FileDeleComparse.txt" :: che restituisce ad es: :: ---------- FileDeleComparse.txt: 3
Per non avere la stringa descrittiva si frappone il carattere <:
find /C "Aino Giuseppe" < "FileDeleComparse.txt" :: che restituisce ad es: :: 3
Per catturare il contenuto del conteggio ed inserirlo in una variabile:
@echo off SET winSCPLogLstFilePath=D:\Work\Digitalk\Backup_Sarah2_Scripts\Pacchetto_1.05\Sarah2_RemoteList.xml SET /A nrFilesUploaded=0 for /F %%n in ('find /C "<filename value=" ^< "%winSCPLogLstFilePath%"') do ( SET nrFilesUploaded=%%n ) :: Si eliminano 2 files SET /A nrFilesUploaded=nrFilesUploaded-2 echo Nr files effettivamente caricati: %nrFilesUploaded%
Find
Esegue la ricerca di una stringa in un file di testo ma con le seguenti limitazioni:
- esegue ricerche esatte e in modalità case sensitive.
- nn consente l'uso di espressioni regolari.
- consente una ricerca in un singolo file.
- non consente la restituzione del numero di linea corrispondente alla ricerca positiva.
Esempio:
@echo off set search_string=bananas set file_path=data.txt FIND "%search_string%" "%file_path%" if %errorlevel% equ 0 ( echo Found %search_string% in %file_path% ) else ( echo %search_string% not found in %file_path% )
Findstr
Doc Microsoft findsr.
Nel seguente esempio data una stringa pattern da ricercare (usando findstr), si cerca in un determinato file e se trovata la stringa verrà inviata una e-mail mediante il tool Blat altrimenti tutto ok e si prosegue; è un estratto da uno script esistente:
:: ANALISI Errore tipo 1 (come da DOC ufficiale): SET strOwlMsgError="Script: Exit code: 1" findstr /c:%strOwlMsgError% %winSCPLogFilePath% > nul if %ERRORLEVEL% equ 0 ( echo Trovato indizio di errore %strOwlMsgError% nel file di log upload SFTP %blatEmailClientPath% -bodyF %emailBodyLogError4SFTP% -attach %winSCPLogFilePath% -tf %emailDL_4Sarah2Error% -sf %emailSubjectError4SFTP% %emailSMTPName_Par% %emailPassword_Par% %emailUserName_Par% SET is2sendEmailOK=0 SET isErrorOnLogFile=1 goto endParseError ) else ( echo 1 di 4 - Nessun errore %strOwlMsgError% nel file di log upload SFTP )
Tips, varie soluzioni
Variabile stringa con data_orario
Segue uno script per generare una variabile stringa che può esser usata come suffisso a nomi files (es per archiviazioni). Copiato da [stackoverflow]
@echo off cls set hour=%time:~0,2% if "%hour:~0,1%" == " " set hour=0%hour:~1,1% echo hour=%hour% set min=%time:~3,2% if "%min:~0,1%" == " " set min=0%min:~1,1% echo min=%min% set secs=%time:~6,2% if "%secs:~0,1%" == " " set secs=0%secs:~1,1% echo secs=%secs% set year=%date:~-4% echo year=%year% ::--- set month=%date:~3,2% if "%month:~0,1%" == " " set month=0%month:~1,1% echo month=%month% set day=%date:~0,2% if "%day:~0,1%" == " " set day=0%day:~1,1% echo day=%day% set strDateTime=%year%%month%%day%_%hour%%min%%secs% echo strDateTime=%strDateTime%
FileSystem
Copia
Doc microsoft
Copia cartella e sottocartelle
Es.:
x>xcopy C:\cartellaOrigine C:\cartellaDestinazione /S /EComando XCopy
XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]
[/EXCLUDE:file1[+file2][+file3]...]
source Specifies the file(s) to copy.
destination Specifies the location and/or name of new files.
/A Copies only files with the archive attribute set,
doesn't change the attribute.
/M Copies only files with the archive attribute set,
turns off the archive attribute.
/D:m-d-y Copies files changed on or after the specified date.
If no date is given, copies only those files whose
source time is newer than the destination time.
/EXCLUDE:file1[+file2][+file3]...
Specifies a list of files containing strings. When any of the
strings match any part of the absolute path of the file to be
copied, that file will be excluded from being copied. For
example, specifying a string like \obj\ or .obj will exclude
all files underneath the directory obj or all files with the
.obj extension respectively.
/P Prompts you before creating each destination file.
/S Copies directories and subdirectories except empty ones.
/E Copies directories and subdirectories, including empty ones.
Same as /S /E. May be used to modify /T.
/V Verifies each new file.
/W Prompts you to press a key before copying.
/C Continues copying even if errors occur.
/I If destination does not exist and copying more than one file,
assumes that destination must be a directory.
/Q Does not display file names while copying.
/F Displays full source and destination file names while copying.
/L Displays files that would be copied.
/H Copies hidden and system files also.
/R Overwrites read-only files.
/T Creates directory structure, but does not copy files. Does not
include empty directories or subdirectories. /T /E includes
empty directories and subdirectories.
/U Copies only files that already exist in destination.
/K Copies attributes. Normal Xcopy will reset read-only attributes.
/N Copies using the generated short names.
/O Copies file ownership and ACL information.
/X Copies file audit settings (implies /O).
/Y Suppresses prompting to confirm you want to overwrite an
existing destination file.
/-Y Causes prompting to confirm you want to overwrite an
existing destination file.
/Z Copies networked files in restartable mode.
The switch /Y may be preset in the COPYCMD environment variable.
This may be overridden with /-Y on the command line.
Copia con caratteri speciali nel nome
La copia di file che hanno i seguenti caratteri nel nome fallirà a meno di usare caratteri di escape per codificarli:
< > ( ) & | , ; "
tali caratteri dovranno essere preceduti dal simbolo ^
Es.:
per copiare il file You&Me.txt dal prompt comandi di DOS:
C:\>copy "D:\Mia Cartella\You^&Me.txt" D:\CartellaDestinazione
Move, spostamento
Attualmente è un comando "interno" non lo è sempre stato. Seguono esempi d'uso:
c:\move c:\windows\temp\*.* c:\temp C:\move stats.doc, morestats.doc c:\statistics
Sintassi:
To move one or more files: MOVE [/Y | /-Y] [drive:][path]file name1[,...] destination To rename a directory: MOVE [/Y | /-Y] [drive:][path]dirname1 dirname2 [drive:][path]file name1 Specifies the location and name of the file or files you want to move. destination Specifies the new location of the file. Destination can consist of a drive letter and colon, a directory name, or a combination. If you are moving only one file, you can also include a file name if you want to rename the file when you move it. [drive:][path]dirname1 Specifies the directory you want to rename. dirname2 Specifies the new name of the directory. /Y Suppresses prompting to confirm you want to overwrite an existing destination file. /-Y Causes prompting to confirm you want to overwrite an existing destination file.
The switch /Y may be present in the COPYCMD environment variable. This switch may be overridden with /-Y on the command line. Default is to prompt on overwrites unless MOVE command is being executed from within a batch script.
Accodare più file in uno
Supponendo di avere in una sola cartella tutti i file, in formato ASCII, da copiare, accodandoli, Aprire una finestra terminale, e scrivere il seguente:
x>Copy *.* ContieneTutto.txt
Una applicazione pratica di questo procedimento può essere per copiare l'elenco di contatti dalla rubrica del cellulare in un unico file, per alternative leggere il supporto di Google. Si può trasferire via bluetooth da cellulare al PC l'intera rubrica questo produrrà un elenco di file vcf (VCards), il risultato è quello di avere n files dove n è il numero di contatti ottenuti.Come riunire in un unico file questo elenco? La risposta è nell'uso del comando indicato prima.
Cancellazione
Uso del comando Delete o brevemente Del
DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
Significato ed uso dei parametri:
/P Prompts for confirmation before deleting each file. /F Force deleting of read-only files. /S Delete specified files from all subdirectories. /Q Quiet mode, do not ask if ok to delete on global wildcard /A Selects files to delete based on attributes attributes R Read-only files S System files H Hidden files A Files ready for archiving - Prefix meaning not
Cancellazione di file senza errore se non esiste!
C:\) if exist c:\folder\file.ext del c:\folder\file.ext
Stessa tecnica usata su una cartella:
C:\) if exist c:\folder\
NOTA il '\' finale obbligatorio.
Verifica se un file esiste
if exist <insert file name here> ( rem file exists ) else ( rem file doesn't exist )
Compressione di files o cartelle
Usando eseguibile
ZIP
In un batch file si userà un eseguibile che comprimerà la cartella\e in un univo file.
Nell'esempio seguente si userà "pkzip25.exe" (versione shareware autore PKWARE Inc.) reperibile da codesto sito pkzip
Il seguente script cancella (Del) il precedente file zip (Archivio.zip) se esistente (Exist), comprime nel file e apre l'explorer nella cartella di lavoro:
REM Spostamento cartella di lavoro CD C:\Cartella da cui comprimere file o cartelle contenute REM cancellazione precedente file if exist "C:\Cartella da cui comprimere file o cartelle contenute\Archivio.zip" DEL "C:\Cartella da cui comprimere file o cartelle contenute\Archivio.zip" REM zip all files to transfer pkzip25 -add -dir=relative "C:\Cartella da cui comprimere file o cartelle contenute\Archivio.zip" "C:\Cartella da cui comprimere file o cartelle contenute\Dir con files\*" explorer C:\Cartella da cui comprimere file o cartelle contenute :END PAUSE
Mentre per decomprimere ecco l'esempio:
@echo off cls echo . rem ---------------------- ESTRAZIONE --------------- echo ESTRAZIONE rd C:\Deploy\Temp\Dir_destinazione\ /S/Q md C:\Deploy\Temp\Archivio copy C:\Deploy\Repository\Archivio.zip C:\Deploy\Temp\Archivio\ cd C:\Deploy\Temp\Archivio\ C:\Deploy\Batches\pkzip25.exe -extr -dir Archivio.zip * del Archivio.zip :END echo . echo FINE explorer C:\Deploy\Temp\MwSynchro PAUSE
Installare pkzip25.exe
Un modo per rendere sempre disponibile il compressore è di installarlo con la seguente guida (anche come disinstallarlo).
- Da una finestra terminale (eseguendo cmd) digitare
regsvr32 PKZIP25.EXE
premere Enter
- Quindi per installarlo: scrivere: regsvr32 PKZIP25.EXE
- Per disinstallarlo: regsvr32 -u PKZIP25.EXE
7ZIP
Basta installare 7Zip che è un software openSource e che funziona benissimo con Windows 10 (a differenza dello ZIP citato prima che ora inizia ad avere problemi si "sicurezza").
7Zip è una Desktop Application ma nella cartella di installazione c'è un eseguibile che si può usare da linea comando ed è leggerissimo 460K, si chiama 7z.exe. La sintassi è simile a quella illustrata nello ZIP
Impostare una cartella come compressa
Istruzioni prese da articolo technet
Le cartelle o i file così impostati manterranno l'estensione naturale ma saranno memorizzate sul FileSystem in formato compresso.
Sintassi:
compact [{/c|/u}] [/s[:dir]] [/a] [/i] [/f] [/q] [FileName[...]]
Esempio, compressione di una data directory:
compact /c/s:percorsoDirectory nomeFilecompresso
CONTARE i files in cartelle
Il conteggio dovrà avvenire includendo le sottocartelle (subdirectory) e dovrà essere indipendentemente dalla lingua. Indipendente dalla lingua in quanto si una il FIND e questo comando effettua ricerche in testo
@echo off cls SET Count=0 SET dirPath="D:\Documenti\Fox_Australia\Dev\FOX.Dashboard.Apac" @echo File count of: @echo.%dirPath% SET cmd="DIR %dirPath% /A-D /B /S | FIND /C /V """ FOR /F "tokens=*" %%i IN (' %cmd% ') DO SET Count=%%i @ECHO.Il numero e' %Count% if %Count% lss 10 ( @echo[ @echo Error! Operation abort, script exit. @echo[ goto :End_script @ ) else ( @echo[ @echo ok @echo[ ) @echo[ @echo We do something .... @echo[ :End_script
File più recente in cartella
Segue un esempio per ottenere il file più recente in una cartella:
echo off for /f %%i in ('dir "\\Backup\DB\RS Bkp\SRC_Projects_IT_FromFile\*.bak" /b/a-d/od/t:c') do set LAST=%%i echo The most recently created file is %LAST%
Retention - cancellare files vecchi
Il seguente script cancellerà i files xlsx più vecchi di 60 giorni
ForFiles /p "D:\Tmp\RetentionPolicy" /s /m *.xlsx /d -60 /c "cmd /c del /q @file"
Rinominazione
Aggiungere prefisso a piu files
Occorre impostare un ciclo su ogni file contato prima dell'esecuzione dello script, si userà quindi il comando FOR con l'uso di una varabile %A:
> for %a in (*.*) do ren "%a" "201307_LagoSegrino_%a"
Aggiungerà il prefisso "201307_LagoSegrino_" a tutti i files nella cartella dove si lancierà il comando. Da stackoverflow.com
Path
Se in una sessione di Command Prompt si vuole aggiungere un percorso a quelli predefiniti si digita:
set path=C:\MioNuovoPercorso;%path%
La variabile di sistema è "path" per cui oltre ai percorso esistenti si aggiunge il nuovo C:\MioNuovoPercorso il carattere ; è un separatore.
Capienza disco
Per ottenere lo spazio libero di un determinato drive si può usare il comando WMIC (Windows Management Instrumentation).
Ad esempio per avere un testo verificabile in uno script batch:
wmic volume where (DriveLetter='C:') get freespace /format:list
Che produce il seguente output:
C:\>wmic volume where (DriveLetter='C:') get freespace /format:list FreeSpace=882523402240 C:\>_
Nell'esempio, il numero 882523402240 corrisponde a 820 GBytes ovvero 880.751.833.088 bytes
Un esempio con più informazioni (capacità, nome drive e spazio libero nel formato chiave=valore):
wmic volume where (DriveLetter='C:') get Caption, Capacity, freespace /format:list
NOTA per Microsoft WMIC è ormai deprecato da Windows 10.
Es verifica minimo spazio libero
Definito un driver da verificare, es. C:\, ed un limite minimo in KByte il seguente script riporta se è stato superato il limite minimo di occupazione.
::Istruzioni per un uso estensivo dei comandi @setlocal enableextensions enabledelayedexpansion @echo off :: wmic volume where (DriveLetter='C:') get freespace /format:list cls set driverVerifica=C:\ set intBytesFree=0 set intKBytesFree=0 set intReservedSpaceKbyte=780742506 set intKByteValue=1024 echo Verifica spazio sul driver %driverVerifica% ... for /f "tokens=3" %%a in ('dir %driverVerifica%') do ( set strBytesFree=%%a ) set strBytesFree=%strBytesFree:,=% echo Spazio disponibile in Byte: %strBytesFree% ::Estrae tutto tranne gli ultimi 3 caratteri: set strBytesFree="%strBytesFree:~0,-3%" echo Spazio disponibile in KByte %strBytesFree% set /a intKBytesFree=%strBytesFree% echo . echo Spazio KByte libero totale: %intKBytesFree% KBytes echo Spazio KByte soglia minima: %intReservedSpaceKbyte% KBytes echo . if %intKBytesFree% lss %intReservedSpaceKbyte% ( echo __--' Spazio limite esaurito !!! '--__ echo Spazio disponibile %intKBytesFree% MINORE DI %intReservedSpaceKbyte% (soglia minima) ) else ( echo __--' Spazio sufficiente '--__ echo Spazio disponibile %intKBytesFree% MAGGIORE DI %intReservedSpaceKbyte% (soglia minima) ) ::Si rilasciano tutte le variabili locali endlocal
Spazio cartella
Per ottenere lo spazio occupato dai files in una determinata cartella per eventuali altre elaborazioni (copiato da heelpbook.net):
@echo off cls SET testPath=D:\Work\Digitalk\Backup_Sarah2_Scripts\Pacchetto_1.05\*.* echo Estrapolazione spazio in %testPath% ::---------------- @For /F "tokens=*" %%a IN ('"dir %testPath% /-c | find "bytes" | find /v "free""') do @Set summaryout=%%a ::@Echo %summaryout% @For /f "tokens=1,2 delims=)" %%a in ("%summaryout%") do @set filesout=%%a&set sizeout=%%b ::@Echo %filesout% ::@Echo %sizeout% @Set sizeout=%sizeout:bytes=% ::@Echo %sizeout% @Set sizeout=%sizeout: =% @Echo Dimensione: %sizeout%
Aprire Esplora risorse
Per aprire Esplora risorse su una cartella specifica:
x>Explorer "D:\Mia cartella"
Aprire Internet Explorer su pagina specifica
Per aprire Esplora risorse su una cartella specifica:
@echo Apertura url voluto.. start "C:\Program Files\Internet Explorer" IEXPLORE.EXE http://aino.it/Downloads/KT/Release_
Esecuzione come Utente
Come Amministratore
Crea un file di testo e riversaci il contenuto:
del %temp%\sudo.tmp.vbs @echo Set objShell = CreateObject("Shell.Application") > %temp%\sudo.tmp.vbs @echo args = Right("%*", (Len("%*") - Len("%1"))) >> %temp%\sudo.tmp.vbs @echo objShell.ShellExecute "%1", args, "", "runas" >> %temp%\sudo.tmp.vbs @cscript %temp%\sudo.tmp.vbs
- Salvalo come SUDO.cmd
- Copia il file script di prima nella cartella C:\Windows\System32
- Ora per eseguire un programma con i privilegi di amministratore digita:
sudo cmd /k javaw.exe JAVA file
cmd /k Esegue il comando specificato nella stringa e rimane
Utente specifico
Da una finestra di Prompt DOS, digitare
runas /noprofile /user:UtenteUNO cmd
Al posto di UtenteUno si può usare anche Administrator.
Dopo aver digitato la password associata all'utente si aprirà una nuova finestra terminale e qualsiasi cosa si faccia la si farà come l'utente specificato.
Si può usare una utenza locale alla macchina oppure di dominio. Segue esempio:
BitLocker
Ecco come sbloccare 2 driver che sono protetti da BitLocker, poi RI-avviare Explorer e RI-avviare SQL Server e SQL Server Agent:
manage-bde -unlock D: -password manage-bde -unlock F: -password taskkill /im explorer.exe /f start explorer.exe net stop mssqlserver /y net start mssqlserver net stop SQLSERVERAGENT /y net start SQLSERVERAGENT
Lo script che sarà un classico file .bat dovrà essere eseguito in modalità amministratore.
I comandi net stop sono seguiti da /y allo scopo di non chiedere conferma all'utente dello stop del servizio.
Varie
- Visualizzare l'utente corrente:
whoami
che può produrre ad es:
- dominio\UserName_UtenteSistemaOperativo
- nt service\mssqlserver
Esecuzione da Task Scheduler
E' possibile schedulare una esecuzione di uno script esso verrà eseguito come una applicazione.
NOTARE:
- se lo script ne chiama altri mediante
CALLè OBBLIGATORIO inserire anche la Working directory che sarà quella dove saranno reperibili gli script chiamati mediante Call. - l'esecuzione dello script potrà produrre output su file basta usare il campo "Arguments" e ridirezionare l'otput con '>', ad es.: > C:\PercorsoLog\nomeFileLog.log
Power Shell
Guida interna: PowerShell
Mappa e Link
Keys: Command Prompt
