0

我很高兴使用以下 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
4

3 回答 3

0

改变

move !fileraw! "!writetodirectory!"

move "!fileraw!" "!writetodirectory!"

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

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

但是,除非您指定确切的错误消息是什么,否则很难说。ECHO在循环的%%G开始(可能有明显的“围栏字符”围绕它)会有所帮助。

于 2013-05-30T07:04:59.023 回答
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
)   
于 2013-05-30T07:12:01.490 回答
0

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

rem @echo off

并从命令提示符运行它。发生错误的点应该会缩小很多。

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

于 2013-05-30T07:00:00.653 回答