我想循环浏览一个文件夹,并在找到的每个.tif文件上运行一个算法。不幸的是,这不适用于名称中包含空格字符的文件。由于我的路径已经包含有空格的文件夹,我将存储路径名的变量放在双引号中。
FOR /F %%k IN ('DIR /B "%mypath_import%"*.tif') DO (
SET infile=%%k
SET outfile=!infile:.tif=_UTM.tif!
REM ... do something
到目前为止,这是我的尝试,但它不适用于包含空格的文件。
您确实需要这些。您可以使用正常的for
循环,而不必使用/f
@echo off
setlocal enabledelayedexpansion
set "mypath_import=C:Some path"
for %%i in ("%mypath_import%*.tif") do (
set "infile=%%~i"
echo "!infile:.tif=UTM.tif!"
)
但是,如果您只想要扩展名为的文件名,则以上内容将echo
的完整路径和文件名
@echo off
setlocal enabledelayedexpansion
set "mypath_import=C:Some path"
for %%i in ("%mypath_import%*.tif") do (
set "infile=%%~nxi"
echo "!infile:.tif=UTM.tif!"
)
或无需delayedexpansion
@echo off
set "mypath_import=C:Some path"
for %%i in ("%mypath_import%*.tif") do echo %%~dpni_UTM%%~xi
如果您只需要名称和扩展名,请再次使用。
@echo off
set "mypath_import=C:Some path"
for %%i in ("%mypath_import%*.tif") do echo %%~ni_UTM%%~xi
编辑
根据@Stephan的评论,请记住,如果你正在进行实际的重命名,并且你多次运行脚本,它每次都会附加_UTM
。所以你会得到filename_UTM_UTM.tif
等。所以你可以通过包括findstr
来从循环中排除文件
for /f "delims=" %%i in ('dir /b *.tif ^|findstr /eiv "_UTM.tif"') do echo %%~ni_UTM%%~xi