心若相知心自暖 發表於 2025-12-28 10:03:31

windows:icacls命令行修改文件使用默认继承的ACL及ant脚本实现过程

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">windows:icacls命令行修改文件使用默认继承的ACL及ant脚本</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">下图是icals中命令行说明</a></li><li><a href="#_lab2_0_1">修改后的文件会失去来自文件默认ACL</a></li></ul><li><a href="#_label1">总结</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>windows:icacls命令行修改文件使用默认继承的ACL及ant脚本</h2>
<p>windows下修改文件或文件夹的权限是使用icacls命令,关于使用icals的详细说明参见icacls的命令行帮助。</p>
<p>如果你只是简单的想让文件继承来自文件夹默认ACL,就很方便 ,执行下面的命令就可以了</p>
<div class="jb51code"><pre class="brush:bash;">icacls filename /reset</pre></div>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>下图是icals中命令行说明</h3>
<p>红框标注就是上面命令的解释</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025122809592052.png" /></p>
<p>使用ant 脚本命令<a href="http://ant.apache.org/manual/Tasks/replaceregexp.html" rel="external nofollow" target="_blank">replaceregexp</a>修改文件内容的时候会有个毛病:</p>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>修改后的文件会失去来自文件默认ACL</h3>
<p>比如原本文件所在的文件夹是everyone可读取的,那么用<a href="http://ant.apache.org/manual/Tasks/replaceregexp.html" rel="external nofollow" target="_blank">replaceregexp</a>修改文件的内容后,everyone的访问权限会丢失,所以就需要用icacls来修改文件的权限(我也是因为这个问题才研究icacls命令的)。</p>
<p>于是我们可以在ant脚本中如下方式调用icacls来修改文件权限</p>
<div class="jb51code"><pre class="brush:xml;">                &lt;!--搜索替换文件中的字符串,修改database.sql.ext.dir指向的目录位置--&gt;
                &lt;replaceregexp match='(property\s+name="database.sql.ext.dir"\s+value=")(\S+)("\s*)' replace="\1$${release.facedatabase.dir}\3" flags="i" byline="true" encoding="utf-8"&gt;
                        &lt;fileset dir="${dir_of_file}" includes="${filename}" /&gt;
                &lt;/replaceregexp&gt;
                &lt;!--修改文件权限,让文件使用默认继承的ACL--&gt;
                &lt;exec executable="cmd" dir="${dir_of_file}" osfamily="windows"&gt;
                        &lt;arg value="/c" /&gt;
                        &lt;arg value="icacls ${filename} /reset" /&gt;
                &lt;/exec&gt;
</pre></div>
<p class="maodian"><a name="_label1"></a></p><h2>总结</h2>
<p>以上为个人经验,希望能给大家一个参考,也希望大家多多支持琼殿技术社区。</p>
頁: [1]
查看完整版本: windows:icacls命令行修改文件使用默认继承的ACL及ant脚本实现过程