DOS批处理命令文件 - 迭代处理

我很高兴地使用下面的Windows命令批处理.BAT来移动文件,而昨天从一些未知的原因,它停止工作。 该命令批量调用的文件good.txt包含一个JPG文件列表: 123.jpg 456.jpg etc ... 运行此批处理的文件夹包含具有相同名称的.CR2文件。该程序简单地将相应的CR2文件复制到“良好”目录。DOS批处理命令文件 - 迭代处理

你知道它为什么不工作吗?我得到一个不正确的语法错误。

由于

布莱斯

@echo off 

setlocal enabledelayedexpansion

call :movetodir Good

goto :end

:movetodir

set textfile=%1.txt

set writetodirectory=%1

md !writetodirectory!

for /f "tokens=* delims= " %%G in (!textfile!) do (

set filejpg=%%G

set fileraw=!filejpg:jpg=CR2!

move !fileraw! "!writetodirectory!"

)

goto :eof

:end

回答:

的第一步是找出是哪个命令实际上导致了问题。将第一行更改为:

rem @echo off 

并从命令提示符运行它。发生错误的地方应该将其缩小很多。

查看文件的内容也很有用,因为文件名可能存在某些“错误”,例如它们包含空格。

回答:

变化

move !fileraw! "!writetodirectory!" 

move "!fileraw!" "!writetodirectory!" 

将是我最初的猜测 - 因为你的循环似乎使用tokens=*获取文件名。

请注意,"tokens=* delims= "将简单地抑制领先空间。 "delims="将逐字地应用该行的值,包括任何(可能不存在的)前导空格。

但是有点难说,除非你指定确切的错误信息。在循环开始时(可能带有围绕它的明显的“围栏字符”)将是有帮助的。

回答:

有几个字符会破坏您发布的代码。 我假设代码是完整的 - 那么下面的代码应该执行相同的任务,但更强大的空间和! &个字符。

@echo off 

call :movetodir Good

goto :EOF

:movetodir

md "%~1" 2>nul

for /f "delims=" %%G in (' type "%~1.txt" ') do (

echo moving "%%~nG.CR2"

move "%%~nG.CR2" "%~1" >nul

)

以上是 DOS批处理命令文件 - 迭代处理 的全部内容, 来源链接: utcz.com/qa/265225.html

回到顶部