【问题标题】:simple batch script for tidy up folder用于整理文件夹的简单批处理脚本
【发布时间】:2021-01-18 08:50:19
【问题描述】:

例如,我在我的 PC 桌面上放了一个如下的 for 循环,以便将所有文件移动到由其扩展名命名的相应文件夹中。

for %%G in (*.*) do (
md "%%~xG" 2>nul
move "%%G" "%%~xG"
)

到目前为止,脚本还可以,只是我想通过以下方式对其进行改进,

  1. 仅当文件夹不存在时才创建文件夹
  2. 通过参数扩展制作文件夹会创建一个文件夹.jpg,但我想要的是jpg,我可以使用set x=%%~xG之类的东西,用setlocal和EnabledDelayExpansion,然后!x:~1!修剪点
  3. 不要将批处理文件本身移动到创建的 bat 文件夹中。我应该使用像 %f0 这样的扩展吗?

任何帮助将不胜感激。

【问题讨论】:

  • 1) 有什么问题?您的代码不会(重新)创建现有文件夹。 2:是的。 3. 是的 (if not "%%~FG" == "%~f0" ...) 4. 你可能想要for %%G in (*) ("for all files",而不是"for a dot") (更好的*.* - 假设你不想处理没有扩展名的文件)

标签: batch-file move


【解决方案1】:
setlocal enabledelayedexpansion
for %%a in (*.*) do (

    if not "%%~xa"=="" (
        set "ext=%%~xa" & set "ext=!ext:~1!"
        if not exist "!ext!" mkdir "!ext!" 2>nul

        if not "%%~fa"=="%~f0" (
            move "%%a" "!ext!\%%a" >nul
        )
    )
)
endlocal

在写作时,我意识到@Stephan 的评论与此答案相同,因此优先于他!

【讨论】:

  • 它完全符合我的要求。只想知道为什么要设置“ext=%%~xa”和设置“ext=!ext:~1!”可以做到这一点,假设第一个变量将 ext 设置为 .jpg 而第二个 ext 设置为 jpg,ext 不应该被 jpg 覆盖吗?如果是这样是什么原因。第二件事,我能不能把 move "%%a" "!ext!\%%a 理解为 move foo.jpg jpg\foo.jpg,为什么不是 move foo.jpg foo\ 而不是?
  • 第一行将ext 设置为提取文件的扩展名。由于这包括<point> ".",第二组只是将其删除,因此清除的文件夹名称等于扩展名。其次,move "%%a" "!ext!\%%a" 和move "%%a" "!ext!\" 是相似的(在这种情况下,可能不是这样),但是正如您所说,您应该说move "foo.jpg" "jpg\",即move "%%a" "!ext!\"。
  • @NikaidoK:请参阅set /? 它是如何工作的。 ~1 采用从“第一个”字符开始的子字符串(从零开始!,第一个字符是 0,1 实际上是第二个字符)
猜你喜欢
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2014-06-14
  • 2011-01-09
相关资源
最近更新 更多