【问题标题】:Batch script that moves each file in a folder into their own folders named after the file?将文件夹中的每个文件移动到以文件命名的自己的文件夹中的批处理脚本?
【发布时间】:2014-08-03 07:28:46
【问题描述】:

如果我有

/folder/file1.txt
/folder/file2.jpg
/folder/file3.py

我要创作

/folder/file1/file1.txt
/folder/file2/file2.jpg
/folder/file3/file3.py

我有这个批处理文件(小心你运行它的地方),它主要工作但如果文件名中有空格,文件夹名只会被命名直到空格,所以文件不会被移动在里面。

另外,我只是通过在文件夹名称的末尾任意放置单词“文件夹”或一些随机字符串来使其工作,如果我排除它,由于某种原因它不会工作。我在 Windows 7 上。

@echo off

for /f %%a in ('dir /a-d /b') do (
  if not "%%~dpnxa"=="%~dpnx0" call :func "%%~a"
)

goto :EOF

:func
set file=%~1
set dir=%file% Folder
md "%dir%" Folder 2>nul
move "%file%" "%dir%" 
goto :EOF

关于如何解决空格/名称问题的任何想法?提前致谢。

【问题讨论】:

    标签: file batch-file directory


    【解决方案1】:
    @echo off
    
    for /f "usebackq delims=?" %%a in (`dir /a-d /b`) do (
      if not "%%~dpnxa"=="%~dpnx0" call :func "%%~a"
    )
    
    goto :EOF
    
    :func
    set file=%~1
    set dir=%file% Folder
    md "%dir%" Folder 2>nul
    move "%file%" "%dir%" 
    goto :EOF
    

    通过设置 delims=?你是说你的分隔符是一个?拆分字符串,而不是空格字符,这样您就可以读取包含空格的完整文件名。 Usebackq 意味着您改为在要运行的命令周围使用 `,这对我来说,只是让阅读和理解“嘿,我实际上正在执行这个字符串”更合乎逻辑。

    【讨论】:

    • 成功了,谢谢!对此有任何想法或如何放弃在文件夹名称中包含一些任意字符串?
    • 关于那个,你最好等待下一个回复,因为我完全不确定那部分,抱歉。
    【解决方案2】:

    为避免路径/文件名中的空格出现问题,请将对它们的所有引用双引号。

    必须在代码中的文件夹末尾包含一个字符串的原因是您试图创建一个与文件名称完全相同的文件夹(在您的代码中,您没有删除扩展名),并且同名文件夹中不能有两个元素(文件或文件夹)。

    @echo off
        for %%a in ("c:\folder\*") do (
            if not "%%~fa"=="%~f0" (
                if not exist "%%~dpna\" echo md "%%~dpna" 
                if     exist "%%~dpna\" echo move /y "%%~fa" "%%~dpna"
            )
        )
    

    对于指定文件夹中的每个文件

    • 如果文件不是批处理文件

      • 如果不存在与文件同名的文件夹,则创建它
      • 如果目标文件夹存在,将文件移动到该文件夹​​中

    %%~fa = 正在处理的文件的完整路径

    %~f0 = 批处理文件的完整路径

    %%~dpna = 驱动器、路径和文件名,不带正在处理的当前文件的扩展名

    在这段代码中,第三个if 的原因是为了检查之前可能的文件夹创建是否失败。如果您有一个没有扩展名的文件,您将无法创建该文件夹,因为它与该文件具有完全相同的名称,这是不允许的。

    代码在mdmove 之前包含echo 命令,以显示将执行的内容。如果输出正确,请删除echo 使其工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-19
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      相关资源
      最近更新 更多