循环中的批处理文件名

时间:2014-12-30 16:51:59

标签: batch-file for-loop

我从ftp获取文件 我需要将每个文件复制到一个新文件夹,该文件夹将是文件名的右侧()9位置。

example filename: name_file_decw32014
required foldername: decw32014

当我运行它并将文件名放在变量中时,我看不到名称

@SETLOCAL ENABLEDELAYEDEXPANSION
open ftp.il.xxxx.com
oren
Dev123$

CD  D:\oren\ftp
binary
prompt n
mget *.xxx

for /R D:\oren\ftp %%i IN (*.xxx*) DO (
 set filename=%%~ni
 set filenameRight=!filename:~0,-9!

 PAUSE
 if not exist "D:\oren\ftp\!filenameRight!" mkdir D:\oren\ftp\!filenameRight!

 copy %%i D:\oren\ftp\!filenameRight!
 pause
 close
 bye
)

在运行时,filenameRight不会更改为decw32014 !!!

1 个答案:

答案 0 :(得分:0)

 set filenameRight=!filename:~0,-9!

应该是

 set filenameRight=!filename:~-9!

子串语法是

%var:~start,length% if start >=0 and length >0
%var:~start,endpos% if start >=0 and endpos <0
%var:~start,length% if start <0 and length >0
%var:~start,endpos% if start <0 and endpos <0
  • 长度/ endpos可以省略。如果省略,子字符串是&#34;从开始位置到结束&#34;
  • 对于%模式,
  • !可能为delayedexpansion

所以 - 您的代码应该返回&#34; name_file _&#34;作为filenameright(你没有说它返回了什么)

??您确定close bye应该在循环中吗?我建议他们应该在外面(for之前) - 但我很少使用这些设施。