如何找到所有';SVN工作副本';关于WinXP
我有Windows XP。我想升级我的电脑。 为了做到这一点,我需要确保我可以在我的电脑上找到所有SVN工作副本。这样它们就可以更新 我找到了一个,但它是特定于Powershell的。所以,我想知道是否有一个更通用的解决方案来查找WinXP上的所有“SVN工作副本” 如果我知道windows上“linux find”的等价物,我可能会自己写。 但我希望已经有一个bash脚本(或者更简单的解决方案)可以供我和其他人使用如何找到所有';SVN工作副本';关于WinXP,svn,windows-xp,find,Svn,Windows Xp,Find,我有Windows XP。我想升级我的电脑。 为了做到这一点,我需要确保我可以在我的电脑上找到所有SVN工作副本。这样它们就可以更新 我找到了一个,但它是特定于Powershell的。所以,我想知道是否有一个更通用的解决方案来查找WinXP上的所有“SVN工作副本” 如果我知道windows上“linux find”的等价物,我可能会自己写。 但我希望已经有一个bash脚本(或者更简单的解决方案)可以供我和其他人使用 扫描计算机 如果它找到一个包含名为“.svn”的目录 呼应那个名字,然后
- 扫描计算机
- 如果它找到一个包含名为“.svn”的目录
- 呼应那个名字,然后
- 不再搜索该目录
dir.svn/s
就可以了(尽管它不会从扫描子目录中断),或者你可以使用Windows资源管理器让小狗找到所有的.svn文件
或者你可以下载并使用find 要查找所有.svn文件,可以使用dir
dir.svn/s
就可以了(尽管它不会从扫描子目录中断),或者你可以使用Windows资源管理器让小狗找到所有的.svn文件
或者你可以下载并使用find 对于Windows box上复杂而强大的搜索,我可以推荐(我在现实生活中使用它)
- Total Commander内部的嵌入式搜索(您有公平的评估时间)
- GrepWin(文件名模式使用通配符和regexp关键字)
.svn>dir /B
all-wcprops
entries
prop-base
props
text-base
tmp
1.7高级副总裁
.svn>dir /B
entries
format
pristine
tmp
wc.db
对于Windows box上复杂而强大的搜索,我可以推荐(我在现实生活中使用它)
- Total Commander内部的嵌入式搜索(您有公平的评估时间)
- GrepWin(文件名模式使用通配符和regexp关键字)
.svn>dir /B
all-wcprops
entries
prop-base
props
text-base
tmp
1.7高级副总裁
.svn>dir /B
entries
format
pristine
tmp
wc.db
我已设法在Win XP上找到所有“SVN工作副本” 我是用Alexey Shcherbak提供的 下面是使用PowerShell方法的流程摘要 测试以查看是否已安装PowerShell。 Windows PowerShell是一个命令行shell和脚本环境,它将.NET Framework的强大功能带给命令行用户和脚本编写者 通过尝试启动它来测试它是否已安装 要从运行框启动Windows PowerShell,请单击开始,单击运行,然后键入:
powershell
如果这不起作用
安装它
- 从下载适用于Windows XP的Microsoft Windows PowerShell 1.0
- (适用于Windows XP的PowerShell 2也可用,但我没有使用它。()
C:\PowerShellScripts\FindsvnWorkingDirectory.ps1
的格式
我稍微修改了它以搜索我的C驱动器并抑制拒绝访问错误:
$prev = "^$"
Get-ChildItem -ErrorAction SilentlyContinue -Recurse -Force -Include ".svn" -Path "c:\" `
| ?{$_.PSIsContainer -and $_.Fullname.StartsWith($prev)-eq $false}`
| %{ $prev=$_.Fullname.TrimEnd(".svn"); $prev}
要详细解释此脚本的作用,请执行以下操作:
$prev=“^$”
初始化$prev
以清空匹配的正则表达式^$
将永远不会匹配任何有意义的值(STARTINE endline除外)。这是通过初步检查所必需的
Get-ChildItem -ErrorAction SilentlyContinue -Recurse -Force -Include ".svn" -Path "c:\" `
以递归方式从路径开始获取名为“.svn”的所有对象(在本例中,所有文件和文件夹的确切名称为“.svn”)
- 默认情况下,
是Get ChildItem
命令的别名dir
-防止显示错误,例如访问路径“C:\System Volume Information”被拒绝-ErrorAction SilentlyContinue
表示重复搜索-Recurse
确保找到隐藏的文件-Force
标识我们正在搜索的文件名-Include“.svn”
i标识要搜索的路径-Path“c:\”
- `背景勾号的意思是李>
| ?{$_.PSIsContainer -and $_.Fullname.StartsWith($prev)-eq $false}`
管道符号|
将Get ChildItem
的输出管道化到下一个cmdlet中
?{…语句…}
是cmdlet的缩写
$是处理管道中“每个”条目的方法。它基本上说“如果条目是一个目录”和“fullname不以$prev的值开头”,然后“将条目传递到下一个构造”
然后该条目通过管道传输到下一条语句
%{}
是的缩写。此构造有两个功能:
- 将当前文件夹的全名指定给
$prev
(不带“.svn”尾部)
- 将
$prev
传递到下一个管道接收器
允许PowerShell运行该脚本
默认情况下,出于安全考虑,PowerShell的ExecutionPolicy
不允许您运行PowerShell脚本。所以,你需要允许它这样做
有关更多信息,请参阅
我做了以下工作:
注意:散列符号(#)只是命令提示符的shorthand
确定当前的执行策略
:
# Get-ExecutionPolicy
Restricted
# Get-ExecutionPolicy
RemoteSigned
如果像我一样,它是受限制的。更改采购订单
# Get-ExecutionPolicy
RemoteSigned
# Set-ExecutionPolicy Restricted
$prev = "^$"
$workingCopies = Get-ChildItem -Recurse -Force -Include ".svn" -Path "d:\Projects\" |?{$_.PSIsContainer -and $_.Fullname.StartsWith($prev)-eq $false} |%{$prev=$_.Fullname.TrimEnd(".svn"); $prev}
foreach($copy in $workingCopies)
{
&"C:\Program Files\TortoiseSVN\bin\svn.exe" upgrade $copy;
}
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -NoProfile -ExecutionPolicy Unrestricted -File “C:\Projects\ConvertSvnToVersion17.ps1”
$prev = "^$"
Get-ChildItem -Recurse -Force -Include ".svn" -Path "d:\Projects\"
?{$_.PSIsContainer -and $_.Fullname.StartsWith($prev)-eq $false}
foreach($entry in $entriesFromSomewhere)
{
If($entry.PSIsContainer -eq $true -and $entry.Fullname.StartsWith($prev) -eq $false)
{
"If entry is directory" and "fullname not start with value from $prev"
...Pass entry to next construct...
}
}
%{$prev=$_.Fullname.TrimEnd(".svn"); $prev}
foreach($copy in $workingCopies)
{
&"C:\Program Files\TortoiseSVN\bin\svn.exe" upgrade $copy;
}