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

时间:2013-05-30 06:49:48

标签: windows batch-file dos

我很高兴使用以下windows命令批处理.BAT来移动文件,昨天从一些未知的原因它停止工作。 此命令批处理调用的文件good.txt包含JPG文件列表: 123.jpg 456.jpg 等等... 运行此批处理的文件夹包含具有相同名称的.CR2文件。该程序只是将相应的CR2文件复制到“好”目录。

你知道为什么它不再工作了吗?我的语法错误不正确。

由于

布莱斯

@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

3 个答案:

答案 0 :(得分:0)

第一步是隔离哪个命令实际导致问题。将第一行更改为:

rem @echo off

并从命令提示符运行它。发生错误的那一点应该缩小它的范围。

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

答案 1 :(得分:0)

更改

move !fileraw! "!writetodirectory!"

move "!fileraw!" "!writetodirectory!"

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

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

但除非您指定确切的错误消息,否则说起来有点困难。循环开始时ECHO %%G(可能周围有明显的“栅栏字符”)会有所帮助。

答案 2 :(得分: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
)