繁体   English   中英

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

[英]Unable to move files into folders using batch files

我正在尝试使用文件名的一部分(前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

它可以工作,但是如果文件名中没有空格,它仍然会创建大部分或整个文件夹,具体取决于空格在哪里,但不会移动文件。

因此,要解决此问题,请尝试在for循环中添加"delims=" ,以默认情况下跳过空白的分隔符。

@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%"

尽管看起来很奇怪,但是您也可以使用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个字符是一个空格 ,以后可能会引起问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM