x-kom hosting

Kopiowanie plików

adrianb100
utworzono
utworzono (edytowane)

Witam wszystkich użytkowników.
Chciałbym stworzyć "programik", komendę lub jakiś skrót, po kliknięciu którego skopiuje dany plik/pliki do innego folderu.
Dokładniej chodzi mi o to, ze przechodząc z jednego komputera na drugi z moim pendrive'm nie musze kopiować kilka plików z różnych folderów i ich szukać tylko za pomocą skrótu kopiuje się to automatycznie.:/
Z góry THX
Jestem początkujący na tym forum więc jesli napisałem ten temat w złym miejscu to z góry przepraszam :D

Edytowane przez benkowik
Zły poddział, przenoszę do programowanie

tom300
komentarz
komentarz (edytowane)

Możesz użyć plików BAT. Dla przykładu:
[code]
copy folder_na_pendrivie\plik1.txt D:\folder_na_dysku\plik1.txt
[/code]
Zapisz to jako plik bat. Ten kod skopiuje plik1.txt do folder_na_dysku. I w ten sposób wypisujesz pokolei pliki. Jeśli będziesz mieć problemy poszukaj więcej informacji w googlach nt. plików BAT.

Edytowane przez tom3001
adrianb100
komentarz
komentarz

A jeśli chcę skopiować na pendrive pliki znajdujące sie w folderze c:\Document and settings\"użytkownik"\ulubione
a na każdym komputerze użytkownik ma inną nazwe. Czy jest jakaś formuła, która zastępuje wszystkie nazwy użytkowników lub cośtakiego że po kliknięciu wyskakuje pole do wprowadzenia nazwy użytkownika i po wprowadzeniu jej sam podstawia pod "użytkownik" daną nazwe profilu.

wojtex5
komentarz
komentarz (edytowane)

poczytaj o zmiennych środowiskowych a dokładniej o wywoływaniu - nazwę użytkownika przechowuje jedna z nich w każdym windowsie i DOSie - jest to zmienna username

aby uzyskać wartość zmiennej środowiskowej zapisujesz jej nazwę jako %nazwa_zmiennej%.
czyli nie musisz pytać użytkownika o nazwę swojego profilu (chyba że chcesz wysłać pliki z innego konta)
wystarczy zrobić coś takiego:
[code]copy c:\Document and settings\%username%\ulubione folder_na_pendrivie\plik1.txt[/code]
[b]edit: tu powinno zostać poprawione na: [code]copy "c:\Document and settings\%username%\ulubione" folder_na_pendrivie\plik1.txt[/code]
bo w nazwie są spacje.[/b]

można to jeszcze bardziej skrócić: nie musisz pisać "c:\documents and settings...." - wystarczy zapisać: [code]%userprofile%\Ulubione[/code] bo zmienna userprofile przechowuje całą ścieżkę dostępu do folderu dokumentów aktualnego użytkownika.

możesz też tworzyć i zapisywać własne zmienne środowiskowe - wystarczy użyć polecenia set:
[b]set[/b] - wyświetla listę : nazwa-zmiennej wartość/ci
[b]set zmienna=siema[/b] - ustawia zmienną o nazwie zmienna na wartość "siema" (tekst)
[b]set /a x=16/2[/b] - ustawia zmienną do obliczeń arytmetycznych o nazwie x na wartość wykonanego działania - 8
[b]set /p zmienna_z_pauzy=[/b] - umożliwia ustawienie własnej zmiennej, której wartość użytkownik ustala sam przez wpisanie jej z klawiatury
[b]echo %zmienna%[/b] - wyświetla zawartość zmiennej o nazwie zmienna
wystarczy to zastosować i możesz robić ze zmiennymi (prawie) wszystko

czyli jeśli użytkownik by chciał skopiować zawartość folderu ulubione innego użytkownika to możesz właśnie użyć [b]set /p uzytkownik=[/b]
i wtedy skopiować wykonując polecenie: [code]copy c:\Document and settings\%uzytkownik%\ulubione jakis_folder_na_pendrive[/code]
tylko pozostaje dodatkowa kwestia:
musisz poznać literę woluminu i ścieżkę dostępu do katalogu gdzie chcesz wkleić te pliki.
tu właśnie chyba tylko się da użyć zmiennej i zapytać użytkownika o folder i literę pendrive'a.

(oczywiście jeśli chcesz wszystko robić w batchu - ale moim zdaniem tak jest najwygodniej)
możesz to zrobić w C++ (jeśli oczywiście znasz) - sklejasz komendę jako napis i ją wykonujesz funkcją system() z biblioteki <iostream>

Edytowane przez wojtex5
adrianb100
komentarz
komentarz

To jak by wyglądała gotowa formuła kopiowania(xcopy) pliku a.txt znajdującego sie:
C:\Documents and Settings\user\Pulpit\a\[b]a.txt[/b] kopiowanego do e:\Gry\

bo nie działa mi ten %userprofile% i nie wiem, może źle coś zrozumiałem z powyższej odpowiedzi.:D
I jeszcze jedno pytanie; jak sie robi spację w tych komendach jako spacje w notatniku, czyli: [b]xxx xxx[/b] czy np: [b]xxx_xxx[/b]

wojtex5
komentarz
komentarz

zależy o co ci chodzi
jeśli masz np. w ścieżce dostępu to robisz normalną spację ale całą ścieżkę musisz wziąć w cudzysłowy
w zasadzie to do wszystkiego się stosuje gdzie potrzebne są spacje

wiesz co - z tym userprofile to może być tak że ja sam dałem taką zmienną jak instalowałem sobie taki emulator terminala z linuxa, ale nie jestem pewnien...
wejdź w cmd i wpisz: [code]echo %userprofile%[/code]
jeśli wyświetli się ścieżka dostępu do twojego katalogu użytkownika to coś masz źle w skrypcie.

PS najlepiej wszystko robić na przykładach a nie suchą teorią - więc dodaj kod (najwyżej później usuniesz)

adrianb100
komentarz
komentarz

no wyświetliłą się ta ścieżka
Ja napisze jaka mam ta komenda:

start xcopy C:\Documents and Settings\%adrian%\Pulpit\a\a.txt E:\Gry


Taka mam i nie działa. Sprawdzałem i ta formułka działa jeśli kupiuje z C:\ bez podkatalogów a później jak pisze podkatalogi to nie działa

wojtex5
komentarz
komentarz (edytowane)

zmienne środowiskowe są po to aby z nich korzystać - tzn. że są po to aby nie trzeba było samemu wpisywać ich wartości (oczywiście poza tymi którymi chcemy - czyli set /p...)

zamiast pisać
[i]%adrian%[/i] piszesz po prostu: [b]%username%[/b]
Windows interpretując polecenie sam zauważy że tam chodzi o zmienną środowiskową i zamiast jej wywołania wstawi jej wartość.

pewnie zmyliła Cię ten 2. przykład - ale trzeba czytać uważnie:
[quote name='wojtex5' date='16 listopad 2010 - 18:51' timestamp='1289930029' post='1123136']
set /p zmienna_z_pauzy= - umożliwia ustawienie własnej zmiennej, której wartość użytkownik ustala sam przez wpisanie jej z klawiatury
[/quote]
i
[quote name='wojtex5' date='16 listopad 2010 - 18:51' timestamp='1289930029' post='1123136']
czyli jeśli użytkownik by chciał skopiować zawartość folderu ulubione innego użytkownika to możesz właśnie użyć set /p uzytkownik=
i wtedy skopiować wykonując polecenie: [code]copy c:\Document and settings\%uzytkownik%\ulubione jakis_folder_na_pendrive[/code]
[/quote]

poza tym zupełnie niepotrzebne jest "start" które napisałeś - bo ono otwiera nowe okno konsoli a batch i tak uruchamia się w konsoli więc to w sumie w ogóle nie potrzebne.
jeśli chodziło o nie-pokazywanie kodu to możesz na samym początku programu dodać: [code]@echo off[/code] wtedy kod nie będzie wyświetlany, a jedynie to co będzie po poleceniu "echo"
xcopy to chyba to samo co zwykłe copy tylko że do copy trzeba dorzucić atrybut /s (czyli subdirectory - żeby kopiował razem z podfolderami)

Edytowane przez wojtex5
adrianb100
komentarz
komentarz (edytowane)

Niestety coś z tym username jest nie tak działa mi do podkatalogów ale do momentu użytkownika a mianowicie
c:\document and settigns\ pliki z tego podkatalogu da się kopiować w podkatalogu \adrian\ już się nie da chyba że napisze dokładnie c:\"document and settigns"\"adrian"\ ale to nie rozwiązuje problemu z tym użytkownikiem na innym komputerze.:/ Nie wiem te procenty jakoś to psują bo jak wpisuje w cudzysłowie to działa ale to tylko na moim komputerze

i jeszcze pytanie jaka komenda zeby skopiował wszystko nie tylko pliki ale też foldery

Edytowane przez adrianb100
wojtex5
komentarz
komentarz

chodzi o to, że [b]CAŁĄ[/b] ścieżkę dostępu masz wziąć w cudzysłowie

pokaż kod to zobaczymy, bo na sucho wszystkiego się nie da zrozumieć.

adrianb100
komentarz
komentarz

copy C:\"Documents and Settings"\"adrian"\ad.txt jeśli pod adrian dam %username% to nie działa a jak normalnie wpisana nazw ato działa więc musi coś być od tego %username%

a jak kopiować cały katalog i podkatalogi to jak

wojtex5
komentarz
komentarz (edytowane)

dobra sprawdziłem u siebie - masz rację... wywala mi "nie można odnaleźć określonego pliku" czy coś takiego.
baaaaardzo dziwne

wiesz co?
zrób na sztywno:
[code]
@echo off
cd %userprofile%
xcopy ulubione E:\Gry /S /E
pause
[/code]

ten batch skopiuje ci wszystko z folderu użytkownika "ulubione" do E:\Gry (podkatalogi, pliki w nich itd. a nawet puste katalogi)

TAKI SPOSÓB U MNIE DZIAŁA na 100%

[b]edit:[/b]
udało mi się przełamać DOSa - napisałem poprawny co robi to samo ale bez wchodzenia do folderu: [code]@echo off
xcopy "%userprofile%\ulubione" "E:\Gry" /S /E
pause[/code]

po prostu zawinił brak cudzysłowów :)

jeśli chcesz kopiować i nadpisywać wszystkie dopisz do linijki kopiującej na końcu po spacji: [code]/-Y[/code]

Edytowane przez wojtex5
adrianb100
komentarz
komentarz (edytowane)

Teraz działa.:D
THX za pomoc

A jeszcze jedno pytanie.:) bo jak sie usuwa komendą del to on w cmd sie pyta czy napewno i czy wszystkie
czy można zrobić tak żeby z danego folderu powiedzmy E:\Gry\ usunął wszystkie foldery podfoldery i pliki bez pytania sie o to czy aby napewno chce wykonać te operacje i czy dla wszystkich znajdujących się tam "rzeczy"??

Edytowane przez adrianb100
wojtex5
komentarz
komentarz

to dorzuć takie coś:
[code]cd E:\Gry
for %%x in (*) do del %%x /f /s /q | echo T
for %%y in (*) do rm %%y /F /S /Q |echo T[/code]

robisz to pętlą for - * oznacza że przy każdym obrocie pętli %%x będzie pobierał nazwę kolejnego pliku (nie folderu) i go usuwał bez potwierdzenia (|echo T to zabezpieczenie na wypadek nie zadziałania /Q).
do folderów jest druga pętla - tutaj jest podobnie ale zamiast del używasz rm (remove directory) i %%y będzie pobierał nazwy katalogow (chyba) :D
(sprawdzę w domu działanie bo aktualnie piszę ze szkoły)

adrianb100
komentarz
komentarz (edytowane)

Teraz sprawdziłem i nie usuwa wszystkiego.
usuwa 100% plików txt pliki exe a pliki mp3 zostały

Edytowane przez adrianb100
wojtex5
komentarz
komentarz (edytowane)

dobra mój błąd :D
zapomniałem że w nazwie może być spacja więc zamiast samego %%x (%%y) musi być "%%x" ("%%y"), czyli poprawiony kod powinien być taki: [code]cd E:\Gry
for %%x in (*) do del "%%x" /f /s /q | echo T
for %%y in (*) do rm "%%y" /F /S /Q |echo T[/code]

Edytowane przez wojtex5
adrianb100
komentarz
komentarz

ok działa dzieki

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.