2017-08-28 67 views
0

我有这样的代码:delims是意外在这个时候

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
chcp 65001 
SET "sourcedir=C:\Users\leandro.batista\Desktop\SAMPLES RENAMER" 
SET "destdir=C:\Users\leandro.batista\Desktop\SAMPLES RENAMER\BACKUP" 
for %%a in ("%sourcedir%\*.pdf") do (
set filename=%sourcedir%\*.pdf 
set cnt=0 
set pos=0 
PAUSE 
for /f "usebackq tokens=%cnt% delims=_ " %%b in ("%%~na") do (
    COPY "%%a" "%destdir%" 
    MOVE "%%~fa" "%sourcedir%\%%b%%~xa" 


    ) 
    ) 




:loop 
if "!filename:~%pos%,1!"=="_" set /a cnt=%cnt%+1 
set /a pos=%pos%+1 
if not "!filename:~%pos%,1!"=="" goto loop 

echo Count: %cnt% 

中的计数代码:环是计算在文件名中的所有下划线(_),所以计数存储在变量%CNT %,然后插入到标记中,因为我收到的文件名中的下划线不确定。 其余的代码是基于令牌和定界符重命名文件,但每当我运行这段代码时,它都会给我这个错误:"delims was unexpected at this time "。 任何人都可以解释我为什么?

+0

您在其中也使用相同的循环中不断变化的'%CNT%'值后它。试试这个:'for/f'usebackq tokens =!'cnt!delims = _“' – MichaelS

+0

我正面临同样的错误:/ –

+1

[Windows批处理循环虽然带动态令牌计数变量](https:// stackoverflow。 com/questions/12072777/windows-batch-loop-though-variable-with-dynamic-token-count) – Squashman

回答

0

我只是猜测你想将pdf文件重命名为光秃名称的最后一个下划线分隔元素。
使用self expanding code -technic我回答你的最后一个问题,这应该做的。

:: Q:\Test\2017\08\28\SO_45920139.cmd 
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion 
chcp 65001 >NUL 
Set "sourcedir=C:\Users\leandro.batista\Desktop\SAMPLES RENAMER" 
Set "destdir=C:\Users\leandro.batista\Desktop\SAMPLES RENAMER\BACKUP" 

For %%A in ("%sourcedir%\*_*.pdf") do (
    Call :SplitName NewName "%%~nA" 
    COPY "%%A" "%destdir%" 
    MOVE "%%~fA" "%sourcedir%\!NewName!%%~xA" 
) 

Goto :Eof 
:SplitName 
set "Name=%~2" 
Set i=1&set "Name[!i!]=%Name:_="&Set /a i+=1&Set "Name[!i!]=%" 
Set "%~1=!Name[%i%]!" 
Goto :Eof 

模拟树前

> tree C:\ /F 
C:\ 
└───Users 
    └───leandro.batista 
     └───Desktop 
      └───SAMPLES RENAMER 
       │ one_two_three.pdf 
       │ four_five_six.pdf 
       │ 
       └───BACKUP 

,并批量运行

> tree C:\ /F 
C:\ 
└───Users 
    └───leandro.batista 
     └───Desktop 
      └───SAMPLES RENAMER 
       │ six.pdf 
       │ three.pdf 
       │ 
       └───BACKUP 
         one_two_three.pdf 
         four_five_six.pdf 
+0

我不得不改变一些代码,但它完美的工作 –

0

显示的问题是由cnt的初始值为0造成的。如果您尝试使用tokens=0,您将收到此错误。

你期望这段代码做什么并不是很清楚。如果你提供了一些例子,可能会更清楚。

相关问题