这个语法有什么问题?批量

时间:2017-09-02 20:51:41

标签: batch-file cmd syntax

我试图在Windows cmd中运行此命令,但是出现语法错误。

REG QUERY "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /d /t REG_SZ

此命令输出当前当前的壁纸目录,我想用它设置一个字符串(目录),然后将壁纸复制到我的桌面。

FOR /F "tokens=* USEBACKQ" %%F IN (`REG QUERY "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /d /t REG_SZ`) DO (
SET var=%%F
)
copy "%var%" "%userprofile%\Desktop\wallpaper.bmp"

我可以手动完成,但在我的情况下,必须自动完成。

2 个答案:

答案 0 :(得分:1)

有几个错误:

  • 请勿在查询中使用/T/D
  • 使用tokens = *您可以获得值并在数据前输入
  • 复制到固定扩展程序.bmp可能是错误的(irfanview回收错误类型,这里需要jpg)
@Echo off
FOR /F "tokens=2*" %%A IN (
    'REG QUERY "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper'
) DO SET "var=%%B"
copy "%var%" "%userprofile%\Desktop\wallpaper.bmp"

编辑无需分配给var,您可以直接复制:

) Do copy "%%B" "%userprofile%\Desktop\wallpaper.bmp"

答案 1 :(得分:0)

此脚本将实际设置壁纸从位置(由 HKCU \ Control Panel \ Desktop 键下的REG值壁纸给出)复制到桌面上。

@ECHO OFF
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper') DO COPY %%B "%userprofile%\Desktop\"Wallpaper.jpg
  • delims是一个TAB,后跟一个空格,您可以将其设置为您想要的默认值,即TAB后面跟一个空格。
  • tokens = x,y,m-n - 指定每次迭代将每行中的哪些标记传递给for body。 这将导致分配其他变量名称。 m-n形式是一个范围,指定通过第n个标记的第m个。 如果tokens = string中的最后一个字符是星号,则分配另一个变量,并在解析完最后一个令牌后接收该行上的剩余文本。

简单的单词TL; DR:

  • delims 描述"空格"或者从每个
  • 中分离出来的东西
  • 令牌是您想要的输出块(*表示所有输出块之后)
  • %% A (或%A)是第一个缓存的令牌,%% B是第二个

亲切的问候MEv