Příkazový řádek --> Pomoc prosím – OS - Windows – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Příkazový řádek --> Pomoc prosím – OS - Windows – Fórum – Programujte.comPříkazový řádek --> Pomoc prosím – OS - Windows – Fórum – Programujte.com

 

saesa0
Duch
10. 12. 2010   #1
-
0
-

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?

Nahlásit jako SPAM
IP: 82.150.162.–
CZechBoY+4
Věrný člen
14. 12. 2010   #2
-
0
-

tak dej ten BAT do složky Desktop a pak bereš jen relativní cestu...

Nahlásit jako SPAM
IP: 213.192.10.–
14. 2. 2018   #3
-
0
-

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.

Nahlásit jako SPAM
IP: 213.235.140.–
MilanL+1
Grafoman
14. 2. 2018   #4
-
0
-

#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.

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Grafoman
14. 2. 2018   #5
-
0
-

#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.

Nahlásit jako SPAM
IP: 91.139.9.–
Ferdinand
~ Anonymní uživatel
7 příspěvků
14. 2. 2018   #6
-
0
-

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.

Nahlásit jako SPAM
IP: 213.235.140.–
MilanL+1
Grafoman
14. 2. 2018   #7
-
0
-
Nahlásit jako SPAM
IP: 91.139.9.–
Ferdinand
~ Anonymní uživatel
7 příspěvků
14. 2. 2018   #8
-
0
-

#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)" .

Nahlásit jako SPAM
IP: 213.235.140.–
14. 2. 2018   #9
-
0
-

CELÝ NÁZEV: nevyřešilo by to dát název nebo cestu souboru mezi " (uvozovky) ?

hu

Nahlásit jako SPAM
IP: 195.178.67.–
peter
~ Anonymní uživatel
3981 příspěvků
14. 2. 2018   #10
-
0
-

Pouziti uvozovek, viz Milan, jeden z prikladu nahore.

copy "%userprofile%\Desktop\Muj soubor"

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:38...–
MilanL+1
Grafoman
14. 2. 2018   #11
-
0
-

#10 peter
#9 hlucheucho
POZOR ve vlákně jsou 2 různé dotazy od 2 lidí #1 a #3

Ferdinand chce z cesty proměnná %cd% vybrat poslední subdir

opět 2 minutky hledání a 5 min zkoušení

for /f "delims=" %%A in ('cd') do (
     set foldername=%%~nxA
    )
echo %foldername%                    poslední subdir včetně mezer 

Nahlásit jako SPAM
IP: 91.139.9.–
Ferdinand
~ Anonymní uživatel
7 příspěvků
14. 2. 2018   #12
-
0
-

#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% ?

Nahlásit jako SPAM
IP: 213.235.140.–
MilanL+1
Grafoman
14. 2. 2018   #13
-
0
-

#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

Nahlásit jako SPAM
IP: 185.112.167.–
MilanL+1
Grafoman
14. 2. 2018   #14
-
0
-
Nahlásit jako SPAM
IP: 185.112.167.–
Ferdinand
~ Anonymní uživatel
7 příspěvků
15. 2. 2018   #15
-
0
-

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"

Nahlásit jako SPAM
IP: 213.235.140.–
MilanL+1
Grafoman
15. 2. 2018   #16
-
0
-

#15 Ferdinand
problém je jinde Filename s mezerama musíš mít v řádku s dir v apostrofech jinak to první mezerou skončí

dir * /b /o:n /d > "%filename%"

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Grafoman
15. 2. 2018   #17
-
0
-

#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

Nahlásit jako SPAM
IP: 91.139.9.–
Ferdinand
~ Anonymní uživatel
7 příspěvků
15. 2. 2018   #18
-
0
-

#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

Nahlásit jako SPAM
IP: 213.235.140.–
MilanL+1
Grafoman
15. 2. 2018   #19
-
0
-

#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

Připojen obrázek.

Nahlásit jako SPAM
IP: 91.139.9.–
Ferdinand
~ Anonymní uživatel
7 příspěvků
15. 2. 2018   #20
-
0
-

Už to funguje. najednou??? - nechápu     ... kromě přidání těch uvozovek v řádku  
dir * /b /o:n /d > "%filename%"
jsem  s tím nic nedělal

Nahlásit jako SPAM
IP: 213.235.140.–
15. 2. 2018   #21
-
0
-

#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

Nahlásit jako SPAM
IP: 195.178.67.–
15. 2. 2018   #22
-
0
-

#16 MilanL
a zase jsme u těch uvozovek, již 2x zmíněných o dost výše.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
MilanL+1
Grafoman
15. 2. 2018   #23
-
0
-

#22 hlucheucho
jo vím a mě to při testování dojde, když vidím v cmd sekvence. Jsem tu dir řádku kopíroval z původního dotazu a uvozovky zapoměl doplniti.

Nahlásit jako SPAM
IP: 185.112.167.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

Přikazový řádek — založil easy

Příkazový řádek — založil radvis

QT příkazový řádek — založil Fic

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý