如何将文件夹移动到具有要移动的文件夹的第一个字符名称的子文件夹中,并支持文件夹名称中的 Unicode 字符?

2024-06-23

我用这个批处理脚本 https://stackoverflow.com/a/65549119/3074564写于Mofi https://stackoverflow.com/users/3074564/mofi将文件夹移动到其他文件夹中。

@echo off
setlocal EnableExtensions DisableDelayedExpansion
%SystemRoot%\System32\tree.com
for /F "eol=| delims=" %%I in ('dir /AD /B 2^>nul') do (
    set "FolderName=%%I"
    setlocal EnableDelayedExpansion
    set "TargetFolder=!FolderName:~0,1!"
    if not "!TargetFolder!" == "!FolderName!" (
        md "!TargetFolder!" 2>nul
        move /-Y "!FolderName!" "!TargetFolder!\"
    )
    endlocal
)
%SystemRoot%\System32\tree.com
endlocal

它将当前文件夹中具有两个或多个字符的文件夹移动到子文件夹中,子文件夹的名称是要移动的文件夹的第一个字符,并自动创建目标文件夹(如果不存在)。

但如果文件夹名称包含一个或多个 Unicode 字符,则批处理脚本将不起作用。

PowerShell 有解决方法吗?

例如,它不会移动第一个字符为的文件夹Ш(西里尔大写字母 SHA)放入名为的文件夹中Ш.


是的,PowerShell 可以正确处理文件路径(以及一般情况)中的 Unicode 字符。

PowerShell 中的批处理文件代码的等效项是:

Get-ChildItem -Directory -Path ??* |
  Move-Item -Destination { 
    # Determine the target dir - the input dir's first letter -
    # ensure that it exists, and output it.
    New-Item -Type Directory -Force (Join-Path $_.Parent.FullName $_.Name[0])
  } -WhatIf

注:-WhatIf通用参数 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_commonparameters#whatif在上面的命令中previews the move手术。消除-WhatIf一旦您确定该操作将按照您的要求进行。然而,即使有
-WhatIf the 目标目录已创建马上。

  • Get-ChildItem https://learn.microsoft.com/powershell/module/microsoft.powershell.management/get-childitem -Directory -Path ??*获取名称至少由以下组成的所有目录2人物。

    • 兼容性说明:如Mofi https://stackoverflow.com/users/3074564/mofi问题中批处理文件代码的原作者指出,-Directoryswitch 需要 PowerShell 版本 3 或更高版本,并且要使代码在 v2 中也能工作,
      Get-ChildItem -Path ??* | Where-Object { $_.PSIsContainer }必须使用。
  • The Move-Item https://learn.microsoft.com/powershell/module/microsoft.powershell.management/move-item命令使用延迟绑定脚本块 https://stackoverflow.com/a/52807680/45375确定每个输入目录的目标(目标)目录:

    • New-Item https://learn.microsoft.com/powershell/module/microsoft.powershell.management/new-item -Type Directory either creates目标目录或 - 感谢-Force返回一个现有的一个。在这两种情况下,System.IO.DirectoryInfo https://learn.microsoft.com/en-US/dotnet/api/System.IO.DirectoryInfo实例是输出,它告诉Move-Item将输入目录移动到哪里。在眼前。

    • Join-Path https://learn.microsoft.com/powershell/module/microsoft.powershell.management/join-path determines the full target path from the input directory's own (parent) directory, $_.Parent.FullName[1], and the first-letter-of-the-input-dir-name target name, $_.Name[0])

      • 注意:如果您在current目录,所以在这种情况下你可以简化为
        New-Item -Type Directory -Force $_.Name[0]

[1] You can also use $_.PSParentPath, but, due to a bug in Join-Path in PowerShell [Core] as of 7.1, that wouldn't work on Unix-like platforms - see GitHub issue #14538 https://github.com/PowerShell/PowerShell/issues/14538.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将文件夹移动到具有要移动的文件夹的第一个字符名称的子文件夹中,并支持文件夹名称中的 Unicode 字符? 的相关文章

随机推荐

  • Intellij Idea可以自动阶段更改吗

    经过几天的任务处理后 我决定看看已经完成了哪些工作git status来自 Git Bash 有些文件在Changes to be committed list 有些在Changes not staged for commit 有趣的是 我
  • Hibernate 4.2,双向@OneToOne 和@Id

    我正在尝试使用OneToOne添加可选数据的关系 ExtraData 到主类 MainItem 的所有实例ExtraData应该链接到一个实例MainItem 但并非所有实例MainItem需要有一个实例ExtraData 我主要对单向关系
  • 安装时 Chrome 扩展显示 CRX_REQUIRED_PROOF_MISSING

    我刚刚创建了一个供公司内部使用的 chrome 扩展 我不想发布它 而是想传递给我的同事 当我将该扩展打包到本地 chrome 中时 它给了我错误消息 CRX REQUIRED PROOF MISSING 您无法分发 Chrome 扩展程序
  • 如何在磁盘或数据库上存储稀疏可查询矩阵?

    我需要在磁盘上存储稀疏矩阵 它就像一个拥有数百万行和数千列的数据库表 其中许多或大多数列为空 它需要是可查询的 就像在某些列上带有 WHERE 的 SQL SELECT 一样 我的具体要求是Java 我首先想到使用Java 版 Berkel
  • 防止某些孩子影响 MouseEvent hitbox

    我有一个影片剪辑 用作按钮 在该影片剪辑中 当鼠标悬停在按钮上时会显示一个大阴影 我的问题是 这个阴影会影响鼠标悬停 并导致 mouseOver 和 mouseOut 事件的 捕获 区域比我想要的大得多 我尝试过禁用该子项上的鼠标事件以及我
  • Paging 3 - 如何处理自 beta01 以来出现的旧 APPEND RemoteMediator 请求?

    自版本以来beta01的 Paging 3 当从 a 刷新 PagingData 时RemoteMediator 有时会发生旧的APPEND刷新完成后 仍会执行上一代的请求 这似乎是预期的行为这次提交 https android googl
  • libgit2如何获取当前目录的状态?

    如何获取单个目录而不是整个存储库的状态 我查看了以下内容 git status list new它获取存储库状态 但我只关心位于单个目录中的文件 git status file获得单身状态 有没有办法可以使用 libgit2 获取单个目录的
  • DataGridView.Clear()

    麻烦来了 我想从 datagridview 中删除所有行 这就是我添加行的方式 private void ReadCompleteCallback object clientHandle Opc Da ItemValueResult res
  • 否定验证码 - 帮助我更好地了解垃圾邮件机器人

    我必须决定一种技术来防止垃圾邮件机器人注册我的网站 在这个问题中 我主要问的是负面验证码 我开始了解机器人的许多弱点 但想了解更多 我在某处读到大多数机器人不渲染 支持 javascript 为什么会这样呢 如何测试访问程序无法评估 jav
  • 当 JDBC 中没有明确说明时,h2 的默认用户名和密码是什么?

    我通过一个程序创建了一个 H2 数据库 而没有在 JDBC URL 中指定任何用户或密码 现在我尝试使用脚本工具访问该数据库 医生说使用 user sa在默认情况下 这不起作用 如果我添加它仍然不起作用 password sa或删除 use
  • chrome.alarms 返回未定义

    早上好 巫师们 我正在尝试自己编写铬浏览器的扩展 铬的版本是18 0 1025 151 development build 130497 Linux Built on Ubuntu 12 04 running on Ubuntu 12 10
  • 非 UI 片段与单例

    我猜非 UI 片段的主要目的是存储配置更改时保留的数据 对吗 那么 除了这个存储特定于拥有这个片段的 Activity 之外 它相对于整个应用程序中的单例模式的使用的好处是什么 这是我迄今为止一直在做的解决方案 事实上 片段的作用域仅限于其
  • mingw gcc 上的 __uint128_t

    我正在尝试在 mingw gcc 下编译 c 程序 该程序正在使用一个 uint128 t整数 当我尝试在同一台 64 位机器上的标准 ubuntu gcc 下编译它时 它完美地工作了 但是 当我尝试在 mingw 下为 Windows 编
  • 无法弄清楚如何使用 AppleScript 实现 REGEX

    我编写了一个正则表达式命令来查找并输出字符串中一行数字的第一个实例 find d d replace 1 问题是 为了在 AppleScript 中实际利用它 我知道的唯一方法是调用 shell 脚本并使用 sed 我不知道如何以这种方式实
  • 创建大型表时的 JavaScript 性能

    我有一个数据库表 我希望用户能够通过 Web UI 修改该表中的值 因此 我让后端检索表的值 通过 JSON 将它们传递给我的 Javascript 我的 Javascript 构建表示表行的对象 然后使用原型模板从数据生成 HTML 表行
  • 如何使用 EntityFramework 7 和 Asp.Net 5 调用 SQL 存储过程

    在过去的几天里 我正在寻找一些有关如何调用Stored Procedure从里面一个Web API控制器方法使用EntityFramework 7 我经历过的所有教程都以相反的方式展示它 即Code First方法 但我已经有了一个数据库
  • 动态隐藏状态栏时如何保留状态栏占用的空间?

    我倾向于隐藏状态栏 通过以下方式进行动画处理 var statusBarHidden Bool false didSet UIView animate withDuration Constants config shortAnimTime
  • Sublime Text:更改突出显示背景

    我想更改已找到的单词的所有找到实例 当您使用查找时 的颜色 我注意到 highlightBackground 键仅更改第一个实例 有没有办法更改所有找到的实例的突出显示颜色 以下示例均来自Neon Color Scheme https su
  • 如何计算SVG路径c#的面积[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果有人可以帮助计算 SVG 路径的
  • 如何将文件夹移动到具有要移动的文件夹的第一个字符名称的子文件夹中,并支持文件夹名称中的 Unicode 字符?

    我用这个批处理脚本 https stackoverflow com a 65549119 3074564写于Mofi https stackoverflow com users 3074564 mofi将文件夹移动到其他文件夹中 echo