Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 循环浏览包含空间的文件的文件夹_Batch File_Cmd - Fatal编程技术网

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

Batch file 循环浏览包含空间的文件的文件夹,batch-file,cmd,Batch File,Cmd,我想循环遍历一个文件夹,让它对找到的每个.tif文件运行一个算法。不幸的是,这不适用于名称中有空格字符的文件。由于我的路径已经包含有空格的文件夹,我将存储路径名的变量放在双引号中 FOR /F %%k IN ('DIR /B "%mypath_import%"*.tif') DO ( SET infile=%%k SET outfile=!infile:.tif=_UTM.tif! REM ... do something 到目前为止,这是我的尝试,但对于包含空格的文件

我想循环遍历一个文件夹,让它对找到的每个.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 off
setlocal enabledelayedexpansion
set "mypath_import=C:\Some path"
for %%i in ("%mypath_import%*.tif") do (
   set "infile=%%~nxi"
   echo "!infile:.tif=UTM.tif!"
)
或者不需要
延迟扩展

@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的评论,请记住,如果您正在进行实际重命名,并且多次运行脚本,那么每次都会继续追加
\u UTM
。因此,您将获得
filename\u UTM\u UTM.tif
等。因此,您可以通过包含
findstr
从循环中排除文件

for /f "delims=" %%i in ('dir /b *.tif ^|findstr /eiv "_UTM.tif"') do echo %%~ni_UTM%%~xi

你真的需要这些。您可以使用正常的
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 off
setlocal enabledelayedexpansion
set "mypath_import=C:\Some path"
for %%i in ("%mypath_import%*.tif") do (
   set "infile=%%~nxi"
   echo "!infile:.tif=UTM.tif!"
)
或者不需要
延迟扩展

@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的评论,请记住,如果您正在进行实际重命名,并且多次运行脚本,那么每次都会继续追加
\u UTM
。因此,您将获得
filename\u UTM\u UTM.tif
等。因此,您可以通过包含
findstr
从循环中排除文件

for /f "delims=" %%i in ('dir /b *.tif ^|findstr /eiv "_UTM.tif"') do echo %%~ni_UTM%%~xi