【问题标题】:escaping " symbol used in findstr within a FOR statement转义 FOR 语句中 findstr 中使用的 " 符号
【发布时间】:2017-02-13 16:50:38
【问题描述】:

是的,我已经尝试了最流行的可用解决方案(1)(2)

他们没有多大帮助;只是重申了我已经知道的内容。

这行得通:

@echo on
set var=APPENDTEXT
for /f "delims=" %%a in ('dir *.* /b /a-d') do ren "%%a" "%%~na%var%%%~xa"
pause

但后来我尝试像这样改进它

@echo on
set var=APPENDTEXT
for /f "delims=" %%a in ('dir *.* /b /a-d | findstr /v /i "\.bat$" ') do ren "%%a" "%%~na%var%%%~xa"
pause

这样我就不会最终重命名批处理文件本身。 但后来一切都搞砸了。

我已经尝试了几个approaches for escaping,但没有一个能像我希望的那样工作。

其他信息:
据我所知,当 findstr 本身位于其他东西中时,在 findstr 中转义 " 是一个问题。我已经 尝试使用 "" 和 /" 以及 ^" 进行转义,但无济于事。

我在做吗
这些方法有问题吗?

  1. ('dir . /b /a-d | findstr /v /i "".bat$"" ')
  2. ('dir . /b /a-d | findstr /v /i \".bat$\" ')
  3. ('dir . /b /a-d | findstr /v /i ^".bat$^" ')

什么是逃避它的正确方法? *

我想让它做什么?

简单地说,

当我在文件夹中运行 this.bat 文件时,我想要里面的所有文件 它将使用 APPENDTEXT 重命名(bat 文件本身除外)

示例:
a.dat --> aAPPENDTEXT.dat
pleasework.txt --> pleaseworkAPPENDTEXT.txt

【问题讨论】:

  • 你需要逃离 PIPE。
  • 您也可以去掉 findstr 并在重命名之前与文件扩展名进行比较。 for /f "delims=" %%a in ('dir *.* /b /a-d') do IF /I NOT "%%~xa"==".bat" ren "%%a" "%%~na%var%%%~xa"
  • 你也可以通过锁定批处理文件<"%~f0" 2>nul (for %%a in (*) do ren "%%a" "%%~na%var%%%~xa")来摆脱比较
  • 除上述之外,为了满足您的要求,您为什么只是排除扩展名,请使用^|FindStr/VIXC:"%~nx0"
  • 我建议使用命令行for /f "delims=" %%a in ('dir * /b /a-d') do if /i not "%~nx0" == "%%~nxa" ren "%%a" "%%~na%var%%%~xa"忽略运行该命令行的批处理文件。

标签: batch-file cmd


【解决方案1】:

您已正确转义 findstr 语句,但管道 | 符号仍需要转义。

| findstr   →   ^| findstr

@echo on
set var=APPENDTEXT
for /f "delims=" %%a in ('dir *.* /b /a-d ^| findstr /v /i "\.bat$" ') do ren "%%a" "%%~na%var%%%~xa"
pause

【讨论】:

  • 你测试过这个吗?
  • 我将如何继续改进条件以排除所有文件名末尾已经有 APPENDTEXT 的文件。我应该在这里改变什么? for /f "delims=" %%a in ('dir *.* /b /a-d ^| findstr /v /i "\.bat$"') do ren "%%a" "%%~na%var%%%~xa" 我尝试在 do 之后添加一个 findstr 条件来检查 %%a 中的“APPENDTEXT”,但它失败了。你能帮我吗?
  • @SiddhantRimal for /f "delims=" %%a in ('dir *.* /b /a-d ^| findstr /v /i "\.bat$"|findstr /V /C:"APPENDTEXT"') do ren "%%a" "%%~na%var%%%~xa"
  • @SamDenty 我是already got an answer from another question。我又遇到了管道问题。感谢您的输入。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多