如果文件包含2个批处理字符串,则重命名文件

时间:2018-09-10 10:33:59

标签: batch-file rename batch-processing batch-rename

我有一个文件“ codes.txt”,每行包含一个代码。

我试图在一个文件夹中搜索并重命名所有包含名称中的代码以及另一个字符串的文件:

@echo off

for /F "tokens=*" %%b in (codes.txt) do  (

// If file names in folder contain %%b and "foo", rename to %%b.'string'
// If file names in folder contain %%b and "foo2", rename %%b.'string2'

)

谢谢

1 个答案:

答案 0 :(得分:1)

假设文件中的代码包含:

Caused by: org.hibernate.exception.DataException: could not insert collection: [MyEntry.linkedEntities#VWS1]
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:118)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
    at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1374)
    at org.hibernate.action.internal.CollectionRecreateAction.execute(CollectionRecreateAction.java:50)
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604)
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:478)
    at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:356)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39)
    at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1454)
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:511)
    at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3278)
    at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2474)
    at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:473)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:178)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:39)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:271)
    at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:98)
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517)
    ... 40 more
Caused by: org.postgresql.util.PSQLException: The column index is out of range: 4, number of columns: 3.
    at org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java:65)
    at org.postgresql.core.v3.SimpleParameterList.setStringParameter(SimpleParameterList.java:128)
    at org.postgresql.jdbc.PgPreparedStatement.bindString(PgPreparedStatement.java:1023)
    at org.postgresql.jdbc.PgPreparedStatement.setString(PgPreparedStatement.java:344)
    at org.postgresql.jdbc.PgPreparedStatement.setString(PgPreparedStatement.java:328)

并且您的目录中有一个名为:

的文件
1234
5678

然后此脚本将执行以下操作:

foo1234.txt
1234ABCfoo.txt
5678.txt

首先,它使用换行符作为分隔符,循环遍历code.txt。然后它将在包含代码的文件上执行dir,并在名称中的任何位置为foo @echo off for /f %%i in (codes.txt) do ( for /f %%a in ('dir /b /a-d *%%i* ^| findstr "foo"') do echo %%a ) 。使用上述文件,它将回显找到的仅2个匹配项:

findstr

它将与foo1234.txt 1234ABCfoo.txt 不匹配,因为名称中的任何地方都没有5678.txt

显然,您需要将脚本中的foo部分更改为您要实现的命令。