我试图将我的dotnet核心项目(在Windows中)配置为“区分大小写”,因此其行为与在生产服务器(Linux)中一样。
我有found this way这样做:
fsutil.exe file setCaseSensitiveInfo "C:\my folder" enable
问题在于此函数不是递归的:
区分大小写标志仅影响您将其应用到的特定文件夹。该文件夹的子文件夹不会自动继承该文件。
因此,我正在尝试构建一个Powershell脚本,将该脚本以递归方式应用于所有文件夹和子文件夹。
我曾尝试使用类似的工具搜索并只是修改了命令行,但似乎没有找到corrent关键字。这是此类示例的the closest that I've gotten。
答案 0 :(得分:12)
(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ enable}
Get-ChildItem -Recurse -Directory
将为您提供所有文件夹的列表(递归)。
要传递其完整路径,可以使用.FullName
(或更多不言自明的| Select-Object -ExpandProperty FullName
)进行访问。
然后,您使用ForEach-Object
多次运行fsutil.exe
。可以使用FullName
(代表$_
中的当前对象)访问当前文件的ForEach-Object
。
答案 1 :(得分:2)
使用Cygwin和bash shell,您可以执行以下操作:
$ find $THEDIR -type d -exec fsutil file setCaseSensitiveInfo "{}" enable \;
看来Windows可以很好地处理find
命令输出的'/'字符。
答案 2 :(得分:1)
(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {if (-Not ($_ -like '*node_modules*')) { fsutil.exe file setCaseSensitiveInfo $_ enable } }
我修改了@robdy的代码,以允许排除node_modules
。您可以使用任何内容替换上面的“ node_modules”位,以排除包含它的文件路径。
如果您正在使用npm,则可能要排除node_modules
。 @robdy的answer很棒,但是即使我没有安装软件包,一次遍历每个单节点软件包文件夹也要花费几分钟。鉴于这是一个人们可能经常希望运行的东西,因为可能一直在添加目录,并且由于您可能没有在node_modules
中进行任何修改,因此似乎很合理。
答案 3 :(得分:1)
就我而言,在使用fsutil工具之前,我必须首先启用Linux子系统。所以我的步骤是:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
然后重新启动,然后是@robdy的解决方案:
(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ enable}