我试过这样做,但没有效果
:: variables
/min
SET odrive=%odrive:~0,2%
set backupcmd=xcopy /s /c /d /e /h /i /r /y
echo off
for /r C:\ %f in (*.jpg) do @copy "%drive%\all\pics"
@echo off
cls
答案1
我试过这样做,但没有效果
您的批处理文件存在许多问题。
用于%
您需要%%
在批处理文件中使用。%
用于命令行。
使用 /min
:: variables
/min
/min
- '/min' 未被识别为内部或外部命令、可运行程序或批处理文件。我不确定您要用这个做什么。
用于odrive
SET odrive=%odrive:~0,2%
是否odrive
已定义?如果没有,则将设置为~0,2
。无论如何都不会再次使用它。
用于backupcmd
set backupcmd=xcopy /s /c /d /e /h /i /r /y
你不使用backupcmd
用于for
echo off
for /r C:\ %f in (*.jpg) do @copy "%drive%\all\pics"
这不是 的有效用法for
。您需要使用%%f
not %f
。
copy
至少需要两个参数,源和目标。
已经%drive%
定义了吗?
尝试以下for
命令:
for /r C:\ %%f in (*.jpg) do @copy %%f "%drive%\all\pics"
FOR 命令的操作可以概括为......
- 取一组数据
- 使 FOR 参数 %%G 等于该数据的某些部分
- 执行命令(可选择使用参数作为命令的一部分)。
- 对每一项数据重复上述步骤
如果您在命令行而不是批处理程序中使用 FOR 命令,则只需使用一个百分号:%G 而不是 %%G。
来源为了
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 对于/r- 循环遍历文件(递归子文件夹)。
答案2
尝试使用 /MIR 选项的 ROBOCOPY 命令。它会递归搜索所有文件夹并复制刚刚更新/新的文件。源目录结构将在目标上重新创建。用法例如
robocopy /mir <source path> <target path>
答案3
我一直认为越少越好。为什么不试试下面的方法呢?
xcopy /c/d/e/f/h/r/y c:\*.jpg .
笔记:
- /e 暗示 /s
- 由于目的地存在,因此不需要/i。
- 仅指定 jpg 文件
- “.”的目标表示当前目录,假设 bat 文件在 USB 上。
答案4
我知道这会让老话题复活,但是我在互联网上找到了这段代码(它被复制了很多次),但没有清楚地解释无意义的初始化%odrive%
和非初始化%drive%
。
它不起作用,因为他们遗漏了一些代码。以下是修复方法:
代替:
SET odrive=%odrive:~0,2%
和:
SET odrive=%CD%
SET drive=%odrive:~0,2%
第一行将当前目录作为%odrive%
,第二行删除前两个字符(例如C:
)并将其分配给%drive%
请注意,该脚本假定它是从可移动驱动器运行的。因此,您只需将所有实例替换为%drive%
,.
它就会同样有效。