标题: [文本处理] BAT批处理如何提取包含括号的文件夹路径? [打印本页]
作者: chejh 时间: 2014-3-19 09:29 标题: BAT批处理如何提取包含括号的文件夹路径?
本帖最后由 chejh 于 2014-3-28 15:43 编辑
- for /f "delims=" %%c in ('forfiles /p %log_dir% /s /m %ys%.log /c "cmd /c for /f %%i in (@path) do @echo %%~pi"') do (echo %%c)>>%tmp%\douyou_filepath.txt
复制代码
这段是文件路径截,截取效果如下:
\webroot\新浪狼\logger\20140319\
\webroot\百度度\logger\20140319\
\webroot\结算嵌入\logger\20140319\
如:
\webroot\新浪浪(嵌入站点)\logger\20140319\
有个文件夹的名字后面中间有括号就截取不了,我要怎么把这个括号取消或者提取出来,现在是提取不到上面这个文件夹,也就是没有上面一段
作者: Batcher 时间: 2014-3-19 09:42
- for /f "delims=" %%i in ('dir /b /s %ys%.log') do (echo %%~pi)>%tmp%\douyou_filepath.txt
复制代码
作者: lky216 时间: 2014-3-19 09:45
我在2003系统,测试可以提取包含有()的路径
作者: chejh 时间: 2014-3-19 09:47
回复 3# lky216
关键是确实提取不了啊
作者: chejh 时间: 2014-3-19 09:48
回复 2# Batcher
这个没有路径啊,你的截图的路径没了
作者: Batcher 时间: 2014-3-19 09:54
回复 5# chejh
把2楼代码生成的douyou_filepath.txt的内容发出来看看
作者: Batcher 时间: 2014-3-19 09:54
回复 4# chejh
你用的什么操作系统?
作者: chejh 时间: 2014-3-19 09:55
你给我的这段代码什么东西都没有啊
作者: chejh 时间: 2014-3-19 09:56
回复 7# Batcher
2003和2008啊
作者: chejh 时间: 2014-3-19 09:57
回复 6# Batcher
没有生成这个文件
作者: chejh 时间: 2014-3-19 10:03
错了问错问题了,我一会儿重新黏贴一下我的问题·
作者: Batcher 时间: 2014-3-19 10:04
%ys%这个变量是在哪里定义的?把完整代码发出来看看
作者: chejh 时间: 2014-3-19 10:04
回复 12# Batcher
这就是我叫你优化的那个时间代码·
作者: chejh 时间: 2014-3-19 10:12
本帖最后由 chejh 于 2014-3-28 15:43 编辑
rem 路径截取
for /f "delims=" %%c in ('forfiles /p %log_dir% /s /m %ys%.log /c "cmd /c for /f %%i in (@path) do @echo %%~pi"') do (echo %%c)>>%tmp%\douyou_filepath.txt
结果
\webroot\新浪浪\logger\20140319\
\webroot\百度度\logger\20140319\
\webroot\结算嵌入\logger\20140319\
\webroot\新浪浪(嵌入站点)\logger\20140319\
上面代码提取的路径,之后我要怎么在ftp里面创建此文件件 兜有院线通(嵌入站点) 的文件夹,不要括号也可以·
rem ftp上创建目录,上传打包日志
for /f "tokens=1,2,3,4 delims=\" %%e in (%tmp%\douyou_filepath.txt) do (
echo mkdir %%f
echo mkdir %%f\%ip%
echo mkdir %%f\%ip%\%%h
%rar_dir% a -ep1 -inul %tmp%\douyou_%ys%.rar %log_dir%\%%f\%%g\%%h\%ys%.log
echo put %tmp%\douyou_%ys%.rar %%f\%ip%\%%h\%ys%.rar
)>>%tmp%\douyou_ftp.txt
其中%%f就第二个字段的截图,兜有院线通(嵌入站点),上面的变量貌似不支持创建()类似的目录,
思想1要么截取的时候取消(),思路2要么使用参数在ftp上面创建带()的目录(目前不知道)
作者: Batcher 时间: 2014-3-19 12:36
%log_dir%
%ys%
这些变量是在哪里定义的?
完整代码不方面发出来吗?
作者: chejh 时间: 2014-3-19 13:49
回复 15# Batcher
不是代码问题啊,%ys%就是一个时间定义的变量.就是我截取到一个带有()路径的目录名字在ftp上面创建不了·我截取路径站点目录名字的时候要怎么取消(),或者在ftp目录上面创建带有()目录的文件夹。因为前面一个是变量,但是%%f变量好像又不识别()的中文字.参考14那段代码.截取那段是正确的%ys%就是你帮我修改的那段代码,
@echo off
REM 获取一个小时前的时间
>"%temp%\MyDate.vbs" echo strLastHours=DateAdd("h", -1, now)
>>"%temp%\MyDate.vbs" echo strFmtDate=Right(Year(strLastHours),4) ^& Right("0" ^& Month(strLastHours),2) ^& Right("0" ^& Day(strLastHours),2) ^& Right("0" ^& Hour(strLastHours),2)
>>"%temp%\MyDate.vbs" echo WScript.Echo strFmtDate
for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (set ys=%%a)
echo %ys%
作者: Batcher 时间: 2014-3-19 14:07
回复 14# chejh - rem 路径截取
- pushd "%log_dir%"
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /s %ys%.log') do (
- set str=%%~pi
- set str=!str:^(=!
- set str=!str:^)=!
- echo !str!
- )>%tmp%\douyou_filepath.txt
- popd
复制代码
作者: Batcher 时间: 2014-3-19 14:08
回复 16# chejh
我每天回复很多个帖子,你不说清楚的话,我还真想不起来。
作者: chejh 时间: 2014-3-19 14:30
回复 18# Batcher
这段代码是把截取的路径带有()的自动取消嘛?其实我那段路段截取是正确的啊·
作者: apang 时间: 2014-3-19 14:46
加上引号试试呢?- (for /f "tokens=1,2,3,4 delims=\" %%e in (%tmp%\douyou_filepath.txt) do (
- echo mkdir "%%f"
- echo mkdir "%%f\%ip%"
- echo mkdir "%%f\%ip%\%%h"
- "%rar_dir%" a -ep1 -inul "%tmp%\douyou_%ys%.rar" "%log_dir%\%%f\%%g\%%h\%ys%.log"
- echo put "%tmp%\douyou_%ys%.rar" "%%f\%ip%\%%h\%ys%.rar"
- ))>"%tmp%\douyou_ftp.txt"
复制代码
作者: chejh 时间: 2014-3-19 14:52
回复 20# apang
加引号是把它当字符串输出嘛?
作者: apang 时间: 2014-3-19 14:57
回复 21# chejh
引号可以转义特殊字符,括弧应该可以转义吧?再不行的话,用call应该可以吧?
作者: Batcher 时间: 2014-3-19 15:22
回复 19# chejh
是的
作者: chejh 时间: 2014-3-20 21:19
回复 23# Batcher
我这段代码所有的变量都要加引号?
提示这个错误
'""C:\Program' 不是内部或外部命令,也不是可运行的程序
作者: chejh 时间: 2014-3-20 21:56
log_dir是set
%ys%上面已经发了
作者: Batcher 时间: 2014-3-20 21:58
回复 24# chejh
是根据17楼的方法修改的吗?把你修改过的完整代码发出来。
作者: chejh 时间: 2014-3-20 21:59
回复 26# Batcher
路段截取是没有问题啊,那个不需要修改,只是我创建目录的时候不识别abc(bca),这个变量
作者: chejh 时间: 2014-3-20 22:03
好把,这个带有括号是我自己在文件夹创建的,它识别了·但是那条自己创建的命令没有生效·不过它识别这个目录
作者: Batcher 时间: 2014-3-20 22:11
回复 27# chejh
你测试了吗?17楼的那几个set命令就是用来删除括号的。
作者: chejh 时间: 2014-3-24 10:57
回复 29# Batcher
这个路段截取是有问题的,我试了一下
作者: Batcher 时间: 2014-3-24 22:47
回复 30# chejh
具体什么问题告诉我。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |