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