Xcopy przełącza się na utworzenie podanego katalogu, jeśli nie istnieje?
Używam XCOPY w zdarzeniu post-build, aby skopiować skompilowane biblioteki DLL z ich folderów wyjściowych do folderu wyjściowego głównej aplikacji. Biblioteki DLL są kopiowane do podfolderu "Modules" w głównym folderze wyjściowym aplikacji, jak to:
xcopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\"
Polecenie działa poprawnie, jeśli folder Modules istnieje, ale odkryłem podczas testów, że jeśli folder nie istnieje, XCOPY go nie utworzy i polecenie nie powiedzie się.
Czy istnieje przełącznik XCOPY, który spowoduje, że folder będzie stworzony, jeśli nie istnieje? Jeśli nie, co dodałbym do mojego zdarzenia post-build, aby utworzyć folder, jeśli nie istnieje? Dzięki za pomoc.
8 answers
Próbowałem tego w wierszu poleceń używając
D:\>xcopy myfile.dat xcopytest\test\
I katalog docelowy został poprawnie utworzony.
Jeśli nie możesz utworzyć katalog docelowy za pomocą polecenia mkdir
z włączonymi rozszerzeniami poleceń cmd
, takimi jak
cmd /x /c mkdir "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\"
('/x ' włącza rozszerzenia poleceń w przypadku, gdy nie są one domyślnie włączone w systemie, nie jestem tak zaznajomiony z cmd
)
Użyj
cmd /?
mkdir /?
xcopy /?
Więcej informacji:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-08 02:09:00
Odpowiedź na użycie "/ I " działa, ale z małą sztuczką - w Targecie musisz zakończyć znakiem\, aby powiedzieć xcopy, że target jest katalogiem, a nie plikiem!
Przykład:
xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder" /F /R /Y /I
Nie działa i zwraca kod 2, ale ten:
xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder\" /F /R /Y /I
Argumenty linii poleceń użyte w moim przykładzie:
/F-wyświetla pełne nazwy plików źródłowych i docelowych
/R-to nadpisze pliki tylko do odczytu
/Y-wyłącza monit o nadpisanie istniejących plików
/I - Zakłada, że miejscem docelowym jest katalog (ale musi kończyć się\)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-13 12:21:41
Nienawidzę postbuildowego kroku, pozwala na zbyt wiele rzeczy, które mogą się wydarzyć poza zakresem narzędzia budowania. Uważam, że lepiej pozwolić MSBuild zarządzać procesem kopiowania i wykonywać aktualizację. Możesz edytować .plik csproj taki:
<Target Name="AfterBuild" Inputs="$(TargetPath)\**">
<Copy SourceFiles="$(TargetPath)\**" DestinationFiles="$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\**" OverwriteReadOnlyFiles="true"></Copy>
</Target>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-03 02:29:59
Użyj /i z xcopy i jeśli katalog nie istnieje, utworzy katalog dla Ciebie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-07 03:18:24
Możesz użyć robocopy:
robocopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules" /E
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-03 02:20:51
Próbowałem tego na command.it działa dla mnie.
if "$(OutDir)"=="bin\Debug\" goto Visual
:TFSBuild
goto exit
:Visual
xcopy /y "$(TargetPath)$(TargetName).dll" "$(ProjectDir)..\Demo"
xcopy /y "$(TargetDir)$(TargetName).pdb" "$(ProjectDir)..\Demo"
goto exit
:exit
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 12:11:02
Prosta krótka odpowiedź jest taka:
xcopy /Y /I "$(SolutionDir)<my-src-path>" "$(SolutionDir)<my-dst-path>\"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-08 19:02:54
Try / E
Aby uzyskać pełną listę opcji: xcopy/?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-03 02:04:11