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=”
我遇到了相同的错误:/