Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在每个子文件夹中运行命令_Windows_Command Line_Batch File - Fatal编程技术网

Windows 在每个子文件夹中运行命令

Windows 在每个子文件夹中运行命令,windows,command-line,batch-file,Windows,Command Line,Batch File,在路径的每个子文件夹中运行命令的最简单方法是什么?在这种情况下,我必须对存储库中的每个目录运行svn cleanup。自动递归到子目录中。我不知道为什么您需要为该特定命令手动递归。for命令就是您想要的。要了解确切的语法,请键入/?的 例如,为了打印当前目录中所有子目录的名称。您可以使用以下命令: for /d /r %i in (*.*) do @echo %i echo%i部件是您必须更改以适合您的情况的部件 我发现在这种情况下,删除工作副本并重新签出要容易得多。如果您有本地更改,请先将更

在路径的每个子文件夹中运行命令的最简单方法是什么?在这种情况下,我必须对存储库中的每个目录运行svn cleanup。

自动递归到子目录中。我不知道为什么您需要为该特定命令手动递归。

for
命令就是您想要的。要了解确切的语法,请键入/?的

例如,为了打印当前目录中所有子目录的名称。您可以使用以下命令:

for /d /r %i in (*.*) do @echo %i

echo%i部件是您必须更改以适合您的情况的部件

我发现在这种情况下,删除工作副本并重新签出要容易得多。如果您有本地更改,请先将更改的文件复制到其他位置

但在您的情况下可能会起作用,除非SVN有更大的问题。虽然您可能需要运行它几次,因为它将从根文件夹开始,但仍然会有问题,然后。在这种情况下,您需要某种post-order遍历,这不能用/r完成,但可以确保从层次结构中的最低目录开始清理

您还需要排除SVN的状态保持目录。SVN:

for /r /d %i in (*) do if NOT %i==.svn svn cleanup %i
对于后序遍历,您可以构建一个小批量:

@echo off
call :recurse "."
goto :eof

:recurse
pushd %1
if not %~1==.svn (
    for /d %%i in (*) do call :recurse "%%i"
    echo svn cleanup %~1
)
popd
goto :eof
在下面的树上:

a ├───.svn ├───a1 │ └───.svn └───a2 └───.svn b ├───.svn ├───b1 │ ├───.svn │ ├───b11 │ │ └───.svn │ └───b12 │ └───.svn └───b2 A. ├───.svn ├───a1 │ └───.svn └───a2 └───.svn B ├───.svn ├───b1 │ ├───.svn │ ├───b11 │ │ └───.svn │ └───b12 │ └───.svn └───b2 这将产生以下输出:

svn cleanup "a1" svn cleanup "a2" svn cleanup "a" svn cleanup "b11" svn cleanup "b12" svn cleanup "b1" svn cleanup "b2" svn cleanup "b" svn cleanup "." svn清理“a1” svn清理“a2” svn清理“a” svn清理“b11” svn清理“b12” svn清理“b1” svn清理“b2” svn清理“b” svn清理” 如您所见,它确保首先处理最低的目录,并跳过.svn目录。如果要使用回声,请将其移除。这可以解决你的问题。可能。

如中所述,帮助:

要显式指定根目录,请执行以下操作:

for /D /R "D:\Root" %I in ("*") do @echo "%~I"

通过以下方法可以实现完全相同的效果:

这个命令行,以及前面提到的命令行,从上到下遍历目录树。要扭转这种局面,只需结合以下内容:


以上所有操作都不允许返回根目录。要包含它,请使用以下代码:

for /F "delims=" %J in ('^(for /R "D:\Root" %I in ^(.^) do @echo "%~fI"^)') do @echo "%~J"
要再次颠倒从下到上的顺序,请使用以下命令:

for /F "delims=" %J in ('^(for /R "D:\Root" %I in ^(.^) do @echo "%~fI"^^^& rem/^) ^| sort /R') do @echo "%~J"

在根文件夹中:>svn cleanup svn:directory'main\create\u course'svn:Error processing命令'committed'在'main\create\u course'中svn:Working copy'main'locked svn:run'svn cleanup'以移除锁(键入'svn help cleanup'了解详细信息)当我进入有问题的文件夹并首先在那里执行svn cleanup时,然后,在执行主svn清理时,我会更进一步:听起来像是清理中的虫子。我想知道这是否是Windows实现特有的。格雷格:我有过很多类似的问题。有时svn似乎只破坏了一半的工作副本,最简单的修复方法是重新签出。虽然我最近遇到的大多数案例都是SVNKit中的故障;对于64位Subclipse,您没有太多的选择:/这有一个不幸的副作用,即对目录树进行预排序遍历。因此,在尝试较低级别的清理之前,顶级清理将失败,这意味着您必须在解决问题之前对该行进行多次tun。
for /F "delims=" %I in ('dir /S /B /A:D "D:\Root\*" ^| sort /R') do @echo "%~I"
for /F "delims=" %J in ('^(for /R "D:\Root" %I in ^(.^) do @echo "%~fI"^)') do @echo "%~J"
for /F "delims=" %J in ('^(for /R "D:\Root" %I in ^(.^) do @echo "%~fI"^^^& rem/^) ^| sort /R') do @echo "%~J"