使所有名称为“ abc”的子文件夹及其内容可写-Windows

时间:2019-01-08 12:51:59

标签: windows powershell cmd

说明:

在Windows中,如果您右键单击文件夹/文件,则有一个只读复选框,我要一个命令从该复选框中删除该勾号。

稍微复杂一点:

我希望命令将所有子文件夹保存在名称为abc的文件夹(A)中,并从其中删除“只读”对勾及其所有内容

我在其他问题中也发现了这一点,但是没有成功将它们组合的好运

结构示例:

+---A
|   +---B
|   |   +---abc
|   |   |   |   file1.txt <-- apply here ---
|   |   |   |   file2.txt <-- apply here ---
|   |   |   |   file3.txt <-- apply here ---
|   |   |   |   file4.txt <-- apply here ---
|   |   |   |   file4.txt <-- apply here ---
|   |   |   +---d
|   |   |   |   |   file1.txt <-- apply here ---
|   |   |   |   |   file2.txt <-- apply here ---
|   +---e
|   |   +---f
|   |   +---abc
|   |   |   |   file1.txt <-- apply here ---
|   |   |   |   file2.txt <-- apply here ---
|   |   |   |   file3.txt <-- apply here ---
|   |   |   |   file4.txt <-- apply here ---

etc

4 个答案:

答案 0 :(得分:2)

这可以做到。

$folder = 'c:\test'
$MatchingSubfolders = Get-ChildItem -Path $folder -Directory 'abc' -Recurse
    Foreach ($item in $MatchingSubfolders) {
        Get-ChildItem -Path $item.FullName -File -Recurse | % {Set-ItemProperty $_.FullName -name IsReadOnly -value $false}
    }
  

Set-ItemProperty

     

说明

     

Set-ItemProperty cmdlet更改了   指定项目。您可以使用cmdlet建立或更改   项目的属性。例如,您可以使用Set-ItemProperty进行设置   文件对象的IsReadOnly属性的值设置为$True

     

您还可以使用Set-ItemProperty创建和更改注册表值,以及   数据。例如,您可以将新的注册表项添加到密钥,然后   建立或更改其价值。

     

Set-ItemProperty -Path C:\GroupFiles\final.doc -Name IsReadOnly -Value $true

答案 1 :(得分:2)

您可以使用它来查找显示目录中的所有文件:

std::allocator

并在文件名为父目录(-eq)'abc'的父目录中设置isReadOnly值off

您可以编写一个可能的函数,如下所示:

std::allocator<T>::rebind

答案 2 :(得分:1)

您可以使用Windows (请参阅所有说明性的rem备注):

@echo off
rem /* Find sub-directories named `abc` and loop through them;
rem    the root directory, hence the current one, is expected not to match: */
for /F "delims= eol=|" %%D in ('dir /B /S /A:D "abc"') do (
    rem // Return all files in the currently iterated sub-directory:
    for /F "delims= eol=|" %%F in ('dir /B /S /A:-D "%%D\*.*"') do (
        rem // Do the attribute change at this point:
        attrib -R "%%F"
    )
)

要直接在Windows 命令行中使用该代码,必须对其进行更改(无注释):

for /F "delims= eol=|" %D in ('dir /B /S /A:D "abc"') do @for /F "delims= eol=|" %F in ('dir /B /S /A:-D "%D\*.*"') do @attrib -R "%%F"

答案 3 :(得分:1)

我同意PowerShell是一个不错的选择。这并不意味着旧的方法会停止工作。

FOR /F "delims=" %d IN ('DIR /S /B /A:D "C:\test" 2^>NUL') DO (
    IF /I "%~nxd" == "abc" (ATTRIB -R "%~d" & ATTRIB -R "%~d\*")
)