【问题标题】:Convert a PowerShell foreach loop to a batch file for /f loop [closed]将 PowerShell foreach 循环转换为 /f 循环的批处理文件 [关闭]
【发布时间】:2018-09-15 00:10:03
【问题描述】:

需要将此从 powershell 转换为批处理

$filenames = Get-Content -Path "C:\filenames.txt"
$deletePath = "C:\DeletePath"

foreach ($file in $filenames)
{
Remove-Item -Path "$deletePath\$file.*"
}

感谢您的帮助

我的代码

set /p filenames=<"C:\filenames.txt"
set deletePath="C:\DeletePath\"

for /f %%b in (%filenames%) do del %deletePath%\%%b

【问题讨论】:

  • 您需要转换回批处理的原因是什么?为什么不在powershell中编写整个脚本并成为未来的证明?或者如果不可能,只需从批处理中调用一些 powershell 命令

标签: windows powershell batch-file command-line cmd


【解决方案1】:
@echo off
setlocal

set "deletePath=C:\DeletePath"

for /f "usebackq delims=" %%i in ("C:\filenames.txt") do echo del "%deletePath%\%%i"

删除echo 以执行实际删除。

解释

  • 设置值可能包含空格的变量的最可靠方法是将名称和值都括在 "..." (set "deletePath=C:\DeletePath") 中 .

      1234563
  • 一般情况下,请参阅 help set,但此处未解释引用问题。

  • for /f 可用于循环文件中的行,在迭代变量 (%%i) 之前使用双引号字符串 ("...") 指定 选项(参见 @ 987654331@):

    • usebackq 在这种情况下允许在输入文件路径周围使用"...",而不会将该文件路径解释为 字符串

    • delims= 确保从输入文件中完整读取每一行,即使其中包含空格。

    • 相比之下,set /p filenames=&lt;"C:\filenames.txt" 只会将指定文件中的第一行读入变量%filenames%

  • 【讨论】:

      猜你喜欢
      • 2021-03-12
      • 2014-12-11
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      相关资源
      最近更新 更多