【问题标题】:How to create file in partially known folder name using batch file如何使用批处理文件在部分已知的文件夹名称中创建文件
【发布时间】:2014-04-26 06:03:20
【问题描述】:

我想在特定目录C:\Users\myUser\*.data\中创建一个0字节的文件名dblank

echo. 2>"C:\Users\myUser\*.data\dblank.txt"

上述命令中的*号指的是任何字母或数字。我不知道。如何引用我的批处理代码中的任何字母或数字?

【问题讨论】:

  • 这是 unixoid/Linux 环境还是一些 MS-Windows 风格?

标签: shell batch-file command


【解决方案1】:

也许是这样的:

setlocal enableextensions
for /D %%i in (C:\Users\myUsers\*.data) do copy nul "%%~i\dblank.txt"
endlocal

如果命令扩展已启用 (cmd /E:on),您可以省略 setlocal/endlocal。 这适用于每个现有的 *.data 文件夹(如果有)。

【讨论】:

    【解决方案2】:
    @echo off
    for /f "delims=" %%f in ('dir /b /s /ad C:\Users\myUser\*.data') do echo. 2>"%%f\dblank.txt"
    

    编辑 过滤结果:

    @echo off
    for /f "delims=" %%f in ('dir /b /s /ad C:\Users\myUser\*.data^|findstr /r "\\[0-9a-zA-Z]*\.data$"') do (
      echo. 2>"%%f\dblank.txt"
    )
    

    【讨论】:

    • 我不明白你写的。如果我指定文件夹名称而不是 *.如何告诉我的脚本 * 可以是任何数字字母?即文件夹名称可能是 12aa.data、12bb.data 等。我不明白你为什么要创建一个 for 循环?
    • @user2192774 - 这将找到目录名称。如果您愿意,可以使用 findstr 过滤结果
    • 您的第二个答案有效。第一个不创建任何文件。我创建了以下目录:C:/testing/a54.data。我将您的命令写为:for /f %%f in ('dir C:\testing\*.data') do set "dirn=%%~dpfnsf" echo. 2>"%dirn%\dblank.txt",但尚未创建任何文件。
    • 现在都可以了。我不明白为什么我必须在 for 循环中这样做?批次代码中没有任何符号我可以引用任何数字或字母吗?循环似乎会降低效率。我认为应该有一个符号,例如 % 来指代任何字母或数字?
    • 您的正则表达式允许使用 !和 $ 所以也许这只会过滤字母数字:findstr /r "^[0-9a-zA-Z]*\.data" 但 findstr 用正则表达式做了一些奇怪的事情。
    猜你喜欢
    • 2021-07-01
    • 1970-01-01
    • 2015-10-28
    • 2013-04-22
    • 1970-01-01
    • 2017-06-07
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多