--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Wstaw plik.txt na końcu polecenia
--
Piotr Palusiński [Microsoft MVP - Windows Desktop Experience]
https://mvp.support.microsoft.com/profile/Piotr.Palusinski
news://msnews.microsoft.com/microsoft.public.pl.windows
Nigdy nie kłóć się z głupcem, bo ludzie mogą nie dostrzec różnicy
Jeden plik naraz do wielu folderów docelowych? Nie da się.
Musisz zrobić skrypt kopiujący zawsze po jednym pliku (do
jednego folderu docelowego).
--
|""""""""""""""""""""""""""""""""""""""""""""""""""""""""""|
| Radosław Sokół | http://www.grush.one.pl/ |
| | Politechnika Śląska |
\........................................................../
Nie wiem jak pod DOSem ale pod Windows możesz skorzystać z pętli for:
for /d %f in (*) do copy plik.txt "c:\Dane\%f\Ksiegowosc\Magazyn"
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 1 day, 6 hours, 38 minutes and 51 seconds
xcopy c:\Dane\Ksiegowosc\Magazyn\*.* " /e /h /k /r /c d:\archiwum\plik.txt
PS.
Cudzysłów jest potrzebny, gdy nazwa ma spacje.
np.
xcopy "c:\program files\*.*" /e /h /k /r /c "d:\archiwum\plik.txt"
Piotr, przecież to nie ma prawa działać. Nie wiem skąd pomysł żeby odwrócić
kolejność ścieżek. Pierwszym parametrem programu xcopy jest źródło a drugim
cel. My chcemy kopiować plik do katalogów.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 1 day, 7 hours, 33 minutes and 8 seconds
Uff, mój błąd, żle doczytałem :-(.
copy X:\plik.txt c:\Dane\*.*\Ksiegowosc\Magazyn
Niestety tak też się nie da, w pierwszym poście masz napisane, że tak nie
działa. Z xcopy też nie, przynajmniej moje próby z xcopy nie dały rezultatu.
Tak jak pisze Radek, zostaje tylko skrypt.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 1 day, 8 hours, 2 minutes and 14 seconds
Pod X podstawić lokalizację pliku "plik.txt".
--
Chopin
"Gdynia Moje Miasto"
staw...@wUpE.pEEl
kurcze szkoda, myślałem że zadziała tak jak w unix'sie:
cp plik.txt /home/Dane/*/Ksiegowosc/Magazyn
Skoro znasz Uniksa to powinieneś wiedzieć, że w skryptach można korzystać z
pętli i jedna linijka może załatwić wszystko :)
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 1 day, 9 hours, 1 minutes and 49 seconds
Pod czystym DOSem? Jak wersja? Czy może chodzi o wiersz polecenia z Windows?
Bo jak o wiersz polecenia (cmd.exe) to skrypt masz podany w tym wątku.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 1 day, 9 hours, 17 minutes and 0 seconds
Pod czystym DOSem będzie trudniej bo tam pętla for nie była tak
zaawansowana. Z tego co widzę, to leciała po plikach tylko a po katalogach
jużnie. Może jakiś dosowy wymiatacz sobie z tym łatwo poradzi ale ja nie mam
pomysłu. Trzeba chyba jednak zrobić tak jak pisałeś, zrobić wielki skrypt.
Pod DOSem można wydać polecenie:
dir /b /ad > spis.txt
które zrobi listę katalogów w pliku, z tego spisu można potem każdym trochę
bardziej zaawansowanym edytorem tekstowym albo skryptem wygenerować plik
BAT.
Niemniej jednak ciągle mam nadzieję, że ktoś pamiętający DOS 6.22 poda
jakieś sensowniejsze rozwiązanie. Może program w QBasicu, który był w DOSie
na pokładzie?
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 1 day, 9 hours, 46 minutes and 34 seconds
> dziekuje to polecenie:
> for /D %f in (C:\Dane\*.*) do copy X\plik.txt "%f\Ksiegowosc\Magazyn" /Y
> działa super, ale niestety musze to wykonać pod czystym DOS'em 6.22
O Dosa powinieneś pytać grupę pl.comp.os.ms-windows.win3, a tam dostałbyś
odpowiedź:
* Zamiast command.com można użyć innego procesora poleceń, np. darmowego
4DOS.
* Można poszukać dosowych wersji linuksowych narzędzi (np. w dystrybucji
FreeDosa).
* Szybkie napisanie pliku wsadowego z wymienionymi setkami podkatalogów to
kwestia znajomości opcji polecenia dir i użycia dobrego edytora tekstowego
do edycji rezultatów wykonania tego polecenia.
Cross+FUT: pl.comp.os.ms-windows.win3
--
Andrzej P. Woźniak us...@pochta.onet.pl (zamień miejscami z<->h w adresie)
> W dniu 04.08.2010 17:19, sko...@op.pl pisze:
>> Musze skopiowac plik.txt do folderu a dokładnie do:
>> copy plik.txt c:\Dane\*\Ksiegowosc\Magazyn
>> gdzie * to różne nazwy folderów. Jest ich prawie 600 sztuk.
>
> Jeden plik naraz do wielu folderów docelowych? Nie da się.
> Musisz zrobić skrypt kopiujący zawsze po jednym pliku (do
> jednego folderu docelowego).
No właśnie tak mnie zastanowiło to, tak myślałem jak to możliwe, ale
uznałem, że po prostu kiedyś widocznie nie miałem takiej potrzeby lub nie
wiedziałem że jest taka możliwość, gwiazdkowania sobie ścieżek dostępu :)
A i nic nie napisałem bo i w sumie po co... A pomyśleć, że jeszcze
niedawno wiara w szkole podstawowej wkuwała na pamięć komendy, ciekawe
kiedy przestała :)
--
pzdr, Piotr M
"Najczęstsze kłamstwo w Internecie?
- Szukałem, ale nie znalazłem."
;-)
Może pomoże:
for /R C:\Dane %%I in (.) do copy "C:\plik.txt" "%%I\plik.txt"
--
MICHAL: Mechanical Intelligent Calculation
and Hazardous Assassination Lifeform
BIEK: Being Intended for Exploration
and Killing ...
W DOS 6.22 polecenie for nie obsługuje przełącznika /R, nie obsługuje
żadnych przełączników :)
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 1 day, 10 hours, 46 minutes and 36 seconds
A co ony PC nie ma FDD, USB albo CD-Roma?
A co lepszego DOS nie można zdobyć? :-)
--
dos7x@winner!
Jego pytaj :)
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 1 day, 11 hours, 41 minutes and 41 seconds
> kurcze szkoda, myślałem że zadziała tak jak w unix'sie:
> cp plik.txt /home/Dane/*/Ksiegowosc/Magazyn
Pod unixem to nie zadziała.
Poza tym to nie unix wykonuje 'cp', a powłoka. Najczęściej bash.
Pod ms-dosa był port basha, ale skoro ta metoda nie zadziała nic to nie
pomoże.
--
Mar.
Powinno zadziałać, to co pamietam z DOS-a, a teraz nie mam do niego dostępu
do czystego 6.22 (sprawdze dzisiaj w pracy)
xcopy X:\plik.txt c:\Dane\*.*\Ksiegowosc\Magazyn /E /H
Dziwnego języka polskiego używasz, bo u mnie pisze się "uniksie". Z AIX
może być już trudniej, bo właściwie nie wiadomo czy w ogóle powinno się
to odmieniać. Ale nawet jeśli, to na pewni nie należy tu używać
apostrofu.
A bardziej do rzeczy - nie ma prawa działać w żądany sposób, bo shell
rozwinie symbol wieloznaczny i będzie chciał skopiować wiele źródeł do
jednego celu.
bash:
#v+
~/test$ touch source
~/test$ mkdir dest1
~/test$ mkdir dest2
~/test$ cp source dest*
cp: omitting directory `dest1'
#v-
tcsh:
#v+
poznojuz:~/test> cp source dest*
cp: omitting directory `dest1'
#v-
--
Kruk@ -\ |
}-> epsilon.eu.org |
http:// -/ |
|
Nie działa i nie powinno działać, choćby dlatego, że XCOPY na DOS 6.22 nie
obsługuje parametru /H. Bez niego też nie zadziała.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 1 day, 20 hours, 21 minutes and 31 seconds
--
Pozdrawiam,
Chopin
"Gdynia moje misto"
Nie miałem czasu na sprawdzenie.
Co do parametru /H, to jest OK.
PS. (to nie dla Ciebie Grzesiu)
Copy - sluzy zazwyczaj do kopiowania plikow (bez katalogow)
ponadto ma mozliwosc laczenia kilku plikow w jeden
Xcopy - W trybie DOS (rzeczywistym) obsługuje kopiowanie z podkatalogami,
ale tylko w trybie krótkich nazw.W trybie Windows wywołuje po prostu
xcopy32.
Xcopy32 - ma najszerszy zakres możliwości (pracuje tylko na sterowniku
VFAT): długie nazwy, podkatalogi, synchronizacja wg dat, pomijanie błędów
kopiowania (umożliwia pominięcie kopiowania swapa Windows) itp.
W trybie DOS xcopy32 po prostu wywołuje xcopy.
Aby poznac dokladnie cala skladnie danego polecenia w danej wersji DOS-u,
polecam podac komende ze znakiem zapytania np.
copy /?
xcopy /?
xcopy32 /?
A może zastosować jakiś zewnętrzny programik?.
X - lokalizacja pliku tekstowego
Niestety nie mam po ręką DOS'a 6.22 więc nie sprawdzę czy moja rada się
przyda.
Jedna uwaga, jeśli chcesz to wrzucić w plik *.bat to przy zmiennych
należy dać dwa znaki %, czyli będzie: %%f.
Więc skąd wiesz, że jest OK? ;) Odpaliłem DOS 6.22 i tam xcopy nie ma
parametru /H. Wprowadzono go później, pewnie w Windows 95.
> A może zastosować jakiś zewnętrzny programik?.
Tak, ewentualnie wygenerować ten 600-linijkowy skrypt.
XCOPY samo w sobie niestety nie da rady, ani pod DOS ani pod Windows. Można
je umieścić w pętli ale FOR idący po katalogach występuje w Windows a pod
DOS 6.22 go nie ma, tzn. jest ale umie tylko iść po plikach.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 2 days, 2 hours, 27 minutes and 43 seconds
Nawet OK ale nie ma sensu pisac *.*. Jedna gwiazda wystarcza a zapis *.*
powoduje, że do listy trafiają też niepotrzebnie katalogi . i ..
> for %f in (C:\lista.txt) do copy X\plik.txt c:\Dane\%f\Ksiego~1\Magazyn /Y
W DOS FOR nie ma możliwości analizownia zawartości pliku.
Ehhh...!
Dobra...! Nie ma nic z w/w.
Znajduje FDD...CD-ROM... lepszego DOSa,
a reszta to naleśniki z serem i rodzynkami :-)
PS
1 wątkujący i co poniektórzy ma(ją) chyba siakieś zaparcie na DOS 6.22.
BTW mój kot mi podpowiada, że:
- PC pracuje również w sieci
- SO to chyba Win 3.1 for Wrkgrps
A magiczna kula pokazuje mi, że inkryminowaną operację można także wykonać
po skopiowaniu folderów na inny PC np. z XP, a później zooperowanymi
nadpisać stare.
PSS
SRY, ale szkoda czasu na dyrdymały! Pa, Grzesiu!
--
DOS Show
Fakt, teraz sprawdziłem i nie widzę H ;-(
>> A może zastosować jakiś zewnętrzny programik?.
>
> Tak, ewentualnie wygenerować ten 600-linijkowy skrypt.
> XCOPY samo w sobie niestety nie da rady, ani pod DOS ani pod Windows.
> Można je umieścić w pętli ale FOR idący po katalogach występuje w Windows
> a pod DOS 6.22 go nie ma, tzn. jest ale umie tylko iść po plikach.
W tym sęk.
>> for %f in (C:\lista.txt) do copy X\plik.txt
>> c:\Dane\%f\Ksiego~1\Magazyn /Y
>
> W DOS FOR nie ma możliwości analizownia zawartości pliku.
>
No cóż jeżeli tak jest to zrobiłbym tą akcję następująco.
Przenoszę plik lista.txt (wynik polecenia DIR) na komputer gdzie jest
arkusz kalkulacyjny (MS Office, Open Office, Gnumeric, etc...).
Zawartość pliku lista.txt wklejam w skoroszycie do kolumny B. W kolumnie
A wprowadzam "copy c:\Dane" i kopiuję ten sam tekst w dół (klikając na
czarny punkcik w prawym dolnym rogu komórki). W kolumnie C
"Ksiego~1\Magazyn /Y" i też kopia w dół. Następnie całą zawartość
arkusza kopiujemy np. do notatnika.
W efekcie otrzymamy strukturę:
copy c:\Dane F001 Ksiego~1\Magazyn /Y
copy c:\Dane F002 Ksiego~1\Magazyn /Y
...
Zamieniamy tabulator (w notatniku Ctrl+H) na znak: \
Potwierdzamy zamianę wszystkich tabulatorów. Zapisujemy plik jako
nazwa.bat, przenosimy na docelowy komputer i go uruchamiamy :-).
--
Pozdrawiam,
Chopin
"Gdynia moje miasto"
Czy ja pisałem coś o parametrze /A:D? Lista dzięki niemu jest ograniczona i
ja temu ani nie przeczę ani nie podważam zasadności. Odniosłem się jedynie
do zapisu *.*, który lepiej zaminieć na * a parametr powinien zostać bo jest
potrzebny :)
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 2 days, 22 hours, 9 minutes and 49 seconds
BTW--->czy to na pewno odpowiednia grupa ?
Pobierz sed-a pod MS-DOS
http://www.pement.org/sed/sed15exe.zip
dir /AD /S /B C:\Dane > dirlist
sed.exe "#^#copy plik.txt #g" dirlist > copy.bat
Pomysł dobry, tylko trzeba znaleźć sed pod DOS, bo ten link co podałeś
prowadzi do seda pod Windows.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 6 days, 4 hours, 6 minutes and 23 seconds
Ja testowałem pod dosemu. Działa, z tymże lista katalogów może zbyt duża
(dużo innych podkatalogów) to można na przykład tak.
sed "/Magazyn[ ]*$/!d;s#[ ]*$##g;s#^#copy file.txt ##g" dirlist > copy.bat
Listing zawiera przed końcem nowem linij 11 spacji (nie mam pojęcia skąd
się biorą). Teraz jes usuwam.
Pobieramy seda for MS-DOS.
http://www.pement.org/sed/sed15x.zip
Robimy listę podkatalogów (wszystkich)
dir /AD /S /B C:\Dane > dirlist
#Ograniczamy listę do celu kopiowania, c:\Dane\*\Magazyn
sed "/Magazyn[ ]*$/!d"
#usuwamy niepotrzebne spacje przed znakiem nowej linii
sed "s#[ ]*$##g"
#Zamieniamy linię z nazwą katalogu
sed "s#^#copy file.txt #g"
A teraz wszystko w jednej linijce (i bez pomyłek)
sed "/Magazyn[ ]*$/!d;s#[ ]*$##g;s#^#copy file.txt #g" dirlist > copy.bat
Sam DOS jes ułomny i nie można za jego pomocą wczytywać danych z pliku
czy rurki do dlaszej obróbki. Ale skoro sed to czemu od razu nie awk? A
narządź ten potrafi więcej niż wszystkie polecenia DOS-a ;)
Pobierasz awk dla DOS z ftp://garbo.uwasa.fi/pc/unix/awk9708.zip
Tworzysz plik tekstowy skrypt.awk o zawartości:
BEGIN {
FILE = "PLIK.TXT"
DIR1 = "C:\\DANE"
DIR2 = "KSIEGOWO\\MAGAZYN"
while("DIR /B /A:D " DIR1 | getline>0) {
DOUT = DIR1 "\\" $0 "\\" DIR2
print "Kopiuje " FILE " do katalogu " DOUT
system("COPY /Y " FILE " " DOUT)
}
}
I uruchamiasz poleceniem
awk -f skrypt.awk
Wszystko gra i bucy bez konieczności tworzenia 600-linijkowego bata.
Resolving garbo.uwasa.fi... 193.166.120.5
Connecting to garbo.uwasa.fi|193.166.120.5|:21... failed: Connection
refused.
Działa np. http://www-ftp.lip6.fr/pub/freedos/gnuish/awk9708.zip
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 7 days, 11 hours, 49 minutes and 48 seconds