将简单的 sh 脚本转换为 Windows 上的等效批处理脚本

将简单的 sh 脚本转换为 Windows 上的等效批处理脚本

这是我需要在 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

我的问题是,有没有一种方法可以用来让我不需要更改所有相对文件地址?

答案1

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

pause

这应该是 shell 脚本的理想转换。我们始终停留在根文件夹,因此作为参数提供的文件内的路径应该被正确引用。

答案2

可能的解决方案是将整个 Cifar10 文件夹复制到正确的位置。

答案3

更新 :

这里有一条注释,此脚本适用于您想要通过直接双击来执行批处理文件的情况。(我的意思是直接从批处理文件所在的(子)目录中执行批处理文件。
但如果您打算从文件夹的根目录调用它,则需要查看已接受的答案。我也将答案留在这里,以防它对其他人有用。

实际答案

我自己使用的是标准方法,该方法被接受为答案。
感谢上帝,我终于让它工作了,实际的等效批处理脚本如下:

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

使用这个,我不再需要改变任何东西。

相关内容