我有这段代码:
$_ | Out-File C:\errors.txt -Append
循环中的计数代码用于计算文件名中的所有下划线(_),因此计数存储在变量%cnt%中,然后插入到标记中,因为我收到的文件名中的下划线是不确定。
代码的其余部分是根据标记和delimns重命名文件,但每当我运行此代码时,它都会给我这个错误:@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%
。
谁能解释我为什么?
答案 0 :(得分:0)
显示的问题是由nvm -DpropA='valueA, valueB, valueC'
的初始值public static void main(String[] args) {
for (String arg: args) {
if (arg.contains(",")) {
String[] subArgs = arg.split[","];
// do stuff
}
}
}
引起的。如果您尝试使用cnt
,则会收到此错误。
您对此代码的期望并不十分清楚。如果你提供一些例子,也许会更清楚。
答案 1 :(得分:0)
我只是猜测你想将pdf文件重命名为裸名称的最后一个下划线分隔元素。
使用self expanding code
- 我对你上一个问题的回答的技巧,这应该做。
:: 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