【发布时间】:2018-05-21 20:52:18
【问题描述】:
我有很多文件要为我工作的公司存档。我对批处理脚本有点熟悉,但我不太了解,无法完全理解我想要的。
我正在尝试将一些基于文件名开头的文件复制到我们 NAS 上的文件夹中。这些文件是 7z 文件,它们的结构是这样的:
- 5476 宝马把手-A.7z
- 5487 雪佛兰-Imp.7z
- 5986 本田 Lid-Upper.7z
等等
文件结构是这样的:开头的四个数字是我们公司的工作编号。在我们的 NAS 上,我们有一个存档目录,其中包含如下文件夹:
- _5000-5999
- _6000-6999
在这些文件夹中是文件夹,每个文件夹将包含 250 个存档文件。它们的格式如下:
- _5000-5249
- _5250-5499
- _5500-5749
- _5750-5999
我正在寻找创建一个批处理文件,我可以将这些 7z 文件拖到该文件上,它会读取文件名的前四个数字,并将其复制到我们 NAS 上的正确文件夹中。
例如文件:
- 5476 宝马把手-A.7z
- 5487 雪佛兰-Imp.7z
会复制到
\nas01\存档\_5000-5999\_5250-5499
等等。
我搞砸的主要代码是这样的:
@echo off
for /f "delims=" %%i in ('dir /b /a-d *.7z') do (
set "filename1=%%~i"
setlocal enabledelayedexpansion
set "folder1=!filename1:~0,4!"
mkdir "!folder1!" 2>nul
copy "!filename1!" "!folder1!" >nul
)
这行对我不起作用:
set "folder1=!filename1:~0,4!"
如何创建某种变量来检查文件名、在必要时创建文件夹并将其复制到正确的文件夹中?我将不胜感激!
-达斯汀
【问题讨论】:
-
考虑将您的问题分解成更小更易于管理的块。例如,一开始您可能应该将文件名转换为数字,然后使用该数字确定它的去向,然后根据该数字移动文件。所以你的第一个问题可能是如何获取每个文件名并将数字放入批处理变量中。
-
@DustinH,我看不出那个 SET 命令有什么问题。您启用了延迟扩展,并且您正确引用了该变量。所以你必须更详细地解释它是如何不起作用的。
-
@Squashman 对不起,我的意思是这不是我需要的。它只是创建一个与文件号相同的文件夹。所以 5768 BWM.7z 将被移动到名为 5768 的文件夹中。我希望它进入 _5000-5999\ _5750-5999
-
给你一点提示。
IF !folder1! GEQ 5000 IF !folder1! LEQ 5999 SET "subfolder1=_5000-5999" -
感谢你们的帮助!我想通了,会发布答案。
标签: windows batch-file cmd