如何将命令的输出重定向到环境变量中定义名称的文件?

2024-02-12

我想将文件夹下存在的所有文件的绝对路径存储到文本文件中,比方说temp.txt.

我正在使用此命令来执行此任务:

dir /s/b/a-d > D:\my work\temp.txt

当我重定向到硬编码到批处理文件中的文件名时,上述命令工作正常。

但是,当我使用如下代码所示的变量时,我没有将输出重定向到文件temp.txt.

@echo off
setlocal enabledelayedexpansion
REM I am running this script from D:\my work\
set origDir= %cd%
cd C:\
set temporaryFile="!origDir!\temp.txt"
dir /s/b/a-d > !temporaryFile!

为什么输出为DIR没有写入D:\my work\temp.txt?


答案关于为什么在命令行上使用“set var = text”后没有带有“echo %var%”的字符串输出? https://stackoverflow.com/a/26388460/3074564命令行有什么问题:

set origDir= %cd%

命令不会忽略等号后面的空格SET。环境变量的字符串值origDir因此用前导空格字符定义。

接下来是命令行

set temporaryFile="!origDir!\temp.txt"

结果是你的情况的字符串" D:\my work\temp.txt"将双引号分配给环境变量temporaryFile.

因此,由于以空格字符开头,路径用双引号引起来的文件名无效。

您的任务的可能代码是:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "origDir=%CD%"

rem Current directory path usually does not end with a backslash. But on
rem current directory being root of a drive it ends with a backslash which
rem should be removed to correct concatenate it with backslash and file name.

if "%origDir:~-1%" == "\" set "origDir=%origDir:~0,-1%"
set "temporaryFile=%origDir%\temp.txt"
cd /D C:\
dir /A-D /B /S >"%temporaryFile%"
endlocal

这里不需要使用延迟环境变量扩展。

命令CD仅当参数为当前目录时,才将当前目录更改为与当前驱动器不同的驱动器上的指定目录/D也使用了并且指定的目录不在使用 UNC 路径引用的网络共享上。

命令PUSHD启用命令扩展也适用于 UNC 路径并且POPD可以恢复初始当前目录。

嗯,命令ENDLOCAL在上面的批处理文件中也恢复初始当前目录。从命令提示符窗口中运行此批处理文件可以看到这一点D:\my work是当前目录。echo %CD%运行批处理文件输出后执行D:\my work尽管批处理文件更改为驱动器的根目录C:. Read 这个答案 https://stackoverflow.com/a/38676582/3074564有关命令的详细信息SETLOCAL and ENDLOCAL.

也可以但不推荐:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "origDir=%CD%"
if "%origDir:~-1%" == "\" set "origDir=%origDir:~0,-1%"
set "temporaryFile="%origDir%\temp.txt""
cd /D C:\
dir /A-D /B /S >%temporaryFile%
endlocal

环境变量temporaryFile保存的文件名的完整路径已经用双引号引起来,因此DIR命令行由 Windows 命令解释器预处理后执行,如下所示:

dir /A-D /B /S  1>"D:\my work\temp.txt"

一般来说,不建议将已经用双引号括起来的文件夹或文件名分配给环境变量,因为如果稍后在批处理代码中将变量值与其他字符串连接起来,这很容易导致意外行为,请参见示例如何设置带空格的环境变量? https://stackoverflow.com/questions/34353504/how-to-set-environment-variables-with-spaces

但此任务的最短版本是单个命令行:

@dir C:\* /A-D /B /S >temp.txt

该单个命令行的作用与包含上述所有命令的两个批处理文件完全相同。它在当前目录中创建D:\my work a file temp.txt包含整个驱动器上所有文件的名称C:具有当前用户帐户有权列出目录条目的完整路径。

为了了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

  • cd /?
  • dir /?
  • echo /?
  • endlocal /?
  • if /?
  • rem /?
  • set /?
  • setlocal /?

另请阅读 Microsoft 的文章:使用命令重定向运算符 https://technet.microsoft.com/en-us/library/bb490982.aspx.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将命令的输出重定向到环境变量中定义名称的文件? 的相关文章

随机推荐

  • 将排序描述符应用于从模板创建的 NSFetchRequest

    我在核心数据模型中定义了一个名为 RemainingGaneProjections 的提取请求 我想执行该获取请求并按实体的属性之一对结果进行排序 我的代码如下所示 NSFetchRequest projectionsRequest mod
  • 如何防止/检测使用 EXP() 的 Postgresql 计算中的下溢

    在使用 EXP x 函数的查询中 我收到一个值超出范围 来自 pgsql 的下溢错误 x 的什么值会触发此操作 我该如何预防或检测它 函数 exp 称为指数函数 其反函数是自然对数 或以 e 为底的对数 数字 e 通常也被定义为自然对数的底
  • 在 Javascript 中获取查询字符串数组值[重复]

    这个问题在这里已经有答案了 我有一个使用 get 方法并包含一个数组的表单 http www example com name hello name world 我正在尝试使用 JavaScript 或 jQuery 检索数组值 hello
  • Chrome 51 滚动时出现奇怪的框阴影错误

    所以在制作网站时我发现了一个奇怪的box shadowChrome 51 上的错误 我的网站有一个固定标题 其中包含box shadow 当我向上或向下滚动时 框阴影会留下一些标记 水平灰线 我也无法在 jsfiddle 上重现这个错误 小
  • 当方向改变时重新创建活动时,媒体播放器不会加载

    我是新使用表面视图在视频播放器中播放视频的新手 现在我想在重新加载或重新创建视图时方向发生变化时保存媒体播放器的实例状态 然后旧媒体播放器状态从旧位置开始 而不是在零位置加载到原始装置上像屏幕方向一样在清单中设置 但当时 oncreate
  • 是否存在类似 Crashlytics 的 Web 应用服务?

    我是一名 Web 和 iOS 开发人员 在移动设备上 我们有著名的工具来收集应用程序引发的所有异常和错误 Crashlytics 和其他 只需几行代码即可安装 sdk 开始自动跟踪所有内容 然后他们在其网站上显示错误和有用信息以及优先级和其
  • DataGridView 中当前选定行的索引

    就是这么简单 如何获取当前选择的索引Row of a DataGridView 我不想要Row对象 我想要索引 0 n 有的是RowIndex http msdn microsoft com en us library system win
  • 对两个外键约束进行级联删除

    我有以下示例 Table A some id Table B another id Table C some id fk another id fk 我想级联一行Table C如果两者都some id and another id从各自的表
  • Julia:函数的偶数数据类型

    我有大约 50 个函数 它们应该只消耗偶数正数 现在我每次都用 if 检查输入的数字是否为零 function grof x Int if x 2 0 println good else throw x is not an even num
  • 如何确定属性是否是具有反射的自动实现属性?

    因此 就我而言 我正在使用反射来发现类的结构 我需要能够查明某个属性是否是 PropertyInfo 对象自动实现的属性 我假设反射 API 不会公开此类功能 因为自动属性依赖于 C 但是是否有任何解决方法可以获取此信息 您可以检查一下是否
  • 链接隐式转换运算符

    我有一个类 我需要隐式转换为一些带有中间值的东西 例如 struct outer struct inner operator T return T operator inner return inner 如果我有这个结构 是吗 always
  • Rails 3、回形针(和 formattastic)- 删除图像附件

    我似乎找不到所有组件都完整的示例 我很难删除图像附件 Classes class Product has many product images dependent gt destroy accepts nested attributes
  • 测试:模糊模拟

    我想用输入测试简单的角度分量 因此 底部的示例几乎没有为测试做准备 并且应该在组件中发生test模糊功能 显示日志 但我在控制台中没有日志 我尝试了两种情况 获取 div 原生元素并单击它并使用blur 输入本机元素的函数 在角度应用程序中
  • 如何使用 Lambda 将 LINQ 理解式查询语法转换为方法语法

    是否有工具 流程或解决方案可以将以下 LINQ 查询语法转换为带有 Lambda 的方法语法 点表示法 我希望解决方案将以下查询语法转换为这样的方法语法 var filteredEmployees from employee in allE
  • 简化布尔表达式 i.t.o 变量出现

    如何简化给定的具有多个变量 gt 10 的布尔表达式 以使每个变量出现的次数最小化 在我的场景中 变量的值必须被视为短暂的 也就是说 必须为每次访问重新计算 当然仍然是静态的 因此 在尝试求解函数之前 我需要尽量减少必须评估变量的次数 考虑
  • 在python中导入openCV空闲错误:共享对象文件

    我一直在尝试在 python 中使用 cv2 库 在树莓派 3 上的 IDLE 中 但我无法成功导入它 当我输入 import cv2 时 我得到 Traceback most recent call last File home pi D
  • SQL:从两个表中选择相似的列

    我有一个包含两个表的数据库 Table1 and Table2 他们都有一个共同的专栏 ColumnA 这是一个nvarchar 如何从两个表中选择此列并将其作为结果集中的单个列返回 所以我正在寻找类似的东西 ColumnA in Tabl
  • 不同时区的同一日期

    我的问题是如何在不同时区获得相同的日 月 年 小时 分钟 秒 例如 var now moment valueOf var result1 moment now format DD MM YYYY HH mm SS Z 在我的时区 我得到这样
  • 在 Flutter 中实现双向列表视图

    Flutter中如何实现双向滚动视图 ListView 有一个scrollDirection 字段 但它只能采用Axis horizo ntal 或Axis vertical 有可能两者兼得吗 这是使用外部的潜在解决方案SingleChil
  • 如何将命令的输出重定向到环境变量中定义名称的文件?

    我想将文件夹下存在的所有文件的绝对路径存储到文本文件中 比方说temp txt 我正在使用此命令来执行此任务 dir s b a d gt D my work temp txt 当我重定向到硬编码到批处理文件中的文件名时 上述命令工作正常