Nejste přihlášen/a.
Ahoj,
můžete mi poradit jak v dávkovém souboru DOSu přejmenovat soubory pdf?
for /r %%x in (.www.slv.dkDokumenterdswebGet) do ren "%%x"^
BG_AD_3_BG*.pdf *.pdf
Snažím se odstranit přebytečný řetězec, který je na začátku.
tady píšou, že od XPček už tohle moc nejde:
a radí použít Visual Basic (je tam i výpis skriptu)
Jinak by to byla hezká úloha pro PowerShell
V Linuxu v Bashi by to byla hračka... pomocí regulárních výrazů
Na stahuj.cz jsem našel program, který by to snad mohl umět. Ale manuál je dlouhý a zrovna teď nemám čas to číst. To byc chtělo nějaký program pro windows, který by zvládal alepoň základní linuxovské příkazy... Nechápu jak někdo mohl vymyslet DOS a neudělat tak základní a jednoduchou věc jako například implementace regulárních výrazů. Že bys napsal jen co hledáš a jaký řetězec se nemá zahrnovat do cílového názvu.
Potřeboval bych poradit s tímhle scriptem:
@Echo off
cls
echo on
for /r %%x in (.www.slv.dkDokumenterdswebGet) do ren %%x^
BG_AD_3_BG*.pdf _*.pdf
pause
Problém je v tom, že prohledávám adresář Get, jenže ve výsledku se mi zobrazují i jiné adrsáře, které jsou mimo strukturu adresáře Get, např. adresář View - viz níže:
c:program filesGnuWin32in>for /R %x in (.www.slv.dkDokumenterdswebGe
t) do ren %xBG_AD_3_BG*.pdf _*.pdf
c:program filesGnuWin32in>ren c:program filesGnuWin32in.www.sl
v.dkDokumenterdswebGetBG_AD_3_BG*.pdf _*.pdf
Systém nemůže nalézt uvedený soubor.
c:program filesGnuWin32in>ren c:program filesGnuWin32inwww.slv.
dk.www.slv.dkDokumenterdswebGetBG_AD_3_BG*.pdf _*.pdf
Systém nemůže nalézt uvedenou cestu.
c:program filesGnuWin32in>ren c:program filesGnuWin32inwww.slv.
dkDokumenter.www.slv.dkDokumenterdswebGetBG_AD_3_BG*.pdf _*.pdf
Systém nemůže nalézt uvedenou cestu.
c:program filesGnuWin32in>ren c:program filesGnuWin32inwww.slv.
dkDokumenterdsweb.www.slv.dkDokumenterdswebGetBG_AD_3_BG*.pdf _*.pdf
Systém nemůže nalézt uvedenou cestu.
c:program filesGnuWin32in>ren c:program filesGnuWin32inwww.slv.
dkDokumenterdswebGet.www.slv.dkDokumenterdswebGetBG_AD_3_BG*.pdf _*.pdf
Systém nemůže nalézt uvedenou cestu.
c:program filesGnuWin32in>ren c:program filesGnuWin32inwww.slv.
dkDokumenterdswebGetDocument-7405.www.slv.dkDokumenterdswebGetBG_AD_3_
BG*.pdf _*.pdf
Systém nemůže nalézt uvedenou cestu.
c:program filesGnuWin32in>ren c:program filesGnuWin32inwww.slv.
dkDokumenterdswebGetDocument-7406.www.slv.dkDokumenterdswebGetBG_AD_3_
BG*.pdf _*.pdf
Systém nemůže nalézt uvedenou cestu.
c:program filesGnuWin32in>ren c:program filesGnuWin32inwww.slv.
dkDokumenterdswebGetDocument-900.www.slv.dkDokumenterdswebGetBG_AD_3_B
G*.pdf _*.pdf
Systém nemůže nalézt uvedenou cestu.
c:program filesGnuWin32in>ren c:program filesGnuWin32inwww.slv.
dkDokumenterdswebGetDocument-901.www.slv.dkDokumenterdswebGetBG_AD_3_B
G*.pdf _*.pdf
Systém nemůže nalézt uvedenou cestu.
c:program filesGnuWin32in>ren c:program filesGnuWin32inwww.slv.
dkDokumenterdswebGetDocument-903.www.slv.dkDokumenterdswebGetBG_AD_3_B
G*.pdf _*.pdf
Systém nemůže nalézt uvedenou cestu.
c:program filesGnuWin32in>ren c:program filesGnuWin32inwww.slv.dkDokumenterdswebGetDocument-905.www.slv.dkDokumenterdswebGetBG_AD_3_BG*.pdf _*.pdf
Systém nemůže nalézt uvedenou cestu.
c:program filesGnuWin32in>ren c:program filesGnuWin32inwww.slv.
dkDokumenterdswebView.www.slv.dkDokumenterdswebGetBG_AD_3_BG*.pdf _*.pd
f
Systém nemůže nalézt uvedenou cestu.
c:program filesGnuWin32in>pause
Pokračujte stisknutím libovolné klávesy...
Rozumí tomu někdo? Nechápu pro to poříd píše že mám špatnou cestu a hlavně ten poslední výpis je mimo adresář Get.
doplněno 14.02.12 15:34:Best Answer
The DOS command RENAME (or REN) works with wildcards.Podle tohoto linku by toto mělo fungovat a taky funguje, ale potřeboval bych rozjet výše uvedený script tedy, aby byly procházeny všechny adresáře v jedné úrovni a v nich se provedlo přejmenování. Ale i tak tam asi musím do cíle strčit minimálně to podtržítko, jinak to neprovede přejmenování (?).
Vytvořil jsem skript a otestoval jsem jej u sebe na Win7. Jako testovací soubory jsem měl tři PDFka, jejichž názvy začínaly řetězcem "BG_AD_3_BG". Soubory i skript byly ve stejné složce na mém disku. Skript smazal prvních deset znaků ze všech jmen souborů. Takže to funguje.
Pokud ti to nepojede, vlož korektní výpis skriptu bez zmršených znaků, záleží tu na každém lomítku a závorce a výpis, cos tu dával, nejde vůbec číst.
Echo off
cls
echo on
for %%i in ("BG_AD_3_BG*.pdf") do (set fname=%%i) & call :rename
pause
goto :eof
:rename
ren "%fname%" "%fname: 10%"
radši jako obrázek, některé znaky ve výpisu neprošly správně:
Díky za angažmá. Já právě řeším to že potřebuju projít určitý počet adresářů a souborů. Například:
./a/b*.pdf
./b/b*.pdf
./c/b*.pdf
./d/b*.pdf
./e/b*.pdf
atd.
Takže tvůj příklad by asi fungoval jen na jednu složku. Na jednu složku to umím taky pomocí jednoduchého příkazu, ale právě nechápu v čem je ten tvůj script jiný. Jen je delší a složitější.
No jo, tady není možnost vložit kód a proto se všechny lomítka vypustili.
doplněno 15.02.12 14:06: @Echo offjá jsem našel to delší řešení, protože to kratší mi nešlo.
co se týče procházení podsložek, tak For /R mi nefunguje, protože to umaže deset prvních znaků z celé cesty, ne ze samotného názvu souboru. Zkusím najít nějaké řešení.
Ještě jednou oprava, ještě lomítko na druhém řádku scházelo. Tady to zjednoduším - dotaz na výpis podadresářů mi nefunguje:
@Echo off
cls
echo on
for /r %%x in (./www.slv.dk/Dokumenter/dsweb/Get) do echo %%x^
/
pause
Krom prvního lomítka se musí dosadit zpětné lomítko místo /.
Vyzkoušej, a řekni co si o tom myslíš.
Mě to vrací:
c:/program files/GnuWin32/bin>for /R %x in (.www.slv.dkDokumenterdswebGe
t) do echo %x
c:/program files/GnuWin32/bin>echo c:/program files/GnuWin32/bin.www.s
lv.dkDokumenterdswebGet
c:/program files/GnuWin32/bin.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/bin>echo c:/program files/GnuWin32/binwww.slv
.dk.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/binwww.slv.dk.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/bin>echo c:/program files/GnuWin32/binwww.slv
.dkDokumenter.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/binwww.slv.dkDokumenter.www.slv.dkDokumenter
dswebGet
c:/program files/GnuWin32/bin>echo c:/program files/GnuWin32/binwww.slv
.dkDokumenterdsweb.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/binwww.slv.dkDokumenterdsweb.www.slv.dkDokum
enterdswebGet
c:/program files/GnuWin32/bin>echo c:/program files/GnuWin32/binwww.slv
.dkDokumenterdswebGet.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/binwww.slv.dkDokumenterdswebGet.www.slv.dkD
okumenterdswebGet
c:/program files/GnuWin32/bin>echo c:/program files/GnuWin32/binwww.slv
.dkDokumenterdswebGetDocument-7405.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/binwww.slv.dkDokumenterdswebGetDocument-7405
.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/bin>echo c:/program files/GnuWin32/binwww.slv
.dkDokumenterdswebGetDocument-7406.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/binwww.slv.dkDokumenterdswebGetDocument-7406
.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/bin>echo c:/program files/GnuWin32/binwww.slv
.dkDokumenterdswebGetDocument-900.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/binwww.slv.dkDokumenterdswebGetDocument-900.
www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/bin>echo c:/program files/GnuWin32/binwww.slv
.dkDokumenterdswebGetDocument-901.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/binwww.slv.dkDokumenterdswebGetDocument-901.
www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/bin>echo c:/program files/GnuWin32/binwww.slv
.dkDokumenterdswebGetDocument-903.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/binwww.slv.dkDokumenterdswebGetDocument-903.
www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/bin>echo c:/program files/GnuWin32/binwww.slv
.dkDokumenterdswebGetDocument-905.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/binwww.slv.dkDokumenterdswebGetDocument-905.
www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/bin>echo c:/program files/GnuWin32/binwww.slv
.dkDokumenterdswebView.www.slv.dkDokumenterdswebGet
c:/program files/GnuWin32/binwww.slv.dkDokumenterdswebView.www.slv.dk
DokumenterdswebGet
c:/program files/GnuWin32/bin>pause
Pokračujte stisknutím libovolné klávesy...
No tak vzhledem k tomu, že mám WIndows a Windows je taky jednodduší na ovládání než Linux, beru ten DOS a myslím tím cmd.exe. Rád bych to už konečně jednou pro vždy vyřešil tuhle záhadu. Hromadné přejmenování typu
rename zbytecny_retezec_*.pdf _*.pdf
jede bez problému, ale snažím se to přejmenovat uvnitř všech složek které jsou ve složce Get. Můžete si to vyzkoušet pomocí nástroje wget, když z nějaké stránky stáznete dokumenty pdf.
Téhle odpovědi stejně nerozumím, jestli to teda musí být .bat fungující v dosu, nebo jestli to bude stačit ve windows
Asi bych na to vzal total commander, dojít do nejvyššího společného adresáře, Commands: Search, *.pdf, hloubku subdirectories dát All. Po vyhledání Feed to listbox, což hodí všechny nalezené soubory do jednoho z pracovních oken, tam ctrl+A, ctrl+M, nastavit přejmenování a spustit.
Nebo co kdyby se v tom .batu vycházelo z dir /b /s>seznam.txt a pak místo procházení složek v systému jen procházet po řádcích záznamy? Nevím, co všechno dávkové soubory dokážou, třeba by to šlo.
Pro mě je to prostě konzola DOSu, takže prostě ve Windows, ale s konzolí, kde používáte DOSovské příkazy (cmd.exe).
Ale to všechno vím, že je možné prostě jen prohledat pdf a přesunout, ale já chci vytvořit dávkový příkaz, který po stažení souborů z internetu automaticky přejmenuje ty soubory. Prostě nevidím důvod proč by to nemělo jen, jenže asi tady ani jeden z nás nerozumí základům toho jak funguje cmd.exe
doplněno 15.02.12 17:30:Napsal jsem už jeddnodušší příkaz, ale ono to sem nejde odeslat. Lepší je zpracovávat jednotlivé adresáře samostatně, použít & pauze uvnitř vykonávací části cyklu for. Ta chyba se opakuje hned od okamžiku, kdy se vypisuje proměnná f. Jak to zatím chápu: jako by se k proměnné f pričítala ta cesta, která je zadána jako vstupní argument funkce for in (?).
codepaste.net/iccfzu
První řádek OK.
Druhý řádek fail. V adresáři bin/www.slv.dk/ se nenachází adresář www.slv.dk!Třetí řádek: V adresáři bin/www.slv.dk/Dokumenter se nenachází adresář www.slv.dk!Atd.doplněno 15.02.12 17:55:Kam jinam se obrátit na radu? Víte někdo
Takže tento kód mě funguje na přejmenování PDFek a to rekurzivně - viz foto. Přejmenuje jak kořenové soubory, tak první úroveň (složka "a") tak i druhou úroveň (složka "aa")
vkládám radši jako obrázky
a takto vypadají složky, v každé byly tři různá PDFka:
doplněno 15.02.12 19:14:jinak jsem se s tím dost potrápil, zjistil jsem, že pokud použiju for /r (tedy rekurzivní procházení), tak potom v příkazu rename nemůžu mít v druhém parametru (cílový soubor) plnou cestu, jinak to háže chybu syntaxe. Takže ten skript dělá to, že za prvé maže příslušný řetězec ze začátku názvu souboru, zadruhé maže z plné cesty všechno po poslední obrácené lomítko, aby to pak mohl předat konečně příkazu rename (nebo "ren").
Skript jsem nevymyslel, ale upravil jsem skripty ze zdrojů:
O rekurzivní procházení mi ani nešlo. Měl jsem za to, že ten můj script by měl procházet adresáře v první úrovni bez /r. Ale co já vím, proč to nejde.
doplněno 15.02.12 19:51:Ten script je šílený. Jako je fajn, že funguje, ale vůbec nechápu jak někdo něco takového mohl vymyslet. Se mi pořád nechce věřit, že ten příkaz for dokáže takhle zamíchat cestu.
doplněno 15.02.12 20:01:Takže jsem se rozhodl hledat radu jinde. Díky.
Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.
Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.