在批处理文件中根据文件名的前 5 个字符创建文件夹

在批处理文件中根据文件名的前 5 个字符创建文件夹

以下是我所拥有的:

C:\test\12345-test1.txt
C:\test\23456-test2.txt
C:\test\44444-test3.doc

我希望脚本从文件中读取前 5 位数字,用这些数字创建一个文件夹,并在其前面添加字母 T。

运行之后的结果应该是这样的:

C:\test\T12345\12345-test1.txt
C:\test\T23456\23456-test2.txt
C:\test\T44444\44444-test3.doc

目前,我有这个,它可以实现这个功能;我只是不知道将 SET 命令放在哪里来提取这 5 个字符。

@echo off
for %%a in (*.*) do (
md "T%%a" 2>nul
move "%%a" "T%%~a"  
)

我认为需要添加此项以仅选择前 5 个字符:

set first5=%%a:~5,1%

有什么想法吗?

答案1

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

这将处理工作目录中的文件(=无目录)。我还添加了一个检查,以防止脚本移动批处理文件本身,以防它恰好位于 wd 中。

答案2

既然你不怕困难,为什么不学点有价值的东西呢?在 PowerShell 中:

$x = gci ; $x | % { $d = 'T' + $_.Name.Substring(0,5) ; mkdir $d ; 移动 $_ $d } | Out-Null

答案3

您可以使用它来获取前五个字符:

set first5=%a:~0,5%

set将后面的值分配给=。将返回变量 的值,通过添加以下字符,您可以引用从字符 0 开始的范围以及接下来的五个字符first5%a%a

相关内容