2013-05-30 119 views
0

我很高兴地使用下面的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 
+0

什么改变了?你有没有得到关于语法错误在哪里或什么的信息?你有没有尝试使用'REM'来注释一些代码行,直到你没有得到语法错误? – Steve

回答

0

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

rem @echo off 

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

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

0

变化

move !fileraw! "!writetodirectory!" 

move "!fileraw!" "!writetodirectory!" 

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

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

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

0

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

@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 
) 
+0

添加了原始呼叫声明。 – foxidrive