无法使用批处理文件将文件移动到文件夹中

时间:2018-05-18 02:43:18

标签: batch-file error-handling

我正在尝试使用部分文件名(前10位唯一数字)创建文件夹,然后将文件移动到相应的文件夹。我能够创建文件夹但由于某种原因,无法将文件移动到文件夹中。知道为什么吗?这是我的代码:

@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:~0,10%
md "%dir%" 2>nul
move "%file%" "%dir%" 
goto :EOF

2 个答案:

答案 0 :(得分:0)

它可以工作,但是如果你的文件名中有空格,它仍会创建大部分或整个文件夹,具体取决于空格的位置,但不能移动文件..

因此,为了纠正此问题,请尝试将"delims="添加到for循环以跳过默认分隔符,默认为空格。

@echo off
for /f "delims=" %%a in ('dir /a-d /b') do (
  if not "%%~dpnxa"=="%~dpnx0" call :func "%%~a"
)
goto :EOF
:func
set file=%~1
set "dir=%file:~0,10%"
md %dir% 2>nul
move "%file%" "%dir%"

答案 1 :(得分:0)

虽然看起来很奇怪,但您可以使用RoboCopy来移动'文件也是。以下示例使用Where命令仅选择包含至少10个字符的文件(这意味着您可以将脚本名称保留为少于10个字符,并且您不需要过滤它)

@Echo Off
SetLocal EnableDelayedExpansion
For /F "Delims=" %%A In ('Where .:??????????*.*') Do (Set "FN=%%~nA"
    RoboCopy . "!FN:~,10!" "%%~nxA" /Mov>Nul)

请记住,这并不能防止以空格结尾的目录被创建,即文件名的第10个字符是 space ,这可能会在以后引起您的问题!