PDA

View Full Version : Aiuto comando DOS sotto Windows 7!!!!!


ChriD
09-08-2009, 19:35
Avrei bisogno di prendere alcuni files radicati in delle sottodirectory e spostarli in un'altra directory!
Questi files sono presenti nelle directory:
D:\dvd\dupli 1\file.vob
D:\dvd\dupli 2\file.vob
D:\dvd\dupli 3\file.vob
D:\dvd\dupli 4\file.vob
D:\dvd\dupli 5\file.vob
D:\dvd\dupli 6\file.vob
..... e così via

Avevo pensato ad un qualcosa del genere....

dir d:\dvd\dupli*\*.vob | mv pathDirectoryDestinazione

Ma il comando non è valido perchè credo che dos non sia in grado di espandere le wildcards anche nel pathname delle directory......

Mi aiutate????? :help: :help:

Vorrei farlo con dos per creare successivamente dei file batch......

Ghost Of Christmas Past
09-08-2009, 20:46
Avrei bisogno di prendere alcuni files radicati in delle sottodirectory e spostarli in un'altra directory!
Questi files sono presenti nelle directory:
D:\dvd\dupli 1\file.vob
D:\dvd\dupli 2\file.vob
D:\dvd\dupli 3\file.vob
D:\dvd\dupli 4\file.vob
D:\dvd\dupli 5\file.vob
D:\dvd\dupli 6\file.vob
..... e così via

Avevo pensato ad un qualcosa del genere....

dir d:\dvd\dupli*\*.vob | mv pathDirectoryDestinazione

Ma il comando non è valido perchè credo che dos non sia in grado di espandere le wildcards anche nel pathname delle directory......

Mi aiutate????? :help: :help:

Vorrei farlo con dos per creare successivamente dei file batch......

prova ad usare la powershell che ha meno limitazioni, ovvero il "nuovo" finalmente terminale di windows (ha praticamente la stessa sintassi del prompt di comandi cmd.exe e del terminale di linux...). Se hai ancora difficoltà prova ad usarlo come admin.. in ogni caso la ps ti darà un minimo di descrizione del problema in caso di errore..

hexaae
09-08-2009, 22:03
Avrei bisogno di prendere alcuni files radicati in delle sottodirectory e spostarli in un'altra directory!
Questi files sono presenti nelle directory:
D:\dvd\dupli 1\file.vob
D:\dvd\dupli 2\file.vob
D:\dvd\dupli 3\file.vob
D:\dvd\dupli 4\file.vob
D:\dvd\dupli 5\file.vob
D:\dvd\dupli 6\file.vob
..... e così via

Avevo pensato ad un qualcosa del genere....

dir d:\dvd\dupli*\*.vob | mv pathDirectoryDestinazione

Ma il comando non è valido perchè credo che dos non sia in grado di espandere le wildcards anche nel pathname delle directory......

Mi aiutate????? :help: :help:

Vorrei farlo con dos per creare successivamente dei file batch......

Interessante... :what:
In effetti da shell MSDOS i wildcard rispetto a sistemi Unix-like non funzionano come hai fatto tu e come avrei fatto anch'io... però prova senza il "\" in mezzo, ovvero "dir /S d:\dvd\dupli*.vob" etc.... il resto che hai scritto con la pipe usata così non va bene per fare ciò che hai in mente, però non riesco a trovare un modo per fare ciò che hai in mente da MSDOS...

hexaae
10-08-2009, 11:16
Ok, ho trovato... :cool:

for /R "D:\dvd" %a IN (file.vob) DO copy "%a" <dest path>

Esegui questa riga da prompt e dovrebbe andare... /R "D:\dvd" tieni presente che gli dice di entrare ricorsivamente in tutte le dir a cominciare da quel path.

In alternativa devi crearti un batch dove specifichi anche la sub-dir in cui entrare ma con l'ausilio dei wildcards, se ti interessa:

@echo off
set curdir=%CD%
cd %1
for /f "tokens=*" %%a in ('dir /b /w %2') do (
cd "%%a"
copy %3 %4
cd ..
)
cd %curdir%
set curdir=

Andrà usato come nomefile.bat "dir in cui entrare, ad es. D:\DVD" "subdir che ti interessa, ad es. dupli*" "file.vob" "<dest dir>"
Es. nel tuo caso:
nomefile.bat "D:\DVD" "dupli*" "file.vob" "<dest dir>"

Comunque dato che il nome del file è sempre lo stesso "file.vob" non ho capito cosa vuoi farci: ogni volta riscriverai il file.vob con l'ultimo trovato nell'ultima directory in cui sei entrato... Non è corretto e non ho ben capito cosa vuoi ottenere.

ChriD
10-08-2009, 11:32
Ok, ho trovato... :cool:

for /R "D:\dvd" %a IN (file.vob) DO copy "%a" <dest path>

Esegui questa riga da prompt e dovrebbe andare...

6 il mago del DOS!

Cmq ho dovuto spostare le directory Dupli in un'altra sottodirectory (Creata ad hoc) perchè sotto \DVD di file.vob c'erano a bizzeffe, anche in altre directory che non m'interessavano!

Mi ero dimenticato dell'esistenza del for sotto dos..... :doh:

Tramite la power shell tuttavia il comando si semplifica nella forma
mv d:\dvd\dupli*\*.vob <dest path>
molto stile linux.....

cmq grazie ancora ;)

hexaae
10-08-2009, 12:34
Ah! Meno male, anch'io sono abituato stile unix senza tanti limiti nell'uso delle wildcards o espansione dei backtick etc.
Nel frattempo avevo modificato il msg sopra ;)

ChriD
10-08-2009, 14:14
Comunque dato che il nome del file è sempre lo stesso "file.vob" non ho capito cosa vuoi farci: ogni volta riscriverai il file.vob con l'ultimo trovato nell'ultima directory in cui sei entrato... Non è corretto e non ho ben capito cosa vuoi ottenere.

Per file.vob intendevo che è un file con estensione vob a cui mi riferisco con *.vob!!!

Grazie ancora per lo script ;)

hexaae
10-08-2009, 17:43
Per file.vob intendevo che è un file con estensione vob a cui mi riferisco con *.vob!!!

Grazie ancora per lo script ;)

;)
Sono invece alle prese con un problema con PowerShell ora: hai idea di come si possa eseguire l'equivalente di un doppio backtick (come si fa su shell Unix-like e anche su AmigaOS) per eseguire un comando, in una linea di comando più grande?
Es. semplice echo `date` sotto altre shell non fa altro che eseguire date e dare in pasto ad echo l'output che ne consegue. È una cosa comodissima che ho usato per anni sugli altri sistemi... Non riesco a capire come si possa ottenere lo stesso dalla PowerShell. Ho cercato anche in rete ma nessuno affronta la questione...

ChriD
10-08-2009, 19:53
;)
Sono invece alle prese con un problema con PowerShell ora: hai idea di come si possa eseguire l'equivalente di un doppio backtick (come si fa su shell Unix-like e anche su AmigaOS) per eseguire un comando, in una linea di comando più grande?
Es. semplice echo `date` sotto altre shell non fa altro che eseguire date e dare in pasto ad echo l'output che ne consegue. È una cosa comodissima che ho usato per anni sugli altri sistemi... Non riesco a capire come si possa ottenere lo stesso dalla PowerShell. Ho cercato anche in rete ma nessuno affronta la questione...

Per valutare delle sottoespressioni con powerShell si utilizza la forma $(comando)
Quindi il tuo echo 'date' diventerebbe echo $(date) sotto powerShell!

Prova in questo modo, spero ti sia d'aiuto..... :sperem:

Khronos
10-08-2009, 20:43
con $(..) bindi il comando a una variabile... sa molto di C ^^

hexaae
10-08-2009, 23:27
Ahh! :)
Ottimo, grazie ragazzi il classico
echo "Oggi è $(date)"
sembra funzionare! Mi mancava proprio e mi sembrava strano non ci fosse modo con la PowerShell!

Se vi interessa invece crearvi i vostri alias in un profilo personalizzato ho trovato questo articolo: http://www.powershellpro.com/powershell-tutorial-introduction/tutorial-powershell-aliases/
dove in breve si dice di eseguire il comando Set-ExecutionPolicy Unrestricted per "sbloccare" l'esecuzione degli script e file di configurazione in avvio. Dopodiché basterà creare il file .ps1 al percorso indicato da $Profile contenente eventuali alias e altre personalizzazioni che verranno inizializzate all'avvio di ogni shell, io ad esempio ho aggiunto il classico grep (find, su alcuni sistemi):
Set-Alias grep Select-String