2014-02-19 62 views
1

我想比较名字一堆文件像批调用另一个批处理,并使用输出变量

“BD12-CD9.txt”

来命名的文件夹

“BD12-CD9 - somefoldername”

我取出.TXT extensi打开以获取ID代码“BD12-CD9”并且想要检查文件夹名称是否包含代码。

我不知道如何做到这一点,没有一个比较字符串的if语句。 (可能是一个简单的解决方案,如jQuery的indexOf())

所以我需要从文件名中去掉ID代码并做一个直接比较。

问题是ID和名称并不总是完全相同的长度,例如“BD12-CD10.txt”,所以我不能只做“set folderName2 =!folderName:〜0,8!”

我找到了一个strlength函数,并把它放在另一个名为strlen.bat的批处理文件中,它工作的很好,回应了我剥离的ID代码的长度。我如何使用回显值?

move.bat

@echo off 
@setlocal enabledelayedexpansion 
set "errfolderpath=C:\Testing\Moving txt files automatically\" 
echo. 
for %%x in (*.*) do (
    set fileName=%%x 
    set fileName2=!fileName! 
    set fileName2=!fileName2:~0,-4! 
    call strlen !fileName2! 
    FOR /D %%K in ("%errfolderpath%*") DO (
     SET folderName=%%~nK 
     set folderName2=!folderName! 
     set folderName2=!folderName:~0,11! 
     echo folder: !folderName2!, file: !fileName2! 
     if !folderName2! == !fileName2! echo MOVE '!fileName!' to '!folderName!' 
    ) 
    echo %_len%  
    echo. 
) 
PAUSE 

strlen.bat

@echo off 
:: strlen.bat 
:: http://acm.zhihua-lai.com 
if [%1] EQU [] goto end 
:loop 
    if [%1] EQU [] goto end 
    set _len=0 
    set _str=%1 
    set _subs=%_str% 
    :getlen  
     if not defined _subs goto result 
     :: remove first letter until empty 
     set _subs=%_subs:~1% 
     set /a _len+=1 
     goto getlen 
    :result 
     echo %_len%   
     shift 
     goto loop 
:end 

回答

1

批处理文件变量的使用,如果你看看代码,一个名为_len变量定义。然后这个变量被回显到控制台,但不会被删除(不重新分配,没有endlocal,...),所以只需使用它。

无论如何,它比看起来更容易。

@echo off 
    setlocal enableextensions disabledelayedexpansion 
    set "errfolderpath=C:\Testing\Moving txt files automatically" 
    for %%a in (*.txt) do (
     set "notMoved=1" 
     for %%b in ("%errorfolderpath%\%%~na*") do if defined notMoved (
      set "notMoved=" 
      move "%%~fa" "%%~fb" 
     ) 
    ) 

对于每个文件,搜索具有相同前缀的文件夹(在%%a引用的文件的名称,没有扩展,是%%~na)。如果找到,请将文件(文件的完整路径为%%~fa)移动到目标文件夹,并使用开关变量将文件“标记”为已移动,以避免在具有相同前缀的两个文件夹时出现问题在内部检索for %%b)。

+0

谢谢MC ND,我快到了。你知道我会如何改变这个: 'set folderName2 =!folderName:〜0,11!' to use!_len!而不是11? – user1425011

+1

@ user1425011'for %% z in(!_len!)do set folderName2 =!folderName:〜0,%% z!' –

相关问题