Windows에서 간단한 sh 스크립트를 동등한 배치 스크립트로 변환 ../../Build/x64/Release caffe.exe train –solver=../../../examples/cifar10/cifar10_full_relu_solver_bn.prototxt pause 실행 파일

이것은 Windows에서 배치 파일로 변환 해야하는 스크립트입니다.

#!/usr/bin/env sh

TOOLS=./build/tools

$TOOLS/caffe train \
    --solver=examples/cifar10/cifar10_full_relu_solver_bn.prototxt

이것은 지금까지 내가 생각 해낸 스크립트입니다.

REM go to the caffe root
cd ../../Build/x64/Release
caffe.exe train --solver=../../../examples/cifar10/cifar10_full_relu_solver_bn.prototxt

pause

실행 파일 ( caffe.exe)을 실행 하고 필요에 따라 필요한 인수 파일을 전달하지만 문제는 인수 파일 자체가 자신과 관련된 다른 파일을 가리키고 있으며이 두 번째 파일을 찾을 수 없다는 것입니다.
이것이 인수 파일 내의 두 번째 파일이 해결 한 방법입니다.

net: "examples/cifar10/cifar10_full_relu_train_test_bn.prototxt"

더 명확하게하기 위해 폴더의 계층 구조는 다음과 같습니다.

|Build
   |--X64
      |--Release
         |--caffe.exe
|Examples
   |--Cifar10
      |-- cifar10_full_relu_solver_bn.prototxt
      |-- Cifar10_train_test.prototxt
      |-- other files as well

내 질문은, 내가 모든 상대 파일 주소를 변경할 필요가 없도록 사용할 수있는 방법이 있습니까?



답변

SET TOOLS=Build/x64/Release
%TOOLS%/caffe.exe train --solver=examples/cifar10/cifar10_full_relu_solver_bn.prototxt

pause

그것은 쉘 스크립트의 이상적인 변환이어야합니다. 우리는 항상 루트 폴더에 머 무르므로 인수로 제공된 파일 내부의 경로를 올바르게 참조해야합니다.


답변

가능한 해결책은 전체 Cifar10 폴더를 적절한 위치에 복제하는 것입니다.


답변

업데이트 :

이 스크립트는 배치 파일을 직접 두 번 클릭하여 배치 파일을 실행하려고 할 때 사용합니다. (배치 파일이있는 (하위) 디렉토리에서 직접 배치 파일을 실행하는 것을 의미합니다.
그러나 폴더의 루트에서 파일을 호출하려는 경우 허용되는 답변을 확인해야합니다. 다른 사람들에게는 유용 할 수 있습니다.

실제 답변

나는 스스로 대답으로 받아 들여지는 표준 방법을 사용하고 있습니다.
친애하는 하나님 덕분에 마침내 작동했습니다. 실제로 동일한 배치 스크립트는 다음과 같습니다.

REM go to the caffe root
cd ../../

set BIN=build/x64/Release

"%BIN%/caffe.exe" train --solver=examples/cifar10/cifar10_full_relu_solver_bn.prototxt

pause

이것을 사용하면 더 이상 아무것도 변경할 필요가 없습니다.