2013-05-15 69 views
1

我只想回显一个用ENABLEDELAYEDEXPANSION定义的变量。它不起作用。 这里有一个关于这个问题环境变量问题

@echo off&setlocal enabledelayedexpansion 
for /f "tokens=*" %%x in (%1) do (
    set "D=%%x" 
    echo %%~nD 
) 

我也写回声我长脚本的一小部分!〜ND!但它也不起作用。

我的文件(%1)只包含相对路径为这样:

VENDOR\ford1.car 
VENDOR\bmw.car 

,我的目标是要呼应“ford1.car”或“bmw.car”因为我有在未来使用它们我的脚本的步骤,这只是文件的完整名称。

请一些帮助和解释。由于

回答

0

尝试:

@echo off&setlocal enabledelayedexpansion 
for /f "tokens=*" %%a in (%1) do (
    echo %%~nxa 
) 

对于只做对在所使用的变量替换。您不能在其中设置变量并使用替代。

%%〜na只会给你没有扩展名的文件名。您必须使用%%〜nxa来获取文件名和扩展名。

如果你要的文件名设置为一个变量,做一些每个文件,你必须使用DelayedExpansion这样的:

@echo off&setlocal enabledelayedexpansion 
for /f "tokens=*" %%a in (%1) do (
    set d=%%~nxa 
    echo !d! 
    Do something with !d! 
) 

或者你可以创建一个子程序,而不必使用变量在所有

@echo off&setlocal enabledelayedexpansion 
for /f "tokens=*" %%a in (%1) do (
    call :sub %%~nxa 
) 
goto :eof 

:sub 
%1 = your file name so do some processing on it. 
+0

的确,我想在同一批处理脚本中使用%%〜nxa出for命令。这就是为什么我设置变量'D'并使用enabledelayedexpansion来扩展它并稍后使用它的原因。谢谢 – new

+0

你不需要使用DelayedExpansion,除非这个for嵌套在另一个for循环中,或者你想在for中设置一个变量并在for循环中引用它。 –