Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 读取文本文件后更改文件夹名称的批处理代码_Batch File_Cmd_Rename_Directory_Findstr - Fatal编程技术网

Batch file 读取文本文件后更改文件夹名称的批处理代码

Batch file 读取文本文件后更改文件夹名称的批处理代码,batch-file,cmd,rename,directory,findstr,Batch File,Cmd,Rename,Directory,Findstr,有人在这个网站上给我这个代码 代码可以完美地找到此代码 SMTP_电子邮件_地址类型=SZname@company.comSMTP电子邮件地址 我要密码找到这个 <SMTP_Email_Address type="SZ">abc@abc.com</SMTP_Email_Address> abc@abc.com 由于此标志>>“代码不起作用” 通过在文本文件中找到的电子邮件更改文件夹名称,我想我理解这个问题。 需要使用插入符号(^)转义特殊字符 例如 替换 与 “^*[

有人在这个网站上给我这个代码

代码可以完美地找到此代码

SMTP_电子邮件_地址类型=SZname@company.comSMTP电子邮件地址

我要密码找到这个

<SMTP_Email_Address type="SZ">abc@abc.com</SMTP_Email_Address>
abc@abc.com
由于此标志>>“代码不起作用”


通过在文本文件中找到的电子邮件更改文件夹名称,我想我理解这个问题。 需要使用插入符号(^)转义特殊字符 例如 替换

“^*[^][^]*@[^][^]*\.[^][^]**^”

只要相关的XML行的格式与您指定的完全一致,以下内容就可以使用。但这是有风险的,因为XML的格式可能会改变并且仍然有效,但它会破坏这段代码。批处理不是解析XML的好选择,除非您确切知道XML的格式

编辑-这段原始代码大部分有效,但有两个问题:

1) 排序操作可能会导致使用错误的匹配地址行。它应该使用第一个找到的匹配行

2) 脚本可能会尝试重命名根位置。Windows将不允许这样做,因为批处理脚本的当前目录已设置为该位置

@echo关闭
按下“您的根位置”
对于/f“令牌=1,3 delims=:”%%A in(
'findstr/srbc:[^][^]*@[^][^]*\.[^][^]*'file1.txt^排序/r'
)如果(“%%A\..”中的%%F存在“%%A”,则执行“%%fF”%%B”
邻苯二胺

以下代码已修复,以正确使用第一个匹配的地址行。它也不会尝试重命名根位置。但如果任何进程当前依赖于该位置,则其他重命名可能会失败

@echo关闭
setlocal
按下“YourRootLocation”
设置“搜索=[^][^]*@[^][^]*\.[^][^]*”
对于/f“eol=:delims=“%%A in(
'findstr/srmbc:“%search%”file1.txt^排序/r'
)do for/f“tokens=2 delims=“%%B in(
'findstr/rbc:'%search%''%A''
)如果(“%A\..”中的%%F存在“%%A”,则执行“%%~fF”neq”%CD%”(
echo ren“%%~fF”“%%B”
ren“%%~fF”“%%B”
)
邻苯二胺

我正试图编辑您的帖子,使其更具可读性,tbh我认为您应该将其回滚到我所说的方式,这使其更易于理解。我们同时编辑,所以我不知道您如何编辑:)您可以做您想做的事兄弟:)别担心,巴德,其他人已经编辑过;)哦,我想我忽略了什么,findstr有自己的语法(反斜杠)来转义特殊字符。但我尝试了各种组合,但也无法实现:(谢谢你,我尝试了这个,但没有成功,这个xml文件没有改变代码time@Hauari-我进行了测试,除了2个小错误外,原始代码大部分都有效。我用新版本编辑了我的答案。如果这对你不起作用,那么你文件中的地址行格式一定与你发布的地址行格式不太匹配。搜索定义uld必须更改以匹配文件中的格式。
<SMTP_Email_Address type="SZ">abc@abc.com</SMTP_Email_Address>
"SMTP_Email_Address  *type=SZ  *[^ ][^ ]*@[^ ][^ ]*\.[^ ][^ ]*  *SMTP_Email_Address"
"^<SMTP_Email_Address  *type=^"SZ^"^>  *[^ ][^ ]*@[^ ][^ ]*\.[^ ][^ ]*  *^<^/SMTP_Email_Address^>"
@echo off
pushd "your root location"
for /f "tokens=1,3 delims=:<>" %%A in (
  'findstr /srbc:"<SMTP_Email_Address .*>[^ ][^ ]*@[^ ][^ ]*\.[^ ][^ ]*</SMTP_Email_Address>" file1.txt^|sort /r'
) do if exist "%%A" for %%F in ("%%A\..") do ren "%%~fF" "%%B"
popd
@echo off
setlocal
pushd "YourRootLocation"
set "search=<SMTP_Email_Address .*>[^ ][^ ]*@[^ ][^ ]*\.[^ ][^ ]*</SMTP_Email_Address>"
for /f "eol=: delims=" %%A in (
  'findstr /srmbc:"%search%" file1.txt^|sort /r'
) do for /f "tokens=2 delims=<>" %%B in (
  'findstr /rbc:"%search%" "%%A"'
) do if exist "%%A" for %%F in ("%%A\..") do if "%%~fF" neq "%CD%" (
  echo ren "%%~fF" "%%B"
  ren "%%~fF" "%%B"
)
popd