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

我想要做的不是使用硬编码的目录路径examples\testing_inputs for targetDirectoy,而是希望能够搜索提供的文件名并将目录更改为该路径。

我知道我可以使用“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 回答