Windows 使文件可递归写入

Windows 使文件可递归写入,windows,command-line,batch-file,cmd,Windows,Command Line,Batch File,Cmd,我试图使每个文件写在某些文件夹下使用这个 对于/d/r.%(nbproject)中的d do@if exist“%%d”dir“%%d”/S | attrib-R/S/d“%%d” 当在文件夹中时 目录“%%d”/S|attrib-R 很好用。但是,当从批处理脚本运行时,它无法正确执行操作。请注意。使用如下嵌套循环:只需将文件夹名称更改为您选择的文件夹即可 @echo off for /D /R %%D in (nbproject Folder2 Folder3) do if exist "%%

我试图使每个文件写在某些文件夹下使用这个

对于/d/r.%(nbproject)中的d do@if exist“%%d”dir“%%d”/S | attrib-R/S/d“%%d”

当在文件夹中时

目录“%%d”/S|attrib-R


很好用。但是,当从批处理脚本运行时,它无法正确执行操作。请注意。

使用如下嵌套循环:只需将文件夹名称更改为您选择的文件夹即可

@echo off
for /D /R %%D in (nbproject Folder2 Folder3) do if exist "%%~fD" (
    pushd "%%~fD"
    for /R %%F in (*) do if exist "%%~fF" attrib -R "%%~fF" /D
    popd
)
一艘班轮:

for /D /R %%D in (nbproject Folder2 Folder3) do @if exist "%%~fD" @cd /D "%%~fD" && for /R %%F in (*) do @if exist "%%~fF" attrib -R "%%~fF" /D
我们也来分析一下第一行代码可能失败的原因

  • 您正在将
    dir
    的输出输送到
    attrib
    中,并使用
    d
    变量。只需要一个。如果将
    d
    变量与
    attrib
    一起使用,请使用
    符号,否则请删除
    d
    变量
  • /b
    选项与
    dir
    命令一起使用,尤其是在管道输出时
  • for命令中不需要
    。如果未指定,则假定当前目录
  • 引用循环变量时,请使用波浪号
    ~
    删除现有的周围引号,以避免出现双引号
  • dir
    中使用
    attrib
    时,不需要
    /S
    选项
  • 例如:

    for /d /r %%d in (nbproject) do @if exist "%%~d" dir "%%~d" /B /S | attrib -R /D
    

    感谢您的解释,但这使所有文件都可写,在nbproject的同一层次结构级别的所有文件夹中。尝试了一些变体,但无法完成。@BasitAnwer我修复了代码,只搜索有问题的目录。然而,我修改的代码对我来说很好。您只需将每个文件夹名称添加到第一个for parenthases循环中的空格分隔列表中。很抱歉,您修复的代码无效。。。在尝试了一些之后,我确实设法让它工作===for/d/r.%d在(nbproject)do@if exist“%%~d”dir“%%d”/S | attrib-R“%%~d”*/S/d中您更新的代码工作得非常好,我认为我的for循环非常粗糙,使用了您的:)@domino_katrino一行程序仍然使用批处理变量语法。如果要在命令行上使用一行程序,必须将
    %%
    更改为
    %%
    。例如:
    for/d/r%d in(nbproject)do@if exist“%~d”dir“%~d”/B/S|attrib-r/d