Development Tip

존재하지 않는 경우 지정된 디렉토리를 생성하기위한 XCOPY 스위치?

yourdevel 2020. 10. 25. 13:09
반응형

존재하지 않는 경우 지정된 디렉토리를 생성하기위한 XCOPY 스위치?


빌드 후 이벤트에서 XCOPY를 사용하여 컴파일 된 DLL을 출력 폴더에서 메인 앱의 출력 폴더로 복사하고 있습니다. DLL은 다음과 같이 기본 앱 출력 폴더의 "Modules"하위 폴더에 복사됩니다.

xcopy  "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\" 

Modules 폴더가 있으면 명령이 제대로 작동하지만 테스트 중에 폴더가 없으면 XCOPY가 폴더를 만들지 않고 명령이 실패한다는 것을 발견했습니다.

폴더가없는 경우 생성되도록하는 XCOPY 스위치가 있습니까? 그렇지 않은 경우 폴더가없는 경우 폴더를 만들기 위해 빌드 후 이벤트에 무엇을 추가해야합니까? 당신의 도움을 주셔서 감사합니다.


나는 명령 줄에서 이것을 사용하여 시도했다.

D:\>xcopy myfile.dat xcopytest\test\

대상 디렉터리가 제대로 생성되었습니다.

그렇지 않은 경우 의 명령 확장이 활성화 된 mkdir명령을 사용하여 대상 디렉토리를 만들 수 있습니다.cmd

cmd /x /c mkdir "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\"

( '/ X'들이이 시스템에 기본적으로 사용하지 않을 경우 명령 확장을 가능하게, 안 가진 것을 알고 있어요 cmd)

사용하다

cmd /? 
mkdir /?
xcopy /?

추가 정보 :)


"/ I"사용에 대한 대답은 작동하지만 약간의 트릭이 있습니다. 대상에서 \ 문자로 끝나야 대상이 파일이 아니라 디렉토리임을 xcopy에 알릴 수 있습니다!

예:

xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder" /F /R /Y /I

작동하지 않고 코드 2를 반환하지만 이것은 다음과 같습니다.

xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder\" /F /R /Y /I

내 샘플에 사용 된 명령 줄 인수 :

/ F-전체 소스 및 대상 파일 이름을 표시합니다.

/ R-읽기 전용 파일을 덮어 씁니다.

/ Y-기존 파일을 덮어 쓸지 묻는 메시지를 표시하지 않습니다.

/ I-대상이 디렉토리라고 가정합니다 (그러나 \로 끝나야 함).


저는 PostBuild 단계가 싫습니다. 빌드 도구의 범위 밖에서 너무 많은 일이 발생할 수 있습니다. MSBuild가 복사 프로세스를 관리하고 업데이트하는 것이 더 낫다고 생각합니다. 다음과 같이 .csproj 파일을 편집 할 수 있습니다.

  <Target Name="AfterBuild" Inputs="$(TargetPath)\**">
    <Copy SourceFiles="$(TargetPath)\**" DestinationFiles="$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\**" OverwriteReadOnlyFiles="true"></Copy>
  </Target>

xcopy와 함께 / i를 사용하고 디렉토리가 존재하지 않으면 디렉토리가 생성됩니다.


robocopy를 사용할 수 있습니다.

robocopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules" /E

나는 이것을 명령에 시도했다.

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

/ E 시도

전체 옵션 목록을 얻으려면 : xcopy /?


간단한 짧은 대답은 다음과 같습니다.

xcopy /Y /I "$(SolutionDir)<my-src-path>" "$(SolutionDir)<my-dst-path>\"

참고 URL : https://stackoverflow.com/questions/5175806/xcopy-switch-to-create-specified-directory-if-it-doesnt-exist

반응형