18

Chcę, aby VS skopiować plik .lib, utworzony po procesie kompilacji do określonego folderu. więc poszedłem do konfiguracji projektu, post-build zdarzenia i wszedł następujące polecenie:VS 2012: Post Build xcopy error 2

if exist $(TargetPath) 
xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y 

ale zamiast kopiowania proces nie powiedzie się po kliknięciu „budować” i pojawia się następujący błąd:

error MSB3073: The command "if exist C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib xcopy "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y

:VCEnd" exited with code 2.

Zastanawiam się również, czy :VCEnd w łańcuchu poleceń komunikatu o błędzie < - może to jest powód? Jak rozwiązać ten problem?

Każda pomoc i wskazówki byłyby szczęśliwie spożywane:) ...

częściowe rozwiązanie:

EDIT: wygląda na to zmiana nazwy część (Inc.lib do z.lib) sprawia, kłopoty, gdy xcopy zapyta, czy jest to plik lub katalog ... działa, gdy po prostu kopiuję pierwotnie nazwany plik do katalogu zamiast kopiowania o zmienionej nazwie

+1

Skopiuj/wklej PostBuildEvent z pliku projektu do swojego pytania. Nie edytuj go, spraw, aby wyglądał dokładnie tak samo. –

+0

wygląda na to, że część do zmiany nazwy (Inc.lib na z.lib) sprawia kłopoty, gdy xcopy pyta, czy jest to plik lub katalog ... działa to, kiedy po prostu kopiuję plik lib do katalogu bez zmiany jego nazwy. .. – Incubbus

+1

http://stackoverflow.com/a/4283533/532647 jeden z możliwych sposobów rozwiązania tego problemu. Przez "echo f | xcopy ... 'po prostu powiesz" plik "do xcopy. –

Odpowiedz

32

Xcopy documentation mówi co następuje:

Określanie, czy Destination jest plik lub katalog Jeśli docelowy nie zawiera istniejącego katalogu i nie kończy się odwrotnym ukośnikiem (\), pojawia się następujący komunikat:

Does destination specify a file name 
or directory name on the target 
(F = file, D = directory)? 

Naciśnij klawisz F, jeśli chcesz, aby plik lub pliki zostały skopiowane do pliku. Naciśnij D, jeśli chcesz skopiować plik lub pliki do katalogu.

Można wyłączyć ten komunikat przy użyciu/i opcji wiersza poleceń, co powoduje xcopy założyć, że docelowy jest katalogiem jeśli źródłem jest więcej niż jeden plik lub katalog.

Potrzebujesz czegoś przeciwnego, ale nie ma takiego przełącznika.

Proponowane tutaj rozwiązanie: https://stackoverflow.com/a/4283533/532647.

Proponuje się poprzedzić komendę xcopy z echo f | prefiksem, który zasadniczo wykonuje następujące operacje: symuluje użytkownika naciskając klawisz f gdy xcopy pyta.

Więc komenda powinna wyglądać następująco:

if exist $(TargetPath) 
echo f | xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y 

Operator | zaledwie rur wyjściu echo f (== f) pod dowództwem xcopy i to jest odczytywane w razie potrzeby. Więcej informacji o przekierowaniu wyjścia tutaj: http://ss64.com/nt/syntax-redirection.html.

UPDATE: Jak Govert points out ten siekać nie będzie działać pod zlokalizowanej wersji systemu Windows. Jednak inny siekać zadziała:

xcopy D:\file.zip c:\renamedFile.zip* 

Dołączanie nazwę pliku docelowego gwiazdką * sprawia xcopy nie zapytać, czy docelowy jest plikiem lub katalogiem.

+13

To nie działa w zlokalizowanych wersjach systemu Windows, gdzie słowa zachęty mogą być inne. Alternatywną sztuczką jest dodanie gwiazdki "*" na końcu miejsca docelowego, a następnie xcopy nie będzie pytać o plik/katalog. – Govert

+0

@Przyjąć dobry punkt, dziękuję. Dodam to do odpowiedzi. –

+0

Dlaczego xcopy nie rozpoznaje źródła i/lub celu jako pliku, gdy mają rozszerzenie pliku i dlaczego działa gwiazdka? @Govert – xr280xr

1

Czy próbowałeś zawinąć $ (TargetPath) w cudzysłowach? Produkty, które są coraz popularniejsze w przestrzeni kosmicznej-zamiast-pod-podkreśleniem-w-wszystkich-MS mają tendencję do bałagania w każdym zakątku ... Nie wiem, dlaczego ci dumbos ciągle to robią ...

Podobny so: if exist "$ (TargetPath)"

9

Dlaczego nie używasz kopii zamiast xcopy? kopia jest specjalnie dla plików, więc nie będzie zamieszania.

+1

Absolutnie najprostsza odpowiedź. DZIĘKUJĘ CI. – Lara

Powiązane problemy