批处理文件 - 属性 +r %Var1%

Batch File - Attrib +r %Var1%

我有一个无疑是愚蠢的问题。我需要将文件的属性更改为只读。我知道用...

atrrib +r c:\somefile.txt

并且有效。但是在我的程序中,我想使用一个变量来代替预先建立的路径。现在如果我写...

set File=c:\somefile.txt

attrib +r %File%

然后我收到一条错误消息说 'attrib' 未被识别为内部或外部命令等

但是,如果我事先回显 %File%,那么我就知道文件的路径是正确的并且正在被正确读取。

我的错误是什么?非常感谢!!!

编辑:

set File=Main.xaml
set Folder=C:\Users\yef03111\Desktop\His0164\WINDOW\ALS026-01~EDF
set Path=%Folder%\%File%

echo %Path%

但是,如果我将 echo 更改为 attrib +r 而没有其他...

attrib +r %Path%

我收到 'attrib' 无法识别的错误。这是当前不起作用的示例。希望你能从中有所发现!

我已经在 windows 7 上使用 Cmd 测试了您的脚本。效果很好,所以我无法重现您所看到的内容。

我曾经做过很多批处理脚本,而且我曾经使用标准 windows 记事本得到随机错误。告诉尾部脚本中问题的迹象是空白字符。如果你用的是记事本,请改用记事本++写这个,看看还会不会报错。

问题是您正在设置一个名为 PATH 的环境变量。这将覆盖系统 PATH 变量,该变量包含可执行文件的位置,例如 attrib。它的工作方式是,为了找到 运行 的程序,OS 查找 PATH 变量并在其中列出的文件夹中搜索具有您要尝试的程序名称的可执行文件运行。当您更改 PATH 变量时,OS 无法再找到 attrib 命令。

将变量的名称从路径更改为文件路径,它将起作用。

Path 是一个系统变量,它告诉 CMD、Explorer 和 CreateProcess 在何处查找命令。

当您删除系统变量时,CMD 不再在 system32 中查找 attrib 等命令。

set Path=%Folder%\%File%

作为一般规则,避免系统在命名您自己的东西时可能使用的名称。很多人会做 MyFileProgPath.

如果当前目录是 System32,也总是会找到像 attrib 这样的命令。当前目录总是首先搜索命令(程序)。我怀疑 RunAs 将当前目录设置为 System32。