Board logo

标题: [文本处理] BAT批处理如何提取包含括号的文件夹路径? [打印本页]

作者: chejh    时间: 2014-3-19 09:29     标题: BAT批处理如何提取包含括号的文件夹路径?

本帖最后由 chejh 于 2014-3-28 15:43 编辑
  1. 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

  1. 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
  1. rem 路径截取
  2. pushd "%log_dir%"
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /s %ys%.log') do (
  5.     set str=%%~pi
  6.     set str=!str:^(=!
  7.     set str=!str:^)=!
  8.     echo !str!
  9. )>%tmp%\douyou_filepath.txt
  10. popd
复制代码

作者: Batcher    时间: 2014-3-19 14:08

回复 16# chejh


    我每天回复很多个帖子,你不说清楚的话,我还真想不起来。
作者: chejh    时间: 2014-3-19 14:30

回复 18# Batcher


    这段代码是把截取的路径带有()的自动取消嘛?其实我那段路段截取是正确的啊·
作者: apang    时间: 2014-3-19 14:46

加上引号试试呢?
  1. (for /f "tokens=1,2,3,4 delims=\" %%e in (%tmp%\douyou_filepath.txt) do (
  2.     echo mkdir "%%f"
  3.     echo mkdir "%%f\%ip%"
  4.     echo mkdir "%%f\%ip%\%%h"
  5.     "%rar_dir%" a -ep1 -inul "%tmp%\douyou_%ys%.rar" "%log_dir%\%%f\%%g\%%h\%ys%.log"
  6.     echo put "%tmp%\douyou_%ys%.rar" "%%f\%ip%\%%h\%ys%.rar"
  7. ))>"%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://www.bathome.net/) Powered by Discuz! 7.2