[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 yyz219 于 2022-9-21 01:33 编辑
如果数据像你提供的那么规整的话,这样效率应当更高些:未经测试。
qixiaobin0715 发表于 2022-9-20 16:37


如果文件路径中有 “!”号的时候,被过滤掉了,能不能修改一下

下面是不能正确输出的1.csv
https://pan.baidu.com/s/1D0-KYijTpeT6mD2UXB3r-g
我是小白,希望老师多多帮助

TOP

回复  yyz219


   
直接在CMD窗口下试试如下指令:
hfxiang 发表于 2022-9-20 10:55



    能够正确输出,麻烦修改为批处理

谢谢
我是小白,希望老师多多帮助

TOP

for指令在命令行执行与批处理内执行,其两者之间的参数对应关系为:
在命令行用单百分号(%),如下:
  1. @(for /f "tokens=10 delims=," %a in (1.csv) do @for /f %b in ('echo %~a^|findstr /i ".txt .ini .bat .vbs"')  do @echo "%~b")>1.txt 2>nul
复制代码
在批处理用双百分号(%%),如下:
  1. @(for /f "tokens=10 delims=," %%a in (1.csv) do @for /f %%b in ('echo %%~a^|findstr /i ".txt .ini .bat .vbs"')  do @echo "%%~b")>1.txt 2>nul
复制代码
1

评分人数

    • yyz219: 能修改一下主楼的吗?使它支持“!”技术 + 1

TOP

for指令在命令行执行与批处理内执行,其两者之间的参数对应关系为:
在命令行用单百分号(%),如下:在批 ...
hfxiang 发表于 2022-9-21 08:23


非常感谢
我是小白,希望老师多多帮助

TOP

for指令在命令行执行与批处理内执行,其两者之间的参数对应关系为:
在命令行用单百分号(%),如下:在批 ...
hfxiang 发表于 2022-9-21 08:23



    你这些代码比主楼的慢一些,能不能加快一点(或者修改一下主楼的代码,使它支持“!”号)

谢谢
我是小白,希望老师多多帮助

TOP

本帖最后由 flashercs 于 2022-9-21 10:14 编辑
  1. 0<1/*,:
  2. @echo off
  3. cd /d "%~dp0"
  4. cscript -nologo -e:jscript "%~f0" "1.csv" "1.txt"
  5. pause
  6. exit /b
  7. */;
  8. if (WScript.Arguments.length < 2) WScript.Quit();
  9. var fso = new ActiveXObject('Scripting.FileSystemObject');
  10. var re = /(?:")([^"]*\.(?:txt|ini|bat|vbs))[^"]*"$/igm;
  11. try {
  12.   var tsread = fso.OpenTextFile(WScript.Arguments(0), 1, false, -2);
  13.   var str = tsread.ReadAll();
  14.   tsread.Close();
  15.   var tswrite = fso.OpenTextFile(WScript.Arguments(1), 2, true, -2);
  16.   var arr;
  17.   while (null != (arr = re.exec(str))) {
  18.     tswrite.WriteLine(arr[1]);
  19.   }
  20.   tswrite.Close();
  21. } catch (e) {
  22. }
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

回复 16# yyz219
那就去掉变量延迟:
  1. @echo off
  2. (for /f "delims=" %%i in ('findstr "\.txt \.ini \.bat \.vbs" 1.csv') do (
  3.     for /f tokens^=17^ delims^=^" %%j in (%%i) do (
  4.         for /f "delims=-" %%k in ("%%j") do echo,%%k
  5.     )
  6. ))>1.txt
  7. pause
复制代码
1

评分人数

    • yyz219: 辛苦了 谢谢技术 + 1

TOP

回复  yyz219
那就去掉变量延迟:
qixiaobin0715 发表于 2022-9-21 10:16



    辛苦了 谢谢
我是小白,希望老师多多帮助

TOP

回复  yyz219
那就去掉变量延迟:
qixiaobin0715 发表于 2022-9-21 10:16



    非常成功,非常感谢
我是小白,希望老师多多帮助

TOP

本帖最后由 hfxiang 于 2022-9-21 10:45 编辑

回复 20# yyz219


   
如果想快,建议用第3方式具gawk( http://bcn.bathome.net/tool/4.1.3/gawk.exe
  1. @(for /f "delims=" %%a in ('gawk -F"," "$10~/\.txt/||/\.ini/||/\.bat/||/\.vbs/{print $10}" 1.csv') do @for /f "delims=-" %%b in (%%a) do @echo %%b)>1.txt 2>nul
复制代码
1

评分人数

TOP

回复  yyz219


   
如果想快,建议用第3方式具gawk(  )
hfxiang 发表于 2022-9-21 10:42


又多了一种方法,谢谢
我是小白,希望老师多多帮助

TOP

22楼代码化简为:
  1. @echo off
  2. (for /f tokens^=17^ delims^=^" %%j in ('findstr "\.txt \.ini \.bat \.vbs" 1.csv') do (
  3.     for /f "delims=-" %%k in ("%%j") do echo,%%k
  4. ))>1.txt
  5. pause
复制代码

TOP

如果文件扩展名都是4个字符(包括.),用一个for循环+变量延迟即可:
  1. @echo off
  2. for /f tokens^=17^ delims^=^" %%j in ('findstr "\.txt \.ini \.bat \.vbs" 1.csv') do (
  3.     if "%%j"=="%%~fj" (
  4.         set "Filen=%%~dpnj"
  5.     ) else (
  6.         set "Filen=%%~nj"
  7.     )
  8.     set "Extn=%%~xj"
  9.     setlocal enabledelayedexpansion
  10.     echo,!Filen!!Extn:~,4!
  11.     endlocal
  12. )
  13. pause
复制代码
这个可以忽略,主要是自己想练练手。
1

评分人数

TOP

如果文件扩展名都是4个字符(包括.),用一个for循环+变量延迟即可:这个可以忽略,主要是自己想练练手。
qixiaobin0715 发表于 2022-9-24 10:05



     乐于助人
我是小白,希望老师多多帮助

TOP

返回列表