如何设置多个熟食

时间:2019-08-06 20:52:49

标签: batch-file cmd

我正在编写一个脚本,该脚本将根据文件名的一部分创建文件夹。问题是Delim的都一样。文件名看起来像这样:“ Bacon-HunterBacon-00002”我正在使用第一个和第二个标记作为文件夹名称。因此该文件夹将被命名为Bacon-HunterBacon

@echo off

setlocal enabledelayedexpansion

for %%A in (*.cr2 *.jpg) do (
   echo file found  %%A


   for /f "delims=" %%B in ("%%A") do set fname=%%~nB


   for /f "delims=" %%C in ("%%A") do set fextn=%%~xC


   for /f "tokens=1,2* delims=-" %%D in ("!fname!") do set folname=%%D
   echo folder name !folname!

   if not exist "!folname!" (
      echo Folder !folname! does not exist, creating
      md "!folname!"
   ) else (
      echo Folder !folname! exists
   )

   echo Moving file %%A to folder !folname!
   move "%%A" "!folname!"
   )
echo Finished

1 个答案:

答案 0 :(得分:1)

在循环for /f "tokens=1,2* delims=-" %%D in ...中,第一个令牌分配给%%D,第二个令牌分配给%%E,其余(*)分配给{ {1}}(但您不使用它),因此您应该执行%%F以在变量set folname=%%D-%%E中获得所需的文件夹名称:

folname

循环@echo off setlocal EnableDelayedExpansion for %%A in ("*-*-*.cr2" "*-*-*.jpg") do ( echo file found %%A for /f "tokens=1,2 delims=-" %%D in ("%%~nA") do set "folname=%%D-%%E" echo folder name !folname! if not exist "!folname!" ( echo Folder !folname! does not exist, creating md "!folname!" ) else ( echo Folder !folname! exists ) echo Moving file %%A to folder !folname! move "%%~A" "!folname!" ) endlocal echo Finished for /f "delims=" %%B毫无用处,您可以直接使用for /f "delims=" %%C%%~nA来获取值%%~xAfname,分别。但是您根本不需要这些临时变量,因此我将其删除。

您通常应该使用带引号的fextn语法,例如set

我还更改了文件掩码,使其与包含少于两个连字符(set "folname=%%D-%%E")的文件不匹配。


实际上,当您立即使用标记-folname时,甚至不需要临时变量%%D。因此,您不再需要delayed expansion

%%E