【发布时间】:2017-02-13 16:50:38
【问题描述】:
他们没有多大帮助;只是重申了我已经知道的内容。
这行得通:
@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 中转义 " 是一个问题。我已经 尝试使用 "" 和 /" 以及 ^" 进行转义,但无济于事。
我在做吗 这些方法有问题吗?
- ('dir . /b /a-d | findstr /v /i "".bat$"" ')
- ('dir . /b /a-d | findstr /v /i \".bat$\" ')
- ('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