我正在编写一个脚本,该脚本将根据文件名的一部分创建文件夹。问题是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
答案 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
来获取值%%~xA
和fname
,分别。但是您根本不需要这些临时变量,因此我将其删除。
您通常应该使用带引号的fextn
语法,例如set
。
我还更改了文件掩码,使其与包含少于两个连字符(set "folname=%%D-%%E"
)的文件不匹配。
实际上,当您立即使用标记-
和folname
时,甚至不需要临时变量%%D
。因此,您不再需要delayed expansion:
%%E