batch-file - 用空格替换文件夹名称中的点的批处理脚本

标签 batch-file replace cmd naming directory-structure

我的一个用户在将云同步到本地工作站时遇到问题。他在深度(10+)文件夹结构模式中拥有很多文件夹,并且每个文件夹至少包含三个点(“xy. asdf.qwer $通用描述符")。

所以现在有了大foobar。在线一切正常,可以按预期创建和编辑新文件。但同步的文件在 Windows 10 企业版上不断崩溃,资源管理器会发出“错误的文件夹名称”等警告。所以我允许用户通过 GPO 使用长文件夹名称(最多 260 个字符...认真的?),我认为“干得好。问题解决了”...但是没有...同步的本地文件仍然有问题...所以我通过注册表允许相同的选项。彼此彼此。资源管理器一直在提示。

所以我决定更改文件夹名称并删除点并用空格替换它们。因此文件夹“xy.asdf.qwer $通用描述符”将是“xy asdf qwer $通用描述符”。用户说没关系,所以我编写了一个批处理来重命名文件夹。抱歉,我的 powershell 真的很糟糕。但如果你知道 powershell 中的解决方案,它也会受到赞赏并且很好。

@echo off
setlocal enabledelayedexpansion

set "leer= "
set "punkt=."

call :rekursion
goto :eof

:rekursion
for /D %%d in (*) do (
    set name=%%~nxd
    ren "%%d" "!name:%punkt%=%leer%!"
    cd %%d
    call :rekursion
    cd ..
)
exit /b

批处理工作正常,但不断抛出错误并告诉我“不允许”...有什么问题吗?为什么它有效但有提示?我缺少什么?所有权限均设置正确(完全访问...) [抱歉英语不好...]

最佳答案

这个 PowerShell 脚本将执行您想要的操作。如果您使用的是受支持的 Windows 平台,则可以使用 PowerShell。

我不想在目录或文件名中出现空格字符,但这是你的选择。当您对名称的正确更改感到满意时,请从 Rename-Item 命令中删除 -WhatIf

#Requires -Version 3
$BaseDir = 'C:\src\t'
Get-ChildItem -Recurse -Directory -Path $BaseDir |
    Sort-Object -Descending -Property FullName |
    Where-Object { $_.Name -match '\.' } |
    ForEach-Object {
        $NewName = $_.Name -replace '\.',' '
        Rename-Item -Path $_.FullName -NewName $NewName -WhatIf
    }

关于batch-file - 用空格替换文件夹名称中的点的批处理脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63174903/

相关文章:

python - 使用python脚本调用cmd命令[youtube-upload]

Windows 调度程序不执行批处理脚本,但脚本在命令行中运行良好

Vim 可变长度通配符搜索和替换?

linux - grep 和 sed 文件名中有空格

java - 将唯一的文件扩展名扫描到变量中

javascript - 使用javascript以管理员身份运行批处理的简单方法

python - 使用正则表达式,python多次替换两个字符串之间的字符串

Java:从字符串数组创建命令

windows - 如何向 Windows CMD 添加 gzip 命令?

windows - 批处理文件 : Return to caller?