批处理文件只运行一次,FOR循环出错
Posted
技术标签:
【中文标题】批处理文件只运行一次,FOR循环出错【英文标题】:Batch file only run once, FOR loop at fault 【发布时间】:2021-12-14 14:49:47 【问题描述】:我正在寻找一个批处理,它查看以“@”开头的文件夹,然后在这些文件夹中有一个名为“Keys”的子文件夹,将 file.bikey 复制到一个静态文件夹名称“keys”。
由于内部有 cd/goto 命令,我使用的 for /d 循环显然停止工作。
Main
│ key-collector.bat
│
├───@folder_a
│ └───keys
│ a.txt
│
├───@folder_b
│ └───keys
│ b.txt
│
├───@folder_c
│ └───keys
│ c.txt
└───keys
└───(Destination)
当前代码:
@echo off
:start
set modsPath="C:\Exemple"
set keysPath="%modsPath%\keys"
for /d %%i in (@*) do (
echo %%i
copy /y %cd%\%%i\keys\*.txt %keysPath%
::cd %cd%\%%i\keys
::copy *.txt %keysPath%
)
PAUSE>nul
exit
【问题讨论】:
不要在代码块内使用无效标签。将::
更改为rem
。然后在cd
命令上,为什么还要cd?只需在复制后从完整路径或pushd path
和popd
复制文件即可。
【参考方案1】:
几件事:
-
用双引号设置路径,包括变量名,即
set "var=value"
不要在代码块内使用无效标签::
,而是使用rem
在路径中添加双引号,例如:copy /y "%cd%\%%i\keys\*.txt" "%keysPath%"
使用%%~fi
代替cd
作为完整路径
@echo off
:start
set "modsPath=C:\Example"
set "keysPath=%modsPath%\keys"
for /d %%i in (@*) do (
echo %%~fi
copy /y "%%~fi\keys\*.txt" "%keysPath%"
rem comments like this
)
pause>nul
【讨论】:
好像看不懂%%~fi,它返回:%~fi (from echo) and "Path not found" 您是否按原样复制代码?请仔细检查。%%~f
是变量的有效扩展。见for /?
来自cmd
我将我的实际批次与我的副本混合在一起进行测试,效果很好,非常感谢您的帮助。谢谢以上是关于批处理文件只运行一次,FOR循环出错的主要内容,如果未能解决你的问题,请参考以下文章