【问题标题】:windows batch: copy files in the loopwindows批处理:循环复制文件
【发布时间】:2026-02-09 06:40:02
【问题描述】:

我有一个包含 .txt 文件的目录。我需要遍历它们并执行两个任务:将文件传递到 Oracle 的存储过程中并将其移动到存档目录中。出于某种原因,第二个任务对我不起作用。我错过了什么?

REM -----------------------------------------
REM first step changes file extension to .632
REM -----------------------------------------
for /f %%I in ('dir /b \\db01\load\*.txt') do (sqlplus.exe usr/pwd@DB @\\db01\sql\load.sql %%I)
for /f %%I in ('dir /b \\db01\load\*.632') do (move \\file01\archive)

【问题讨论】:

  • 括号内的每个文件名输出都分配给元变量%%I;因此,您需要提供%%I 作为move 命令的参数。第二行的for 循环是否有原因?你不能只使用带有通配符的move 吗? 在命令提示符处输入 move /? 以获取使用信息。
  • 所以我可以这样做:for /f %%I in ('dir /b \\db01\load\*.txt') do (sqlplus.exe usr/pwd@DB @\\db01\sql\load.sql %%I move %%I \\file01\archive)for /f %%I in ('dir /b \\db01\load\*.txt') do (sqlplus.exe usr/pwd@DB @\\db01\sql\load.sql %%I) move \\db01\load\*.632 \\file01\archive

标签: batch-file for-loop move


【解决方案1】:

这里有几个未经测试的例子:

@Echo Off
PushD "\\db01\load" 2>Nul || Exit /B
For %%A In (*.txt *.632) Do (
    If /I "%%~xA"==".txt" sqlplus usr/pwd@DB @"..\sql\load.sql" "%%A"
    If /I "%%~xA"==".632" If Exist "..\..\file01\archive\" Move /Y "%%A" "..\..\file01\archive" >Nul
)
PopD

 

@Echo Off
PushD "\\db01\load" 2>Nul || Exit /B
For %%A In (*.txt) Do sqlplus usr/pwd@DB @"..\sql\load.sql" "%%A"
If Exist "*.632" Move /Y "*.632" "..\..\file01\archive" >Nul
PopD

此外,根据您的sqlplus 命令要求,您可能希望查看Start 命令使用信息,start /?

【讨论】: