循环浏览包含空间的文件的文件夹



我想循环浏览一个文件夹,并在找到的每个.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