Fórum Root.cz

Hlavní témata => Windows a jiné systémy => Téma založeno: TomBA 26. 01. 2015, 15:05:28

Název: Skriptování přesunu souborů ve Windows
Přispěvatel: TomBA 26. 01. 2015, 15:05:28
Zdravim.
Dlhšie som nerobil nič skriptami vo windows a tak ma prekvapilo, keď neviem urobiť ani nasledovnu jednoduchu vec.
Potrebujem premiestniť niekoľko tisíc súborov podľa udajov v subore file.txt s asi takouto strukturou:

C:\subory\subor1.jpeg c:\premiestnene_subory\specificky_adresar\novemeno_pre_subor1.jpeg
C:\subory\subor2.jpeg c:\premiestnene_subory\iny_adresar\novemeno_pre_subor2.jpeg
C:\subory\subor3.jpeg c:\premiestnene_subory\adresar1\novemeno_pre_subor3.jpeg
C:\subory\subor4.jpeg c:\premiestnene_subory\adresarXZ\novemeno_pre_subor4.jpeg
.....
......
C:\subory\subor2750.jpeg c:\premiestnene_subory\adresar_celkom_iny\novemeno_pre_subor2750.jpeg

v podstate by som potreboval urobit nieco ako
move %1 %2
kde by som si nacitaval riadok po riadku vysie uvedeny subor.
Ako to ale urobiť vo windows 7?
Nemožem tam inštalovať perl ani python a v cmd či powershell to spraviť neviem.
Poradi niekto?
Název: Re:Windows scripting
Přispěvatel: nobody 26. 01. 2015, 15:28:13
ve w7 ? pomoci unetbootin vytvoris liveusb s linuxem, das startmenu restartovat, vyberes boot z usb a:

while read radek; do mv $radek; done <file.txt
;)
Název: Re:Windows scripting
Přispěvatel: Bořek Šikula 26. 01. 2015, 15:58:25
Asi to není to správné místo na dotaz, ale nejjednodušší ve W7 (nebo XP nebo W2000 a možná i NT4, kdo ví, a taky W8, 8.1 i W10) bude cmd - příkaz for, for /? vypíše (s dalším vysvětlením) i tuto variantu:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

Bude to dokonce o trochu jednodušší, než boot Linuxu :-)
Název: Re:Windows scripting
Přispěvatel: Ondra Satai Nekola 26. 01. 2015, 16:03:11
Naposledy jsem to resil tak, ze jsem si ten soubor copypastnul v putty na vzdaleny linux a tam ve vimku z nej vygeneroval .bat ;)
Název: Re:Windows scripting
Přispěvatel: JardaP . 26. 01. 2015, 16:05:13
Otevri ten soubor v textovem editoru, veskere vyskyty C:\ nahrad mv C:\ za predpokladu, ze budes nahrazovat jen C:\ a ne c:\ a ze to mas v celem souboru stejne. Tez za predpokladu, ze mv je widlacky prikaz k presunu souboru - ja to uz leta nepouzil, tak nevim, jak mi pamet slouzi. Zasejvuj jako nejakejmeno.bat, spust a jdi na kafe.
Název: Re:Windows scripting
Přispěvatel: TomBA 26. 01. 2015, 16:55:16
ve w7 ? pomoci unetbootin vytvoris liveusb s linuxem, das startmenu restartovat, vyberes boot z usb a:

while read radek; do mv $radek; done <file.txt
;)
Boot z USB nehrozí....

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Toto je to čo potrebujem.....

Otevri ten soubor v textovem editoru, veskere vyskyty C:\ nahrad mv C:\ za predpokladu, ze budes nahrazovat jen C:\ a ne c:\ a ze to mas v celem souboru stejne. Tez za predpokladu, ze mv je widlacky prikaz k presunu souboru - ja to uz leta nepouzil, tak nevim, jak mi pamet slouzi. Zasejvuj jako nejakejmeno.bat, spust a jdi na kafe.
Jednoduché riešenie so "sedliackym rozumom". Že mi to nenapadlo  ;D.... Tých C: a D: a F: je tam síce viac, ale za 10min to dám. Akurát to nemá žiadnu kontrolu chýb a tak ak to niekde prdne, nebudem vedieť kde.... Ale asi to takto spravím.
Název: Re:Windows scripting
Přispěvatel: nobody 26. 01. 2015, 17:36:38
while read radek; do mv $radek; done <file.txt
Boot z USB nehrozí....

boot z CD ? virtualbox a boot z ISO ? proste rekni rovnou ze na linux foru hledas reseni windows problemu bez pouziti linuxu ;)
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: jjeenndda 26. 01. 2015, 18:51:55
A pak WIN mají powershell. V tom jdou "zázraky".
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: j 26. 01. 2015, 20:56:34
Tak prvni po precteni me napadlo ctrl + h
A pak ze nekdo navrhne powershell ... ;D

Jinak neco jako ^[a-zA-Z]: a to bych nahrazoval => asi tak 30s?
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: JardaP . 26. 01. 2015, 21:16:35
Jinak tu porad jeste mame Cygwin, ze....
Název: Re:Windows scripting
Přispěvatel: Tomaskom 27. 01. 2015, 01:15:32
Otevri ten soubor v textovem editoru, veskere vyskyty C:\ nahrad mv C:\ za predpokladu, ze budes nahrazovat jen C:\ a ne c:\ a ze to mas v celem souboru stejne. Tez za predpokladu, ze mv je widlacky prikaz k presunu souboru - ja to uz leta nepouzil, tak nevim, jak mi pamet slouzi. Zasejvuj jako nejakejmeno.bat, spust a jdi na kafe.

Nektere editory umi escape sekvence, takze by stacilo nahrazovat "\n" -> "\n move " (a na prvni radek to dopsat rucne).
Nebo v XEmacsu pro widle vyloopovat makro, ktery to tam dopise :P
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: Lol Phirae 27. 01. 2015, 01:25:11
Počkej až sem přijde Lael. Ten ti poradí, ať si koupíš Office 2013 a napíšeš si na to program v Excelu.  ;D
Název: Re:Windows scripting
Přispěvatel: JardaP . 27. 01. 2015, 02:37:20
Nektere editory umi escape sekvence, takze by stacilo nahrazovat "\n" -> "\n move " (a na prvni radek to dopsat rucne).

Pravda. Nevim, jestli to umi Notepad ve Widlich, ale tusim se da oblafnout tak, ze se oselektuje konec radku a pak copy and paste do nahrazovaciho dialogu. Tam se to zobrazi jako nejaky podivny necitelny znak, ale to je jedno.
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: Juro 27. 01. 2015, 05:25:19
Ukecanejsia verzia:
Get-Content file.txt | ForEach-Object{ $line=$_.Split(" "); Copy-Item  $line[0] $line[1]}

skratena:
gc file.txt | %{ $line=$_.split(" ");cp  $line[0] $line[1]}
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: jjeennddaa 27. 01. 2015, 08:11:14
Jinak tu porad jeste mame Cygwin, ze....
Ano, ale ten musíme instalovat a ne vždy to lze.
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: Juro 27. 01. 2015, 08:26:48
Jinak tu porad jeste mame Cygwin, ze....
Ano, ale ten musíme instalovat a ne vždy to lze.
Lebo by nam nadriadeny mohol dolamat ruky, keby videl, aky kanon na vrabce aplikujeme na jedoduche problemy...
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: dustin 27. 01. 2015, 08:55:05
Lebo by nam nadriadeny mohol dolamat ruky, keby videl, aky kanon na vrabce aplikujeme na jedoduche problemy...

V tomto konkrétním případě to tak opravdu je. Nicméně mít cygwin na win strojích je pro linux admina výhodné. Snadno se v něm nakonfiguruje ssh server, lze mít téměř jednotné zálohovací řešení + lokální skripty pro win/lin stroje, atd. Sice přes ssh/cygwin nespustím lokální gui aplikaci, ale např. vzdálené vypnutí stroje po dokončení zálohování je ve win opruz - v cygwinu jen ssh .... shutdown.
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: Juro 27. 01. 2015, 09:01:34
Stop-Computer (lokalny aj vzdialeny)?
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: dustin 27. 01. 2015, 09:11:47
A jak se to zavolá z linuxového zálohovacího serveru?
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: Juro 27. 01. 2015, 09:30:48
Ak volas cygwinovsky shutdown cez ssh, vies aj PS (chapem, ze chces mat rovnake prostredia, to je asi jediny rozumny dovod).
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: dustin 27. 01. 2015, 09:33:54
Ale jak zavolám z linuxu ten PS bez cygwinního ssh? Zálohovací server si přes wol stroj zapne, zazálohuje (to by si mohl namontovat windowsí disky přes sambu, cygwin (ssh + rsync) by nepotřeboval. Ale jak jej vzdáleně vypne?
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: JardaP . 27. 01. 2015, 10:13:18
Ale jak jej vzdáleně vypne?

Zajde k rozvodne desce a vypne jistic.  ;)
Název: Re:Skriptování přesunu souborů ve Windows
Přispěvatel: Bořek Šikula 27. 01. 2015, 10:35:37
Ale jak zavolám z linuxu ten PS bez cygwinního ssh? Zálohovací server si přes wol stroj zapne, zazálohuje (to by si mohl namontovat windowsí disky přes sambu, cygwin (ssh + rsync) by nepotřeboval. Ale jak jej vzdáleně vypne?

Ale to přece umí Windows vzdáleně (shutdown -m) a proto to umí i Samba (net rpc shutdown).
Nejlepší je používat prostředky systému - není to pak závislé na instalaci něčeho dalšího. A to co nejjednodušší prostředky.
Proto jsem navrhoval pro řešení původního problému cmd (for /l), protože powershell ve starších Windows (XP) být nemusí.
Když dojde po nějaké havárii na reinstalaci, věci nepřestanou fungovat, protože tam někdo zapomene na aplikaci, která není potřeba k ničemu jinému.