Potřeboval bych pomoc,
potřebuju udělat úkol ve kterým píši dávkový soubor. Problém spočívá v tom že mám nějakou cestu např:
COPY "C:\Users\Prihlasovaci jmeno\Desktop "Muj SOUBOR"
Muj problem nastal v okamziku kdy musímé napsat takovou cestu při který máme jako neznámou složku Desktop ale přesto jí potřebujeme otevřít a vní další soubor o kterém už víme jak se jmenuje. Příklad uvádí že složka Desktop je tam jako jediná.
Mohl by jste mi prosím někdo poradit?
Fórum › OS - Windows
Příkazový řádek --> Pomoc prosím
Potřebuji pomocí souboru .BAT vypsat obsah do textového souboru .TXT (uloží se do aktuálního adresáře).
Chci, aby název výsledního souboru vypadal následovně:
seznam_ADR_DATUM.txt
Kde:
(a)
ADR = název aktuálního adresáře
Např. jsem-li aktuálně v adresáři (kam nakopíruji tento soubor BAT, který pak dvojklikem spustím)
C:\Users\MojeJmeno\AppData\Roaming\Microsoft\Internet Explorer\UserData
- tak, aby ADR byl jen "UserData", tj. pouze název toho adresáře jako takového.
(b)
DATUM = aktuální datum
Zatím mám toto:
rem seznam.bat: Vypis obsahu aktualniho adresare podle ABC
set filename=seznam_%date%.txt
chcp 1250
dir * /b /o:n /d > %filename%
Ovšem zde dostanu soubor ve tvaru "seznam_12-02-2018.txt".
Pokud ale udělám několik takových výpisů v ten stejný den a ty bych pak chtěl seřadit někam zvlášť (do nějaké pracovní složky), tak všechny mají stejný název...
Takže bych pro rozlišení do toho názvu souboru potřeboval nějakým způsobem ještě dostat název toho aktuálního adresáře.
#3 Ferdinand
ahoj pro batch je příkaz na testování názvu souboru "exist",
set cesta=seznam_%date%
set filename=%cesta%.txt
if exist %filename% goto Test1
goto Pokracuj
:Test1
set filename=%cesta%_1.txt
if exist %filename% goto Test2
goto Pokracuj
atd..
:Pokracuj
dir.... %filename%
já měl podobně udělaný script na denní zálohování DB na 7 dní zpět, ovšem měl jsem to bez datumu a pořadí jsem měl otočený - nejdříve test na filename-6 a pokud existovalo tak smazat, pak směrem dolů až k filename, kde jsem vždy přejmenoval na vyšší číslo fn-5 na 6 ... filename ->filename-1 a do filename uložil novou zálohu.
Také bys to mohl rozlišit časem
set filename=seznam_%date%_%time%.txt
tam by se ti názvy potkat neměly.
#1 saesa
na cestu k uživatelskému adresáři existuje systémová proměnná %userprofile%, takže zkus to takhle
copy "%userprofile%\Desktop\Muj soubor"
no otázkou je zadání,
- pokud bys chtěl zadat jinou cestu tak jsou 2 varinty bud dávku spouštět s parametrem, nebo mít v dávce input:
set /P cesta=Zadej cestu:
do cesta se uloží vstup
- pokud by šlo o hledání souboru, tam už by to bylo pomocí scriptu složitější
Zkus si projít
http://steve-jansen.github.io/guides/windows-batch-scripting/index.html
nebo
google "batch search in subdirs"
pro variantu hledání v podadresářích nejspíš odkaz
https://ss64.com/nt/for_r.html
na internetu se k batch scriptování toho dá najít dost, jen se snažit.
Nechci nic testovat. Chci jen prostě vypsat aktuální obsah adresáře. Pak tyto výpisy z různých adresářů zazálohovat do jediného pracovního adresáře - ale to se právě bije, protože ty soubory mají stejný název.
Rozlišení podle času je naprt. To mi neřekne, obsah kterého adresáře daný soubor obsahuje.
#6 Ferdinand
aktuální adresář je v sys proměnné %cd% , jen je tam celá cesta tzn od C:\..\..\..... pokud bys chtěl jen poslední tak
https://stackoverflow.com/questions/17279114/split-path-and-take-last-folder-name-in-batch-script
stačí hledat mě to zabralo 2 minutky najít správný odkaz
#7 MilanL
Nojo, ale když se ten adresář jmenuje např. "User Data" a nikoliv "UserData", tak mi to z toho vezme jen to "Data" a slovo "User" tam nebude.
Anebo naopak: pokud ty hodnoty ~0,-1 vynechám, tak veme jen "User" a slovo "Data" tam nebude.
Já chci, aby tam byl CELÝ NÁZEV aktuálního adresáře (v tomto příkladu: "User Data").
Většina mých adresářů je totiž pojmenovaných "víceslovně" - jako např. i v systému: "Program Files (x86)" .
CELÝ NÁZEV: nevyřešilo by to dát název nebo cestu souboru mezi " (uvozovky) ?
hu
#11 MilanL
Když jsem to zkoušel na příkazovém řádku, tak mi to nic neudělalo:
echo %foldername% ... vrací toto: %%~nxA
Kam tento řetězec mám zapsat v tom BAT-u?
Kde se do toho načte %cd%?
Nemá být namísto " ('cd') " toto: (%cd%) anebo toto: %cd% ?
#12 Ferdinand
ne musíš to mít v batu, ten for se skládá ze 3 řádek
for /f "delims=" %%A in ('cd') do (
set foldername=%%~nxA
)
v 1 řádku bys to musel mít
for /f "delims=" %%A in ('cd') do (set foldername=%%~nxA)
for /F viz https://ss64.com/nt/for_f.html
#13 MilanL
Mně to dá jen první slovo z celého názvu aktuálního adresáře, a není tam zakomponován datum. Ten adresář má v názvu 2 slova oddělené mezerou.
Mám to sestavené takhle (název souboru je: "seznam.bat", nakopírován do adresáře D:\Data\My Albums\Benedek Elek):
for /f "delims=" %%A in ('cd') do (
set foldername=%%~nxA
)
echo %cd%
echo %foldername%
set /P vstup=seznam
rem TADY TO MUSÍM RUČNĚ POTVRDIT. POKUD TO Z TOHO VYREMUJU, TAK TO PROBĚHNE TAKY, SE STEJNÝM VÝSLEDKEM.
set filename=seznam_%foldername%_%date%.txt
chcp 1250
dir * /b /o:n /d > %filename%
Výsledkem je soubor s názvem "seznam_Benedek.txt"
#16 MilanL
ten vstup set /P ... je tam kvůli tomu, aby se to okno při spuštění z win hned nezavřelo.
pokud nemáš vypnutý echo tak je vidět i průběh BATu a co se kam přiřazuje, viděl bys tam
set filename=seznam_Benedek Elek_datum.txt
i
dir * /b /o:n /d > seznam_Benedek Elek_datum.txt
a přesto ti to vytvořilo soubor jen seznam_Benedek - tady si mohl zjistit chybu, když u souboru chybí .txt sis toho asi ani nevšiml, bo v příspěvku ten název souboru píšeš s txt
#16 MilanL
for /f "delims=" %%A in ('cd') do (set foldername=%%~nxA) ... vrací toto: %%A nebyl nyní očekáván.
echo %cd% ... vrací toto: Data\My Albums\Benedek Elek\
echo %foldername% ... vrací toto: %foldername%
set filename=seznam_%foldername%_%date%.txt ... na dotaz: echo %filename% ... vrací toto: seznam_%foldername%_2018-02-15.txt
#18 Ferdinand
divný v #15 jsi psal, že ti to udělalo soubor seznam_Benedek a najednou ti nefunguje už ten for?
for /f "delims=" %%A in ('cd') do (
set foldername=%%~nxA
)
set filename=seznam_%foldername%_%date%.txt
chcp 1250
dir * /b /o:n /d > "%filename%"
set /P vstup=seznam
#20 Ferdinand
Když si na místě %filename% představíš úplnou cestu k souboru třeba C:\Program Files\My App\app.exe, tak to pochopíš. Vše mezi uvozovkami se považuje za jeden řetězec včetně mezer které obsahuje. Pokud je to bez uvozovek, každá mezera se považuje za oddělovač mezi parametry.
hu
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Příkazový řádek prosím pomozte — založil heh
Příkazový řádek a C — založil Tom
Přikazový řádek — založil easy
Příkazový řádek — založil radvis
QT příkazový řádek — založil Fic