Windows 迪利姆斯此时出人意料

Windows 迪利姆斯此时出人意料,windows,batch-file,Windows,Batch File,我有以下代码: @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=%so

我有以下代码:

@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%
:循环中的计数代码是对文件名中的所有下划线(u)进行计数,因此计数存储在变量%cnt%中,然后插入到标记中,因为我收到的文件名中的下划线不确定。 代码的其余部分是基于令牌和delimn重命名文件,但每当我运行此代码时,它会给我以下错误:
“delims此时是意外的”

有人能解释一下原因吗?

显示的问题是由
cnt
的初始值为
0
引起的。如果您试图使用
令牌=0
,您将收到此错误


不太清楚您希望这段代码做什么。如果您提供一些示例,可能会更清楚。

显示的问题是由
cnt
的初始值为
0
引起的。如果您试图使用
令牌=0
,您将收到此错误


不太清楚您希望这段代码做什么。如果您提供一些示例,可能会更清楚。

我只是猜测您想将pdf文件重命名为裸名称中最后一个下划线分隔的元素。
使用我对您最后一个问题的回答中的
自扩展代码
-技术,这应该可以做到

:: 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

我只是猜测你想把pdf文件重命名为裸名称中最后一个下划线分隔的元素。
使用我对您最后一个问题的回答中的
自扩展代码
-技术,这应该可以做到

:: 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

您正在使用它的同一循环中更改
%cnt%
的值。请尝试以下操作:
for/f“usebackq tokens=!cnt!delims=277;”
我遇到了相同的错误:
%cnt%
的值可能与您在使用它的同一循环中更改的值相同。尝试以下操作:
for/f“usebackq tokens=!cnt!delims=”
我遇到了相同的错误:/