1

私は dos スクリプトを書いていますが、既知のファイルのパスを取得して、スクリプト内でパスを使用してそのディレクトリに変更し、指定されたファイルを使用して同じディレクトリにログ ファイルを出力できるようにしたいと考えています。

このスクリプトは、いくつかのディレクトリをパスに追加し、必要なディレクトリに変更して、同じディレクトリ内の入力ファイルを使用してコマンドを実行します。このコマンドは、同じディレクトリに保存される多数のファイルを生成します。

これが私がこれまでに持っているものです

@ECHO OFF

:: Check argument count
set argC=0
for %%x in (%*) do Set /A argC+=1

IF %argC% LSS 3 (echo WARNING must include the parent Directory, the filename and the timestep for the simulation)

:: Assign meaningfull names to the input arguments
set parentDirectory=%1
set filename=%2
set scenarioTimestep=%3

:: Check validaty of the input arguments
:: TODO: implement check for directory, filename exists, and possibly limits to the timestep 
IF "%parentDirectory%"=="" (
    set parentDirectory=P:Parent\Directory
) 
IF "%filename%"=="" (
    set filename=ship2.xmf
) 
IF "%scenarioTimestep%"=="" (
    set scenarioTimestep=0.1
) 

echo parent Directory: %parentDirectory%
echo filename: %filename%
echo timestep: %scenarioTimestep%

set MSTNFYURI=file:mst.log
set MSTNFYLEVEL=debug
set MSTNFYFLUSH=1

set XSFNFYURI=file:xsf.log
set XSFNFYLEVEL=debug
set XSFNFYFLUSH=1

set parentNFYURI=file:parent.log
set parentNFYLEVEL=debug
set parentNFYFLUSH=1

:: Add the parent directories to the path
set PATH=%parentDirectory%\bin\;%parentDirectory%\bin\ext\;%parentDirectory%\bin\gtkmm\;%parentDirectory%\bin\osg\;%PATH%

:: Change to the target directoy
set tagetDirectory=%parentDirectory%\examples\testing_inputs
cd %tagetDirectory%

echo command will be: ft -c %filename% -T %scenarioTimestep%
::ft -c %filename% -T %scenarioTimestep%

@ECHO ON

私ができるようにしたいのは、targetDirectoy にハード コーディングされたディレクトリ パス example\testing_inputs を使用する代わりに、指定されたファイル名を検索してディレクトリをそのパスに変更できるようにすることです。

「dir filename.ext /s」を使用して表示される情報を取得できることを知っています

DOS出力

Volume in drive C is OS
Volume Serial Number is XXXX-XXXX

Directory of C:\Users\Me\parent\examples\testing_input

15/11/2012   02:51 PM    <size> filename
...
...

この情報からディレクトリを抽出してスクリプト内で使用するにはどうすればよいですか? また、同じ名前のファイルが複数ある場合、ファイルのタイムスタンプに基づいてパスを選択するにはどうすればよいですか?

4

1 に答える 1

2
for /f %%F in ('dir /B /S /A:-D  filename.ext ') do set file_path=%%F
pushd  %file_path%\..
dir_path=%CD%
popd
echo %file_path%
echo %dir_path%

これはあなたが探しているものですか?

編集: dbenham のコメントを確認してください。

于 2012-11-27T18:03:24.823 に答える