Fórum Root.cz
Hlavní témata => Windows a jiné systémy => Téma založeno: 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?
-
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
;)
-
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 :-)
-
Naposledy jsem to resil tak, ze jsem si ten soubor copypastnul v putty na vzdaleny linux a tam ve vimku z nej vygeneroval .bat ;)
-
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.
-
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.
-
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 ;)
-
A pak WIN mají powershell. V tom jdou "zázraky".
-
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?
-
Jinak tu porad jeste mame Cygwin, ze....
-
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
-
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
-
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.
-
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]}
-
Jinak tu porad jeste mame Cygwin, ze....
Ano, ale ten musíme instalovat a ne vždy to lze.
-
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...
-
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.
-
Stop-Computer (lokalny aj vzdialeny)?
-
A jak se to zavolá z linuxového zálohovacího serveru?
-
Ak volas cygwinovsky shutdown cez ssh, vies aj PS (chapem, ze chces mat rovnake prostredia, to je asi jediny rozumny dovod).
-
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 jak jej vzdáleně vypne?
Zajde k rozvodne desce a vypne jistic. ;)
-
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.