2016-07-19 3 views
1

複数のフォルダのフルパスを作成しようとしています。基本的には呼び出されるバッチスクリプトがあり、これはそのスクリプト内で使用されるコマンドです。 私はこれをしなかった:ディレクトリパスで複数回戻る方法は?

ECHO OFF 
SET currentDirectory=%~dp0 
echo %currentDirectory:~0,-15% 

SET ROOT = %currentDirectory:~0,-15% 
SET MNIST_DIR = %currentDirectory:~0,-1% 
SET DATA = %ROOT%/data/mnist 
SET BUILD= %ROOT%/Build/x64/Release 
SET BACKEND=lmdb 

私がアクセスN:\caffe-master\に意味%currentDirectory:~0,-15%によるので%~dp0の出力はN:\caffe-master\examples\mnist
です。 しかし、私がやっていることは間違っているようで、次のコマンドは実行できません!

"%BUILD%/convert_mnist_data.exe" %DATA%/t10k-images-idx3-ubyte %DATA%/t10k-labels-idx1-ubyte %EXAMPLES%\mnist_test_%BACKEND% --backend=%BACKEND% 

どうすればこの問題を解決できますか。 私もCD/Dを無駄にしようとしました。これは私が思いついたものです。

@echo off 
SET currentDirectory=%~dp0 
PUSHD %CD% 
CD .. 
CD .. 
SET MNIST_DIR=%CD% 
POPD 
ECHO %MNIST_DIR% 
PAUSE 

これは出力N:\caffe-master\を生成します。これについてはどのよう

+2

'..'はフォルダの親です(そして' .'はフォルダ自体です)。したがって、 'c:¥windows¥system32¥drivers¥..¥.. 'は' c:¥windows'と同じです( 'c:\ windows \ system32 \ drivers \ .. \ .. \。\。\。 \ .')。 –

+1

'set'コマンドラインの' = '記号のあとのスペースを、変数名と値の一部になるので削除します。 – aschipfl

+0

@aschipfl:スペースは削除しましたが、%ROOT%は空です。 – Breeze

答えて

2

EDIT:スクリプトの最後にPUSHD %CD%POPDを使用することで、常に元のディレクトリに終わることが保証されます。

+0

ありがとうございます。しかし、現在のディレクトリを変更したくない場合はどうすればよいですか? – Breeze

+1

あなたは実際には 'popdir'を元のフォルダに戻すようにスクリプトの終わりに現在のディレクトリを変更していません。また、あなたが試したように、パス上で文字列操作を行うことができますが、これはかなり混乱です。さらに、フォルダー構造が変更されると、スクリプトがユーザーになる可能性があります。 – MichaelS

+0

ありがとうyou.pleaseはあなたの回答の最後のコメントにもあなたの良い点を反映します – Breeze

1

..は、フォルダの親フォルダです(.はフォルダ自体です)。従ってc:\windows\system32\drivers\..\..c:\windowsと等しくなります(c:\windows\system32\drivers\..\..\.\.\.\.\.と同様)。

阿部

等号の両側にはスペースを入れないでください。あなたは設定しています%root %

+0

私は実際にあなたの最後のコメントをrootに意味しました! 私の問題を解決したケース: – Breeze

+0

@Hossein updated –

関連する問題