批处理中关于文件名字符串的判别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批处理中关于文件名字符串的判别相关的知识,希望对你有一定的参考价值。

比如对于*.doc或者*.xls文件,对其文件名进行判断是不是英文或者数字,即是否为(0-9a-zA-Z)之间的字符;
程序目的为对一个文件夹下所有.doc文件名分析,筛选出只含英文和数字的doc文件,如(123.doc we12w.doc ww中文.doc 12我们.doc)只取出123.doc和we12w.doc,请高手不啬赐教,最好附上代码和方法说明,谢谢了O(∩_∩)O~

参考技术A 1.获取这个文件夹下的所有文件,取出文件名为一个数组。
2.循环这个数组。
3.解析每一个文件名,取最后的小数点作为一个标识符,后面的是后缀名,前面的文件名。
4.将获取到的文件名再放到一个数组里面。
按照这个步骤就可以解析出你想要的结果了。
不知道你的这个是用什么语言写,抱歉没有代码。追问

批处理,不用那么麻烦,可以取出文件名,然后直接字符串匹配即可。

参考技术B 看了追问网友的图里代码,其实只需要把要执行的copy的命令放到那显示有文字或无文字的位置(那种显示无意义替换它)就可以达到目的,如果命令很长或有多行还可加括号的,那个&&和||的两部分或许只需要处理一种,则不需要的那种可以去掉,不知我说明白没有?
不过这种把每个文件名都送findstr查找一遍的形式运行很费时,还可以改进,需要的话再帮你改写一个
参考技术C @ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%I IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
IF EXIST %%I:\* (
CD /D %%I:
FOR /F "DELIMS=" %%A IN ('DIR /S/B 2009_*.txt 2^>nul') DO (
SET FOO=%%~NA
SET FOO=!FOO:*_=!
ECHO/!FOO! %%A
)
)
)
)
PAUSE>NUL

代码仅作演示,同时在截取字符后面添加了文件路径。
追问

方法不错,貌似见过,不是自己写的吧

参考技术D dir *.doc/b|findstr [0-9,a-b]追问

能说得再具体点吗,这位仁兄,举个例子,有点不懂

追答

直接可以试啊
123.doc we12w.doc ww中文.doc 12我们.doc
如果文件夹中有上面这些文件,运行dir *.doc/b|findstr [0-9,a-b] 只取出123.doc和we12w.doc

[0-9,a-b] 是正则表达式,只匹配数字和字母

追问

看我的代码,我能区分出文件名是否为英文和字母,或者其他的,但我想把非英文和数字的文件复制到f:/hello目录下,代码该如何改进,请赐教!

追答

要下班了,你先试试findstr /v [0-9,a-z]能实现你的想法吗?
我晚上有时间再给你看看。

本回答被提问者采纳

Servlet中关于路径的小结

 

URL(统一 资源定位符)、URI(统一资源标识符)都是由资源路径和资源名称组成。

技术图片 技术图片

访问路径按照路径是否可以独立完成资源准确定位的判别标准,可以将访问路径分为绝对路径相对路径

关系:绝对路径 = 参照路径 + 相对路径

绝对路径是一个详细的资源访问路径,但是相对路径需要详细说明。

相对路径:  ①以斜杠开头的相对路径  以路径名称开头的相对路径

以斜杠开头的相对路径,根据路径所在文件所处位置的不同,分为前台路径后台路径

前台路径:由浏览器解析执行的代码中所包含的路径。e.g:    html 、 css 、 js中的路径, jsp 文件中静态部分的路径 、HTML 标签中的路径.

例子: html 及 jsp 文件 中的 <img 、 <a href=" "></ 、 <form action=" "></ 等 标签中的路径 再如, css 文件中的 background:img( 等属性中的路径, js 文件 中的 window.location.href= 等属性中的路径 ,都属于前台路径。

 

 

 

前台路径的参照路径是 Web 服务器的根路径 ,例如 http://127.0.0.1:8080 。!!!

将前台路径转换为绝对路径的工作,是由浏览器自动完成的。

该路径的作用是要为用户该路径的作用是要为用户提交对某种资源的请求,是要查找并定位服务器中的某资源。简单来说,前台路径的作用是提交对某种资源的请求,是要查找并定位服务器中的某资源。简单来说,前台路径的作用是“查找”。

例如:

超链接的例子

技术图片                  技术图片

 

 

 

表单例子 

<!-- 
		这是一个前台路径,前台路径的参数路径是当前Web服务器的根,即
			http://localhost:8080
		绝对路径 = 参数路径 + 相对路径
		即浏览器会自动将这个前台路径转换为绝对路径
			http://localhost:8080/loginServlet
		在Web服务器的根目录中没有loginServlet这个东西,所以这个访问路径
		是无法访问到loginServlet的,会报404
	 -->
	<form action="/loginServlet" method="POST">
		用户名:<input type="text" name="username"/><br>
		<input type="submit" value="登录"/>
	</form>
	
	<hr>
	
	<!-- 
		这是一个前台路径,前台路径的参数路径是当前Web服务器的根,即
			http://localhost:8080
		绝对路径 = 参数路径 + 相对路径
		即浏览器会自动将这个前台路径转换为绝对路径
			http://localhost:8080/25-relativePath2/loginServlet
		在Web服务器的根目录中存在25-relativePath2项目,而这个项目中存在loginServlet
		所以,这个访问路径是可以访问到的
	 -->
	<form action="/25-relativePath2/loginServlet" method="POST">
		用户名:<input type="text" name="username"/><br>
		<input type="submit" value="登录"/>
	</form>

 

 

后台路径:由服务器解析执行的代码及文件中所包含的路径。e.g: java 代码中的路径、 jsp 文件动态部分( java 代码块)中的路径、 xml 等配置 文件中的路径( 配置 文件是要被 java 代码 解析后加载到 内存 的,其中的路径会出现在 Java 代码中 )等。

后台路径的参照路径是Web应用的根路径 。如 http://127.0.0.1:8080/primary 。!!!

将后台路径转换为绝对路径的工作,是由服务器自动完成的。

该路径的作用是标识出该资源在服务器中的路径,以便客户端能够按照这个设定路径来查找相应资源。简单来说,后台路径的作用是“标识”。

举栗子:

 

<!-- web.xml 配置属于后台路径-->
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="WebApp_ID" version="2.5"> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <servlet> <description></description> <display-name>LoginServlet</display-name> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.bjpowernode.servlets.LoginServlet</servlet-class> </servlet> <!-- 这是一个后台路径,后台路径的参照路径是当前Web应用的根,即 http://localhost:8080/25-relativePath2 绝对路径 = 参照路径 + 相对路径 将相对路径转换为绝对路径工作,是由Web服务器完成的,服务器会将 这个相对路径转换为: http://localhost:8080/25-relativePath2/loginServlet 后台路径的绝对路径,其作用是“标识”。即客户端要想访问我这里定义的LoginServlet 那么,必须要提交上面的绝对路径。 客户端现在提交的请求为: http://localhost:8080/25-relativePath2/loginServlet 其与这里的绝对路径是相同的,所以这个请求是可以访问到LoginServlet的 --> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/loginServlet</url-pattern> </servlet-mapping> </web-app>

 

 

这个栗子营养多!!!
public class SomeServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 这是一个后台路径,后台路径的参照路径是当前Web应用的根,即 * http://localhost:8080/26-relativePath3 * 绝对路径 = 参照路径 + 相对路径 * 将这个相对路径转换为绝对路径的工作,是由Web服务器完成的。即服务器会将 * 这个相对路径转换为:http://localhost:8080/26-relativePath3/otherServlet * 服务器中对于OtherServlet这个资源指定的访问路径是 * http://localhost:8080/26-relativePath3/otherServlet * 请求路径与资源的“标识”路径是相同的,那么,这个请求是可以跳转成功的 * */
request.getRequestDispatcher("/otherServlet").forward(request, response); /* * 注意,对于response的sendRedirect()方法完成的重定向,若其参数路径为“以斜杠开头的相对路径” * 这个后台路径是个特例。只所以其为特例,是由sendRedirect()方法的本质决定的。这个方法不仅可以完成 * 在当前项目中资源的跳转,还可以跳转到其它项目中的资源。所以这个后台路径的参照路径为“当前Web服务器 * 的根”。 * * 注意,只有这一种重定向是特例,将来还会有其它方式实现的重定向,但那里的重定向就不是特例, * 而是遵循我们之前的路径转换理论 */ // 下面的写法无法完成跳转 // response.sendRedirect("/otherServlet"); // 下面的写法可以完成跳转,但这样写不太好 // response.sendRedirect("/26-relativePath3/otherServlet"); // 下面的写法才是最好的写法 response.sendRedirect(request.getContextPath() + "/otherServlet"); } }

 技术图片

 ②以路径名称开头的相对路径

以路径名称开头的相对路径 ,无论是出现在前台页面 ,还是出现在后台Java 代码或配置文件中其参照路径都是当前访问路径的资源路径 。 即使是response的sendRedirect()方法的参数路径,若不以斜杠开头,其也属于以路径名称开头的相对路径”类,参照路径为当前访问路径的资源路径。

 

 举栗子:

 

 技术图片

 

 

 技术图片

 

 

 

public class SomeServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/*
		 * 这是一个“以路径名称开头的相对路径”,其参照路径为“当前访问路径的资源路径”
		 * 就本例而言,是  http://localhost:8080/27-relativePath4
		 * 绝对路径 = 参照路径 + 相对路径
		 * 服务器会自动将这个相对路径转换为绝对路径:
		 * http://localhost:8080/27-relativePath4/otherServlet
		 * 
		 */
		request.getRequestDispatcher("otherServlet").forward(request, response);
		
		/*
		 * 注意,对于response的sendRedirect()方法完成的重定向,若参数路径不以斜杠开头,
		 * 其是满足之前的路径理论的。其不是特例。下面的相对路径是可以完成跳转的。
		 * 
		 */
		response.sendRedirect("otherServlet");
		
		//注意,若相对路径加上斜杠与不加斜杠,都可以完成跳转,那么,就要加上斜杠。	
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns="http://java.sun.com/xml/ns/javaee"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      id="WebApp_ID" version="2.5"> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <!--   服务器会将这个相对路径转变为如下的绝对路径:http://localhost:8080/26-relativePath3/otherServlet   这个绝对路径的意思是,若想访问我这里定义的OtherServlet,那你就必须提交如上形式的访问路径。即这里指定了OtherServlet这个资源的访问路径。
   注:其中 <url-pattern>/otherServlet</url-pattern>中的/otherServlet的/是不能去掉的,不能按照以路径名称开头的相对路径去想,
    因为这里是个配置文件只是用来标识的,并没有访问的资源路径,所有不可以去掉/
          
   -->
  <servlet-mapping>
    <servlet-name>OtherServlet</servlet-name>
    <url-pattern>/otherServlet</url-pattern>
  </servlet-mapping>
</web-app>    



以上是关于批处理中关于文件名字符串的判别的主要内容,如果未能解决你的问题,请参考以下文章

Python中关于split和splitext的差别和运用

java中关于正则表达式的基本使用

django中关于BooleanField选项的字符串转化

在TC和VC中关于字符处理的区别!这里我们把字符型的数字转换成整形数字!

Servlet中关于路径的小结

再来复习一下Javascript中关于数组和对象的常用方法