Nejste přihlášen/a.

Přihlásit se do poradny

 

Jak přejmenovat soubory v DOSu

Od: h4ever® odpovědí: 25 změna:

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.

 

 

25 odpovědí na otázku
Řazeno dle hodnocení

 

 


0x

napriklad:


RENAME C:soubr.txt novejmenosouboru.txt

Jenže jak jsem naznačoval v příkladu, já neznám jméno souboru. Vím jenom jak začíná a který řetězec tam nechci

jo já přehlíd že v dávkovém souboru to se omlouvám

 

mirek333*

0x

tady píšou, že od XPček už tohle moc nejde:

answers.yahoo.com/...

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.

bena*

Můžete si zkusit nainstalovat třeba Xubuntu nebo jinou nenáročnou linuxovou distribuci přes Wubi - stáhnete si normálně instalačku, vložíte do virtuální mechaniky nebo ji vypálíte a jakoby ji spustíte. Tam pak zvolíte možnost Wubi - Wubi je jakoby Linux ve WIndowsech..


Či-li to jde normálně spustit z Windowsu? Tak to by bylo zajimavé. Někdy to zkusím.

 


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.
REN DSC_*.JPG Birthday_*.JPG
Done!

answers


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í (?).

mirek333*

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%"

doplněno 15.02.12 11:54:

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 off
cls
echo on
for /r %%x in (.www.slv.dk/Dokumenter/dsweb/Get) do ren %%x^
BG_AD_3_BG*.pdf _*.pdf
pause
Jen místo / použít zpětné lomítko
doplněno 15.02.12 14:07: A před "_*.pdf" je mezera, není moc dobře vidět
doplněno 15.02.12 14:08: Ještě jednou oprava:
for /r %%x in (./www.slv.dk/Dokumenter/dsweb/Get) do ren %%x^
BG_AD_3_BG*.pdf _*.pdf
doplněno 15.02.12 14:09: Do Get vytvoř složky a,b,c,d atd. a do toho dej ty pdf
mirek333*

já 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...


Cyklus správně vypisuje adresáře, ale přičítá k nim ještě další cestu ".
www.slv.dkDokumenterdswebGet což deta nechápu

 

dzordz*

0x

Asi blbá otázka, ale je nutné to provádět v dosu?


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.

pozor! neplést DOS a příkazovou řádku ( cmd.exe )


Proč ne, když to dělá jedno a to samé.

doplněno 15.02.12 16:54:

viz cs.wikipedia.org/wiki/Cmd

dzordz*

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 (?).

 


Sledujte výstup jednotlivých hlášek:

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

mirek333*

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

 


Můžeš mi vysvětlit jak to funguje? Co znamená ten argument for /f? Řádek 27? delims. tokens? Co znamená řádek 9 a 10?

doplněno 15.02.12 19:10:

Stále bych chtěl vědět co dělám špatně v tom svém řešení takže kam se obráti o radu?

 

mirek333*

0x

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ů:

experts-exchange.com/...

experts-exchange.com/...


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.

 


Tady je definitivní řešení.

codepaste.net/...

Je to teda ta nejjednodušší verze, která přejmenuje soubor a dosadí místo toho řetězce podtržítko.

Ale určitě by to šlo ještě vylepšit, aby se použila proměnná a podržízko by tam být nemuselo. To je ten mechanismus, který použil

@mirek

 

 


 

 

 

Přihlásit se k odběru odpovědí z této otázky:

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.

Copyright © 2004-2025 Poradna Poradte.cz. Všechna práva vyhrazena. Prohlášení o ochraně osobních údajů. | [tmavý motiv]