Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

Difference between revisions of "Windows7:Script Tips"

From Aino Wiki

Jump to: navigation, search
(Mappa e Link)
 
(No difference)

Latest revision as of 18:04, 3 October 2024

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.

Shell DOS, Prompt comandi

Da command Prompt o finestra terminale DOS ecco un elenco di Tips sul come fare per

FileSystem

Copia

Doc microsoft

Copia cartella e sottocartelle

Es.:

x>xcopy C:\cartellaOrigine C:\cartellaDestinazione /S /E

Comando 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

  1. Quindi per installarlo: scrivere: regsvr32 PKZIP25.EXE
  2. 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.

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

ToDo ...
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<code> 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:\> _
Di Sistema

Ci sono variabili chiamate di Sistema in quanto sono sempre disponibili da Command Prompt, ad esempio la variabile <code>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:

System variables.png

Argomenti CommandLine

Sono indicati 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

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

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
  1. Salvalo come SUDO.cmd
  2. Copia il file script di prima nella cartella C:\Windows\System32
  3. 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:

Prompt run as other user.png

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

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

Power Shell

Guida interna: PowerShell

Mappa e Link

Windows 7


C#


Keys: Command Prompt