[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
最好提供一下基因合成文件夹的结构:tree一下发上来。
1

评分人数

TOP

回复 10# 13545876873
将下面代码保存为ANSI编码:
  1. @echo off
  2. cd /d "D:\基因合成\2022.5\"
  3. for /d %%i in (*) do (
  4.     move "D:\测序结果\*-%%i-*.ab1" "%%i\"
  5. )
  6. pause
复制代码

TOP

本帖最后由 qixiaobin0715 于 2022-5-20 14:42 编辑

回复 10# 13545876873
这样也行:
  1. @echo off
  2. cd /d "D:\测序结果"
  3. for /f "tokens=1-2* delims=-" %%a in ('dir /b /a-d *.ab1') do (
  4.     if not exist "D:\基因合成\2022.5\%%b" md "D:\基因合成\2022.5\%%b"
  5.     move "%%a-%%b-%%c" "D:\基因合成\2022.5\%%b\"
  6. )
  7. pause
复制代码
1

评分人数

TOP

你把之前5001文件夹和处理后文件夹要达到的效果发到网盘上共享,我可以试试看。

TOP

没看太明白:
1.1-14、1-26、25-38、25-52是如何对应的;
2.用记事本打开htm文件后,你所说的序列行有何特点,如何就确定这行就是你所要的。

TOP

回复 22# 13545876873
你先看一下6楼代码能完成先前的需求吗?

TOP

问你6楼代码测试结果就是为了继续下一步,你也不说一声。假设6楼代码没有问题,试试下面代码是否可行。未测试,效率可能不高:
  1. @echo off
  2. cd /d "D:\基因合成\2022.5\"
  3. for /d %%i in (*) do (
  4.   move "D:\测序结果\*-%%i-*.ab1" "%%i\"
  5. )
  6. for /d %%i in (*) do (
  7.   pushd "%%i"
  8.   for /f "tokens=2-4 delims=-" %%a in ('dir /b /a-d *.ab1') do (
  9.     set n=0
  10.     setlocal enabledelayedexpansion
  11.     for /f "delims=" %%j in ('findstr ">" %%a.htm') do (
  12.       set "str1=%%j"
  13.       set "str1=!str1:*span =<span !"
  14.       set "str1=!str1:</td></tr>=! span"
  15.       set "str1=!str1:<= !"
  16.       set "str1=!str1:>= !"
  17.       set "str1=!str1:/=!"
  18.       for %%k in (!str1!) do (
  19.         if "%%k"=="span" (
  20.           if !n! geq %%b if !n! leq %%c set str2=!str2!!var!
  21.           set /a n+=1
  22.         )
  23.         set "var=%%k"
  24.       )
  25.     )
  26.     echo,!str2!>%%a-%%b-%%c.txt
  27.     endlocal
  28.   )
  29.   popd
  30. )
  31. pause
复制代码
1

评分人数

TOP

回复 37# 13545876873
也不知你这是什么规则,文本规律和你的需求差距较大,还是你自己好好整理思路,看看文本和你的需求到底有何联系。htm文件要用记事本而不能用ie打开,因为处理的是htm的源代码而不是用ie打开后的效果。

TOP

回复 37# 13545876873
我想你要的结果可能是除了正常分组序列的字符之外,还要将序列向右偏移17个字符,看看这样是否符合你的需求,未经测试:
  1. @echo off
  2. cd /d "D:\基因合成\2022.5\"
  3. for /d %%i in (*) do (
  4.   move "D:\测序结果\*-%%i-*.ab1" "%%i\"
  5. )
  6. for /d %%i in (*) do (
  7.   pushd "%%i"
  8.   set x=0
  9.   setlocal enabledelayedexpansion
  10.   for /f "delims=" %%j in ('findstr "&gt;" %%i.htm') do (
  11.     set "str1=%%j"
  12.     set "str1=!str1:"color:red;">= ### !"
  13.     set "str1=!str1:</span>= ### !"
  14.     set "str1=!str1:<= !"
  15.     for %%l in (!str1!) do (
  16.       if "!str2!" == "###" (
  17.         set /a x+=1
  18.         set _!x!=%%l
  19.       )
  20.       set str2=%%l
  21.     )
  22.   )
  23.   for /f "tokens=2-4 delims=-" %%a in ('dir /b /a-d *.ab1') do (
  24.     setlocal enabledelayedexpansion
  25.     for /l %%d in (%%b,1,%%c) do (
  26.       set var=!var!!_%%d!
  27.     )
  28.     set /a n=%%c+1
  29.     if defined _!n! (
  30.       for %%e in (_!n!) do (
  31.         echo,!var!!%%e:~,17!>%%a-%%b-%%c.txt
  32.       )
  33.     ) else (
  34.       echo,!var!>%%a-%%b-%%c.txt
  35.     )
  36.     endlocal
  37.   )
  38.   endlocal
  39.   popd
  40. )
  41. pause
复制代码
1

评分人数

TOP

本帖最后由 qixiaobin0715 于 2022-5-25 13:25 编辑

你的测试文件有问题:
1.文件夹中存在序列相同的文件。比如5001文件夹中存在文件名片段相同的字符,5001-25-48字段和5001-1-26字段各重复4个。
2.你提供的测试文件中htm文件的文件名是和文件夹名相同的,我猜想这次测试应当是不同的。比如文件夹5001中的htm文件应当是5001.htm。
3.如果htm文件名有空格请把代码第10行中的 %%i.htm 用双引号(注意是英文引号)括起来 "%%i.htm"。
你可以用你提供的 测试文件试一下。
或者你用37楼测试成功的测试文件试试。

先前没有测试,刚刚用你提供的文件测试没有发现问题。
要么就是htm文件的编码问题。



此帖不再关注

TOP

回复 44# 13545876873
将代码第10行 %%i.htm 改为 %%i.html
然后将代码另存为ANSI编码。

TOP

本帖最后由 qixiaobin0715 于 2022-5-25 15:46 编辑

回复 46# 13545876873
记得你还需要提取一个全序列文本。
可以在第40楼代码中,原第18~19行之间增加一行:
  1. set str=!str!%%l
复制代码
原第21~22行之间增加一行:
  1. echo,!str!>"%%i.txt"
复制代码
就OK了!
记得要将代码另存为ANSI编码啊。
1

评分人数

    • 13545876873: 感谢给帖子标题标注[已解决]字样技术 + 1

TOP

返回列表