Board logo

标题: [其他] 批处理脚本%temp%需要加双引号吗? [打印本页]

作者: zhoubin    时间: 2021-5-14 08:28     标题: 批处理脚本%temp%需要加双引号吗?

如题:
本人小白一枚,弱弱地请教一下,%temp%需要加双引号吗?
举例:
If "%PROCESSOR_ARCHITECTURE:~-1%"=="4" if not "%windir:~,2%"=="X:" %Windir%\System32\rundll32.exe %Windir%\System32\setupapi.dll,InstallHinfSection DefaultInstall 128 "%temp%\re.inf"

If "%PROCESSOR_ARCHITECTURE:~-1%"=="4" if not "%windir:~,2%"=="X:" %Windir%\System32\rundll32.exe %Windir%\System32\setupapi.dll,InstallHinfSection DefaultInstall 128 %temp%\re.inf

这两句,貌似没什么区别,我就想知道%temp%\re.inf,规范的写法需不需要加双引号"%temp%\re.inf"

谢谢各位坛友,谢谢!!!
作者: qixiaobin0715    时间: 2021-5-14 09:36

我想不加是可以的。双引号在不同的地方有不同的作用,对于路径来说,加上双引号主要是为了应付路径中存在的空格或其它特殊字符(比如&等),这里路径中并不存在空格或其他特殊字符问题,加不加双引号对结果没什么影响。
作者: Batcher    时间: 2021-5-14 10:07

回复 1# zhoubin


    加双引号是个好习惯,以免路径中可能存在的空格导致代码出错。
作者: zhoubin    时间: 2021-5-14 11:46

本帖最后由 zhoubin 于 2021-5-14 11:51 编辑

winXP下试了一下,%temp%\re.inf显示为C:\DOCUME~1\FeiHu\LOCALS~1\Temp\re.inf,这个短名路径,是不是可以理解为不含空格路径
C:\Program Files\新建文件夹>If "6" == "4" if not "C:" == "X:" C:\WINDOWS\System32\rundll32.exe C:\WINDOWS\System32\setupapi.dll,InstallHinfSection DefaultInstall 128 C:\DOCUME~1\FeiHu\LOCALS~1\Temp\re.inf

winXP下的%temp%全路径为C:\Documents and Settings\FeiHu\Local Settings\Temp,是含空格的. . .
谢谢解答!!
作者: qixiaobin0715    时间: 2021-5-14 11:53

这个可以自己测试下吗
作者: zhoubin    时间: 2021-5-14 12:04

测试了,%temp%不加双引号是可以的
我写了好多的批处理,有的%temp%加了双引号,有的%temp%忘记加双引号,因为写的批处理很多,如果%temp%需要加双引号,有的批处理还在自解压.exe文件里执行,就有好多批处理需要修改,有点头大. . .
所以才来请教您!!!
作者: zhoubin    时间: 2021-5-14 12:06

谢谢指教,看来%temp%加不加双引号都是可以的. . .
作者: 1152    时间: 2021-5-14 17:41

回复 2# qixiaobin0715


    引号不能应对符号&^%@|的,只能应对空格
作者: zhoubin    时间: 2021-5-16 09:07

本帖最后由 zhoubin 于 2021-5-29 07:44 编辑

感谢指教,谢谢,顺便说一下,在winXP下又试了一下,这次用的是绝对路径
  1. If "%PROCESSOR_ARCHITECTURE:~-1%"=="6" if not "%windir:~,2%"=="X:" %Windir%\System32\rundll32.exe %Windir%\System32\setupapi.dll,InstallHinfSection DefaultInstall 128 C:\Documents and Settings\FeiHu\Local Settings\Temp\re.inf
复制代码
不加双引号,可以安装,看了有些大佬的写法,也是没有加双引号
  1. If "%PROCESSOR_ARCHITECTURE:~-1%"=="6" if not "%windir:~,2%"=="X:" %Windir%\System32\rundll32.exe %Windir%\System32\setupapi.dll,InstallHinfSection DefaultInstall 128 %temp%\re.inf
复制代码
我想rundll32安装.inf,可能比较特殊吧,所以我向大佬学习,rundll32安装%temp%\re.inf我不加双引号;其他情况,我用绝对路径就不行了,比如
  1. PUSHD %~dp0
  2. path %Windir%;%Windir%\System32;%Windir%\SysWOW64;"%CD%"
  3. regedit C:\Documents and Settings\FeiHu\Local Settings\Temp\测试.reg
复制代码
虽然,这样
  1. PUSHD %~dp0
  2. path %Windir%;%Windir%\System32;%Windir%\SysWOW64;"%CD%"
  3. regedit %Temp%\测试.reg
复制代码
也能成功,但还是建议加上双引号
  1. PUSHD %~dp0
  2. path %Windir%;%Windir%\System32;%Windir%\SysWOW64;"%CD%"
  3. regedit "%Temp%\测试.reg"
复制代码
其他情况,除了rundll32安装.inf外,建议都加上双引号,比如
  1. del "%Temp%\测试.reg"
复制代码
等情况,这里就不一一举例了

附上C:\Documents and Settings\FeiHu\Local Settings\Temp\re.inf文件代码,请朋友们验证测试
  1. [Version]
  2. Signature="$CHICAGO$"
  3. [Defaultinstall]
复制代码
C:\Documents and Settings\FeiHu\Local Settings\Temp\测试.reg文件,随便找一个空的reg(如下)测试即可
  1. Windows Registry Editor Version 5.00
复制代码

作者: 1152    时间: 2021-5-16 19:29

回复 9# qixiaobin0715


    “?”可以出现在路径中
  1. rd //?/%1
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2