2014-10-11 526 views
0

我想从目录(C:\ TSData \ Klarf)并更改它们的名称,然后将它们移动到新目录(E:\ MESSDAT \ DATEN \ Klatencor \ Klarf)。读取目录中所有* .kla文件的文件名,重命名并将它们批量移动到新目录中

对于文件名重命名,在每个.kla文件中,有两个变量需要获取它们的值:(例如) LotID“N_123”;插槽1; 并结合这些变量:LotID_Slot.kla创建一个新名称。

我写了这个代码,但显示了这个错误:“NXI〜就在这个时候意外”

@echo off 
setlocal enableDelayedExpansion 
set "LotID=" 
set "Slot=" 

:: Finding the name of *.kla files in C:\TSData\Klarf\ 
for /f %%l in ('dir /b C:\TSData\Klarf\*.kla ') do (
echo %%l 
:: Finding LotID, Slot in each .kla file 
for /R C:\TSData\Klarf\ %%i in (*.*) do echo %%~nxi 
    for /f "usebackq tokens=1,*" %%a in (
    "C:\TSData\Klarf\%%l" 
) do for %%c in (%%b) do set "%%a=%%~c" 
    move /-y "C:\TSData\Klarf\%%l" "E:\MESSDAT\DATEN\Klatencor\Klarf" 
    ren E:\MESSDAT\DATEN\Klatencor\Klarf\%%l "%LotID%_%Slot%.kla" 
) 

考虑,在C:\ TSData \ KLARF \有一个文件名执行后= 1.kla的路径文件,这个文件将被重命名为k1_1.kla(因为对于这个文件,我们有LotID = k1,Slot = 1),并将移动到名为E:\ MESSDAT \ DATEN \ Klatencor \ Klarf \的新目录,其新名称k1_1.kla)。

我不知道为什么这个以下为单独工作清楚.kla文件。

:: Finding LotID, Slot in each .kla file 
for /R C:\TSData\Klarf\ %%i in (*.*) do echo %%~nxi 
    for /f "usebackq tokens=1,*" %%a in (
    "C:\TSData\Klarf\K.kla" 
) do for %%c in (%%b) do set "%%a=%%~c" 
    move /-y "C:\TSData\Klarf\k.kla" "E:\MESSDAT\DATEN\Klatencor\Klarf" 
    ren E:\MESSDAT\DATEN\Klatencor\Klarf\k.kla "%LotID%_%Slot%.kla" 

请帮助我。 非常感谢!

+2

你忘了你的第二个'for'loop的百分号翻番:'%% i','%%〜nxi' – Stephan 2014-10-11 14:55:32

+0

感谢我亲爱的为你的关注,我申请了你告诉我的。但是,将.kla文件移动到新目录后,其名称未正确更改。文件名称变为_。 KLA。我认为这些变量(LotID,SLOT)为空。什么问题亲爱的? – 2014-10-11 16:52:13

+1

您必须将环境变量放在感叹号中,而不是百分号,以便根据需要在“IF”和“FOR”块中使用延迟的环境变量扩展。打开命令提示符窗口,输入'set /?',并读取窗口中输出的所有帮助页面。请编辑您的问题,并在批处理执行前在'C:\ TSData \ Klarf'中添加文件名列表,以及另外两个列表显示目录'C:\ TSData \ Klarf'和'E:\ MESSDAT \ DATEN中的文件名\批次执行后的\ Klatencor \ Klarf'。否则,我们没有机会找出你的批处理代码应该做什么。 – Mofi 2014-10-11 20:19:42

回答

1
@echo off 
setlocal enableDelayedExpansion 
set "LotID=" 
set "Slot=" 
:: Settings for OP's version 
SET "sourcedir=C:\TSData\Klarf" 
SET "destdir=E:\MESSDAT\DATEN\Klatencor\Klarf" 
:: Overriding settings for Magoo's setup 
SET "sourcedir=U:\TSData\Klarf" 
SET "destdir=U:\destdir" 

:: Finding the name of *.kla files in C:\TSData\Klarf\ 
for /f "delims=" %%l in ('dir /b "%sourcedir%\*.kla" ') do (
echo %%l 
REM 
REM NOTE USE OF REM NOT :: WITHIN A BLOCK (FOR..%%l) 
REM 
REM Finding LotID, Slot in each .kla file 
REM 
REM No idea why this line is here for /R "%sourcedir%" %%i in (*.*) do echo %%~nxi 
REM 
for /f "usebackq tokens=1,*" %%a in (
    "%sourcedir%\%%l" 
) do for %%c in (%%b) do set "%%a=%%~c" 
REM 
REM Note that MOVE across devices (C: to E: will COPY AFAIAA) 
REM 
ECHO(move /-y "%sourcedir%\%%l" "%destdir%\" 
REM 
REM Note use of !var! not %var% to access changed values LotID and Slot, not original values 
REM 
ECHO(ren "%destdir%\%%l" "!LotID!_!Slot!.kla" 
ECHO(move /-y "%sourcedir%\%%l" "%destdir%\!LotID!_!Slot!.kla" 
) 
GOTO :EOF 

你需要改变的sourcedirdestdir设置,以满足您的具体情况。我按照惯例设置了它们,并使用值来覆盖设置以适合我的系统。

所需的REN命令仅用于测试目的。 验证命令是否正确后,将ECHO(REN更改为REN以实际重命名文件。

所需的MOVE命令仅为ECHO用于测试目的。 确认命令正确后,将ECHO(MOVE更改为MOVE以实际移动文件。附加>nul抑制报告消息(例如。1 file moved

正如我评论,所述:: comment应由rem comment块内替换。

您尚未指出如何构建新名称。 “LotID”和“Slot”似乎无处不在。在分析你的代码,它会出现类似

LotID is often k1 
Slot might be 1 

线可能会出现在你的.kla文件。您设置这些变量的方法可能有效也可能不会有效 - 如果没有示例数据,则无法判断。

我认为,试图move文件从一个设备到其实copy文件另​​一个意志,所以原来的文件会留在它原来的地方和一个副本将在该目标的新的名字出现。我已额外增加了一行,以显示如何在单行而不是两行中完成此操作。

这是我用来创建一个.kla文件进行测试的代码,因为你没有提供的样本数据:

FOR %%a IN ("LotID perhaps is Z99" 
"Slot is arguably 6") DO ECHO %%~a 
)>"%sourcedir%\two.kla" 

至于为for /r的原因 - 独天知道这是什么意思做!


编辑:修复与空格的文件名...的for...%%l"delims="选项添加。

文件名测试包括:

"%sourcedir%\1.kla" 
"%sourcedir%\1 that is one.kla" 
"%sourcedir%\t(w)o.kla" 
"%sourcedir%\t(w, and a bit)o.kla" 
"%sourcedir%\t(w,hree)o.kla" 

sourcedir本身包含的空间。

请注明文件和数据夹,如果你找别人失败...

+0

我真的很感谢你的好意,上帝保佑你。 。但有一个问题是,如果文件名有这些字符>(,),我该如何处理? – 2014-10-12 16:31:01

+0

我真的很感激。它可以工作,我的亲爱的。再次感谢:)一切顺利。 – 2014-10-13 11:41:48

相关问题