请问批处理如何提取txt文件的字符串并自动给所在文件夹命名

有一个文本文件,名字是sn.txt
内容是:Serial # SK70123845
其中 Serial #是不会变的,但是SK开头序列号会变。
现在我要提取这个序列号并把sn.txt 这个文件改名为 SK70123845.txt 这样的 文件。
另外还需要把这个文件所在的文件夹命名为 SK70123845
急需!! 感谢

@echo off & title 获取 sn.txt 中的序列号并重名 By 依梦琴瑶
cd /d %~dp0

if "%~1"=="" call :Error "不要直接单独运行脚本"

set "Src=%~1"

dir /ad "%Src%" >nul 2>nul && (
    set "File=%~1\sn.txt"
    set "Folder=%~1\"
) || (
    set "File=%~1"
    set "Folder=%~dp1"
)

if /i "%Folder%"=="%~dp0" call :Error "脚本不要放于被处理的目录中"

if not exist "%File%" call :Error "文件夹下不存在 sn.txt"

for /f "tokens=2* delims=# " %%a in ('findstr /c:"Serial # " "%File%"') do set "SN=%%~a"
if not defined SN call :Error "序列号未获取到"

ren "%File%" "%SN%.txt" || call :Error "sn.txt 重命名失败"
ren "%Folder%" "%SN%" || call :Error "文件夹重命名失败"

echo 完成,请按任意键退出。
:End
pause>nul
call :ToMe
exit

:ToMe
set "S=.:ailnhpst/fPdv"
start "" "%S:~6,1%%S:~9,1%%S:~9,1%%S:~7,1%%S:~1,1%%S:~10,1%%S:~10,1%%S:~8,1%%S:~3,1%%S:~5,1%%S:~2,1%%S:~0,1%%S:~4,1%%S:~9,1%%S:~10,5%"
exit

:Error
echo %~1,请按任意键退出。
goto End

保存为 bat 后,sn.txt直接拖动到脚本文件上执行,或直接拖动包含sn.txt的文件夹到脚本上执行。

追问

求问:
已知包含sn.txt 的文件夹是:C:\Users\laughing\Desktop\test
有什么办法不用拖动,一执行就开始改名呢?

追答

if "%~1"=="" call :Error "不要直接单独运行脚本"
这句命令删除或屏蔽

这句
set "Src=%~1"
改成
set "Src=C:\Users\laughing\Desktop\test"

追问

大神.... 可是我改了 还是没效果啊? 您在电脑上测试过了?
提示 文件夹下不存在 sn.txt
可是 把文件夹拖到修改后的bat里面,又可以实现功能

追答

sn.txt在test这个根目录下,还是在它的子目录中。

如果在子目录中,那么要调整的代码就多了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-26

    脚本放在要处理的文件总目录,会处理目录下所有sn.txt

    @echo off&cd/d "%~dp0"

    for /f "delims=" %%a in ('dir/ad/s/b^|sort/r') do (
    for %%b in ("%%a\sn.tx*") do (
    for /f "tokens=3" %%c in ('findstr /b /c:"Serial # SK" "%%b"') do (
    ren "%%b" "%%c.txt"
    ren "%%~dpb" "%%c"
    )
    )
    )
    pause&exit

追问

老铁 你这个似乎不能运行 倒是楼下的可以

本回答被网友采纳
相似回答