尝试在批处理文件

时间:2015-12-30 20:05:38

标签: windows batch-file cmd copy xcopy

我正在尝试从一个文件夹中复制一些图片并使用批处理将其移动到另一个文件夹。我在设置路径时遇到了麻烦,因为路径中包含空格。如果我从文件夹中删除空格它工作正常但有空格会出错找不到路径 ..这里是代码

@echo off 

SET odrive=%odrive:~0,2%
setlocal enabledelayedexpansion

set backupcmd=echo
set backupcmd=xcopy /s /c /d /e /h /i /r /y

set "filesw=C:\Users\%USERNAME%\Numerical Analysis\*.png"

for /f "delims=" %%i in ('dir /s /b %filesw%') do (
  if "%%~xi"==".pdf" set "dest=D"
  if "%%~xi"==".docx" set "dest=P"
  if "%%~xi"==".zip" set "dest=Z"
  if "%%~xi"==".rar" set "dest=Z"
  if "%%~di"=="C:" if "!dest!"=="Z" set "dest=!dest!3"
  %backupcmd% "%%i" "%drive%\Personal\PICS\Wedding\Barat\MOVIE!dest!\"
)

@echo off 
cls

如果你们帮我解决这个问题,那将会非常有帮助。

2 个答案:

答案 0 :(得分:1)

我就是这样做的。使用FOR / R命令遍历目录树,查找所需的文件类型。但我只是猜测你想要做什么。

@echo off 

setlocal enabledelayedexpansion

set backupcmd=xcopy /s /c /d /e /h /i /r /y

set "filep=C:\Users\%USERNAME%\Numerical Analysis"

for /R "%filep%" %%i in (.) do (
    if "%%~xi"==".pdf" set "dest=D"
    if "%%~xi"==".docx" set "dest=P"
    if "%%~xi"==".zip" set "dest=Z"
    if "%%~xi"==".rar" set "dest=Z"
    if "%%~di"=="C:" if "!dest!"=="Z" set "dest=!dest!3"
    %backupcmd% "%%i" "%drive%\Personal\PICS\Wedding\Barat\MOVIE!dest!\"
)

答案 1 :(得分:1)

您的问题的解决方案,特别是“设置路径,因为路径中包含空格”导致“无法找到路径”是“引用文件规范”因此:

for /f "delims=" %%i in ('dir /s /b "%filesw%"') do (

通过这种方式,双引号之间的字符串是按字面意思使用的(尽管某些特殊字符具有像&^)!这样的批处理含义需要转义;也就是说,前面有一个插入符号^ )。正如你所拥有的那样,dir命令将使用多个参数执行,因为空格是分隔符,变量filesw将在执行前逐字地替换为dir命令 - 和大多数命令一样, dir使用空格(逗号,制表符,分号)作为分隔符。