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.

Author: R0MANARMY, 2011-03-03

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:)

 55
Author: MartinStettner,
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ę\)

 120
Author: psulek,
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>
 15
Author: Ritch Melton,
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.

 15
Author: GeekyGuy,
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
 6
Author: John Simons,
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
 1
Author: Ankit Mori,
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>\"
 1
Author: zezba9000,
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/?

 0
Author: Steve Wellens,
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